Changeset 0bf84cc in mainline


Ignore:
Timestamp:
2006-06-02T22:58:02Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
27386e6a
Parents:
59ed572
Message:

Added support for styles for ega framebuffer.

Location:
fb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • fb/ega.c

    r59ed572 r0bf84cc  
    4141
    4242#include "ega.h"
     43#include "../console/screenbuffer.h"
     44#include "main.h"
    4345
    4446/* Allow only 1 connection */
     
    4951static char *scr_addr;
    5052
     53static unsigned int style = 0x0f;
     54
    5155static void clrscr(void)
    5256{
    5357        int i;
    5458       
    55         for (i=0; i < scr_width*scr_height; i++)
     59        for (i=0; i < scr_width*scr_height; i++) {
    5660                scr_addr[i*2] = ' ';
     61                scr_addr[i*2+1] = style;
     62        }
    5763}
    5864
     
    6066{
    6167        scr_addr[(row*scr_width + col)*2] = c;
     68        scr_addr[(row*scr_width + col)*2+1] = style;
     69}
     70
     71static void draw_text_data(keyfield_t *data)
     72{
     73        int i;
     74
     75        for (i=0; i < scr_width*scr_height; i++) {
     76                scr_addr[i*2] = data[i].character;
     77                if (data[i].style.fg_color > data[i].style.bg_color)
     78                        scr_addr[i*2+1] = 0x0f;
     79                else
     80                        scr_addr[i*2+1] = 0xf0;
     81        }
    6282}
    6383
     
    6989        char c;
    7090        unsigned int row, col;
     91        int bgcolor,fgcolor;
     92        keyfield_t *interbuf = NULL;
     93        size_t intersize = 0;
    7194
    7295        if (client_connected) {
     
    84107                        ipc_answer_fast(callid,0,0,0);
    85108                        return; /* Exit thread */
     109                case IPC_M_AS_AREA_SEND:
     110                        /* We accept one area for data interchange */
     111                        intersize = IPC_GET_ARG2(call);
     112                        if (intersize >= scr_width*scr_height*sizeof(*interbuf)) {
     113                                receive_comm_area(callid,&call,(void **)&interbuf, scr_width*scr_height*sizeof(*interbuf));
     114                                continue;
     115                        }
     116                        retval = EINVAL;
     117                        break;
     118                case FB_DRAW_TEXT_DATA:
     119                        if (!interbuf) {
     120                                retval = EINVAL;
     121                                break;
     122                        }
     123                        draw_text_data(interbuf);
     124                        retval = 0;
     125                        break;
    86126                case FB_GET_CSIZE:
    87127                        ipc_answer_fast(callid, 0, scr_height, scr_width);
     
    95135                        row = IPC_GET_ARG2(call);
    96136                        col = IPC_GET_ARG3(call);
    97                         if (row >= scr_width || col >= scr_height) {
     137                        if (col >= scr_width || row >= scr_height) {
    98138                                retval = EINVAL;
    99139                                break;
     
    102142                        retval = 0;
    103143                        break;
     144                case FB_SET_STYLE:
     145                        fgcolor = IPC_GET_ARG1(call);
     146                        bgcolor = IPC_GET_ARG2(call);
     147                        if (fgcolor > bgcolor)
     148                                style = 0x0f;
     149                        else
     150                                style = 0xf0;
    104151                default:
    105152                        retval = ENOENT;
  • fb/sysio.c

    r59ed572 r0bf84cc  
    6969}
    7070
     71static void set_style(int mode)
     72{
     73        char control[20];
     74       
     75        snprintf(control, 20, "\033[%df", mode);
     76        sysputs(control);
     77}
     78
    7179/** ANSI terminal emulation main thread */
    7280static void sysio_client_connection(ipc_callid_t iid, ipc_call_t *icall)
     
    7987        int lastrow=0;
    8088        int newcol,newrow;
     89        int fgcolor,bgcolor;
    8190
    8291        if (client_connected) {
     
    116125                        retval = 0;
    117126                        break;
     127                case FB_SET_STYLE:
     128                        fgcolor = IPC_GET_ARG1(call);
     129                        bgcolor = IPC_GET_ARG2(call);
     130                        if (fgcolor > bgcolor)
     131                                set_style(0);
     132                        else
     133                                set_style(7);
     134                        retval = 0;
     135                        break;
    118136                default:
    119137                        retval = ENOENT;
Note: See TracChangeset for help on using the changeset viewer.