Subversion Repositories HelenOS-historic

Rev

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

Rev 1713 Rev 1720
Line 290... Line 290...
290
 * @param lines Positive number - scroll up, negative - scroll down
290
 * @param lines Positive number - scroll up, negative - scroll down
291
 */
291
 */
292
static void scroll_port_nodb(viewport_t *vport, int lines)
292
static void scroll_port_nodb(viewport_t *vport, int lines)
293
{
293
{
294
    int y;
294
    int y;
295
    int startline;
-
 
296
    int endline;
-
 
297
 
295
 
298
    if (lines > 0) {
296
    if (lines > 0) {
299
        for (y=vport->y; y < vport->y+vport->height - lines; y++)
297
        for (y=vport->y; y < vport->y+vport->height - lines; y++)
300
            memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
298
            memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
301
                   &screen.fbaddress[POINTPOS(vport->x,y + lines)],
299
                   &screen.fbaddress[POINTPOS(vport->x,y + lines)],
Line 561... Line 559...
561
 * @param data Text data fitting exactly into viewport
559
 * @param data Text data fitting exactly into viewport
562
 */
560
 */
563
static void draw_text_data(viewport_t *vport, keyfield_t *data)
561
static void draw_text_data(viewport_t *vport, keyfield_t *data)
564
{
562
{
565
    int i;
563
    int i;
566
    char c;
-
 
567
    int col,row;
564
    int col,row;
568
 
565
 
569
    clear_port(vport);
566
    clear_port(vport);
570
    for (i=0; i < vport->cols * vport->rows; i++) {
567
    for (i=0; i < vport->cols * vport->rows; i++) {
571
        if (data[i].character == ' ' && style_same(data[i].style,vport->style))
568
        if (data[i].character == ' ' && style_same(data[i].style,vport->style))
Line 597... Line 594...
597
 
594
 
598
    (*screen.rgb2scr)(&pmap->data[pos],color);
595
    (*screen.rgb2scr)(&pmap->data[pos],color);
599
}
596
}
600
 
597
 
601
/** Create a new pixmap and return appropriate ID */
598
/** Create a new pixmap and return appropriate ID */
602
static int shm2pixmap(char *shm, size_t size)
599
static int shm2pixmap(unsigned char *shm, size_t size)
603
{
600
{
604
    int pm;
601
    int pm;
605
    pixmap_t *pmap;
602
    pixmap_t *pmap;
606
 
603
 
607
    pm = find_free_pixmap();
604
    pm = find_free_pixmap();
Line 645... Line 642...
645
static int shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
642
static int shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
646
{
643
{
647
    static keyfield_t *interbuffer = NULL;
644
    static keyfield_t *interbuffer = NULL;
648
    static size_t intersize = 0;
645
    static size_t intersize = 0;
649
 
646
 
650
    static char *shm = NULL;
647
    static unsigned char *shm = NULL;
651
    static ipcarg_t shm_id = 0;
648
    static ipcarg_t shm_id = 0;
652
    static size_t shm_size;
649
    static size_t shm_size;
653
 
650
 
654
    int handled = 1;
651
    int handled = 1;
655
    int retval = 0;
652
    int retval = 0;
Line 670... Line 667...
670
                while (1)
667
                while (1)
671
                    ;
668
                    ;
672
            return 1;
669
            return 1;
673
        } else {
670
        } else {
674
            intersize = IPC_GET_ARG2(*call);
671
            intersize = IPC_GET_ARG2(*call);
675
            receive_comm_area(callid,call,(void **)&interbuffer);
672
            receive_comm_area(callid,call,(void *)&interbuffer);
676
        }
673
        }
677
        return 1;
674
        return 1;
678
    case FB_PREPARE_SHM:
675
    case FB_PREPARE_SHM:
679
        if (shm_id)
676
        if (shm_id)
680
            retval = EBUSY;
677
            retval = EBUSY;
Line 732... Line 729...
732
    return handled;
729
    return handled;
733
}
730
}
734
 
731
 
735
static void copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
732
static void copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
736
{
733
{
737
    int x,y;
734
    int y;
738
    int rowsize;
735
    int rowsize;
739
    int tmp;
736
    int tmp;
740
    int width = vport->width;
737
    int width = vport->width;
741
    int height = vport->height;
738
    int height = vport->height;
742
 
739
 
Line 783... Line 780...
783
 */
780
 */
784
static int draw_pixmap(int vp, int pm)
781
static int draw_pixmap(int vp, int pm)
785
{
782
{
786
    pixmap_t *pmap = &pixmaps[pm];
783
    pixmap_t *pmap = &pixmaps[pm];
787
    viewport_t *vport = &viewports[vp];
784
    viewport_t *vport = &viewports[vp];
788
    int x,y;
785
    int y;
789
    int tmp, srcrowsize;
786
    int tmp, srcrowsize;
790
    int realwidth, realheight, realrowsize;
787
    int realwidth, realheight, realrowsize;
791
    int width = vport->width;
788
    int width = vport->width;
792
    int height = vport->height;
789
    int height = vport->height;
793
 
790
 
Line 921... Line 918...
921
        animations[i].vp = nvp;
918
        animations[i].vp = nvp;
922
        retval = i;
919
        retval = i;
923
        break;
920
        break;
924
    case FB_ANIM_DROP:
921
    case FB_ANIM_DROP:
925
        i = IPC_GET_ARG1(*call);
922
        i = IPC_GET_ARG1(*call);
926
        if (nvp >= MAX_ANIMATIONS || i < 0) {
923
        if (i >= MAX_ANIMATIONS || i < 0) {
927
            retval = EINVAL;
924
            retval = EINVAL;
928
            break;
925
            break;
929
        }
926
        }
930
        animations[i].initialized = 0;
927
        animations[i].initialized = 0;
931
        break;
928
        break;
Line 1139... Line 1136...
1139
            if (i < 0 || i >= MAX_VIEWPORTS) {
1136
            if (i < 0 || i >= MAX_VIEWPORTS) {
1140
                retval = EINVAL;
1137
                retval = EINVAL;
1141
                break;
1138
                break;
1142
            }
1139
            }
1143
            if (! viewports[i].initialized ) {
1140
            if (! viewports[i].initialized ) {
1144
                while (1)
-
 
1145
                    ;
-
 
1146
                retval = EADDRNOTAVAIL;
1141
                retval = EADDRNOTAVAIL;
1147
                break;
1142
                break;
1148
            }
1143
            }
1149
            viewports[i].dboffset = 0;
1144
            viewports[i].dboffset = 0;
1150
            if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata)
1145
            if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata)
Line 1202... Line 1197...
1202
        case FB_GET_RESOLUTION:
1197
        case FB_GET_RESOLUTION:
1203
            ipc_answer_fast(callid, 0, screen.xres,screen.yres);
1198
            ipc_answer_fast(callid, 0, screen.xres,screen.yres);
1204
            continue;
1199
            continue;
1205
        case FB_POINTER_MOVE:
1200
        case FB_POINTER_MOVE:
1206
            mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
1201
            mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
-
 
1202
            retval = 0;
1207
            break;
1203
            break;
1208
        default:
1204
        default:
1209
            retval = ENOENT;
1205
            retval = ENOENT;
1210
        }
1206
        }
1211
        ipc_answer_fast(callid,retval,0,0);
1207
        ipc_answer_fast(callid,retval,0,0);