| 460 | } |
| 461 | |
| 462 | static void |
| 463 | vesa_WritePixelRow(unsigned long offset, |
| 464 | unsigned char const *p_row, unsigned p_row_size) |
| 465 | { |
| 466 | if (vesa_segment != 0) { |
| 467 | /* Linear frame buffer in use */ |
| 468 | movedata(_go32_my_ds(), (unsigned)p_row, vesa_segment, offset, p_row_size); |
| 469 | } else { |
| 470 | /* Windowed frame buffer in use */ |
| 471 | unsigned long addr = vesa_SetWindow(vesa_write_win, offset); |
| 472 | unsigned i = 0; |
| 473 | while (offset + p_row_size > vesa_win_pos[vesa_write_win] + vesa_win_size) { |
| 474 | /* The row passes the end of the current window. Write what we can, |
| 475 | * and advance the window */ |
| 476 | unsigned w = (vesa_win_pos[vesa_write_win] + vesa_win_size) |
| 477 | - (offset + i); |
| 478 | dosmemput(p_row + i, w, addr); |
| 479 | i += w; |
| 480 | addr = vesa_SetWindow(vesa_write_win, offset + i); |
| 481 | } |
| 482 | dosmemput(p_row + i, p_row_size - i, addr); |
| 483 | } |
| 484 | } |
| 485 | |
| 486 | static unsigned long |
| 487 | vesa_MakeColor(struct Pixel p) |
no test coverage detected