1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-15 15:57:13 +00:00
Interlisp.maiko/src/bitblt.c
Nick Briggs c33386ef44
Remove code for unsupported Sun display configurations (#388)
* Remove code for unsupported Sun display configurations

Initial cleanup removing all code that was #ifdef'd for SUNDISPLAY.
Other SunWindows dependent code may also be removeable

* prropstyle will never be defined with no SunWindows support and therefore no pixrect code

* Remove code that is ifndef NOPIXRECT, since pixrects are part of the obsolete Sun windows code.

There are still traces of pixrect dependent code that could be removed.
2021-08-10 16:31:59 -07:00

223 lines
6.4 KiB
C

/* $Id: bitblt.c,v 1.2 1999/01/03 02:06:47 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved
*/
/************************************************************************/
/* */
/* (C) Copyright 1989-95 Venue. All Rights Reserved. */
/* Manufactured in the United States of America. */
/* */
/************************************************************************/
#include "version.h"
#include <stdio.h>
#ifdef XWINDOW
#define DISPLAYBUFFER
#endif /* XWINDOW */
#include "lispemul.h"
#include "lspglob.h"
#include "lispmap.h"
#include "adr68k.h"
#include "address.h"
#include "pilotbbt.h"
#include "display.h"
#include "bitblt.h"
#include "bb.h"
#include "bitbltdefs.h"
#include "initdspdefs.h"
#if defined(INIT)
#include "initkbddefs.h"
extern int kbd_for_makeinit;
#endif
#ifdef DOS
#include "devif.h"
#include "iopage.h"
extern DspInterface currentdsp;
extern IOPAGE *IOPage68K;
#endif
extern int LispWindowFd;
extern int ScreenLocked;
#ifdef COLOR
extern int MonoOrColor;
#endif /* COLOR */
/*****************************************************************************/
/** **/
/** N_OP_pilotbitblt **/
/** **/
/** The Native-code compatible version of the opcode for bitblt. **/
/** **/
/** **/
/*****************************************************************************/
LispPTR N_OP_pilotbitblt(LispPTR pilot_bt_tbl,int tos)
{
PILOTBBT *pbt;
DLword *srcbase, *dstbase;
#if defined(SUNDISPLAY) || defined(DOS)
int displayflg;
#endif
int sx, dx, w, h, srcbpl, dstbpl, backwardflg;
int src_comp, op, gray, num_gray, curr_gray_line;
#ifdef INIT
/* for init, we have to initialize the pointers at the
first call to pilotbitblt or we die. If we do it
earlier we die also. We set a new flag so we don't
do it more than once which is a lose also.
I put this in an ifdef so there won't be any extra
code when making a regular LDE. */
if (!kbd_for_makeinit) {
init_keyboard(0);
kbd_for_makeinit = 1;
};
#endif
pbt = (PILOTBBT *)Addr68k_from_LADDR(pilot_bt_tbl);
w = pbt->pbtwidth;
h = pbt->pbtheight;
if ((h <= 0) || (w <= 0)) return (pilot_bt_tbl);
dx = pbt->pbtdestbit;
sx = pbt->pbtsourcebit;
backwardflg = pbt->pbtbackward;
/* if displayflg != 0 then source or destination is DisplayBitMap */
#ifdef DOS
currentdsp->device.locked++;
#else
ScreenLocked = T;
#endif /* DOS */
#if SUNDISPLAY || DOS
displayflg = cursorin(pbt->pbtdesthi, (pbt->pbtdestlo + (dx >> 4)), w, h, backwardflg) ||
cursorin(pbt->pbtsourcehi, (pbt->pbtsourcelo + (sx >> 4)), w, h, backwardflg);
#endif /* SUNDISPLAY */
srcbase = (DLword *)Addr68k_from_LADDR(VAG2(pbt->pbtsourcehi, pbt->pbtsourcelo));
dstbase = (DLword *)Addr68k_from_LADDR(VAG2(pbt->pbtdesthi, pbt->pbtdestlo));
srcbpl = pbt->pbtsourcebpl;
dstbpl = pbt->pbtdestbpl;
src_comp = pbt->pbtsourcetype;
op = pbt->pbtoperation;
gray = pbt->pbtusegray;
num_gray = ((TEXTUREBBT *)pbt)->pbtgrayheightlessone + 1;
curr_gray_line = ((TEXTUREBBT *)pbt)->pbtgrayoffset;
#if DOS
if (displayflg) (currentdsp->mouse_invisible)(currentdsp, IOPage68K);
;
#endif /* SUNDISPLAY / DOS */
new_bitblt_code
#if DOS
flush_display_lineregion(dx, dstbase, w, h);
if (displayflg) (currentdsp->mouse_visible)(IOPage68K->dlmousex, IOPage68K->dlmousey);
#endif /* SUNDISPLAY / DOS */
#ifdef XWINDOW
flush_display_lineregion(dx, dstbase, w, h);
#endif /* XWINDOW */
#ifdef DOS
currentdsp->device.locked--;
#else
ScreenLocked = NIL;
#endif /* DOS */
return (pilot_bt_tbl);
} /* end of N_OP_pilotbitblt */
/************************************************************************/
/* */
/* c u r s o r i n */
/* */
/* */
/* */
/************************************************************************/
#ifndef COLOR
/* for MONO only */
int cursorin(DLword addrhi, DLword addrlo, int w, int h, int backward)
{
register int x, y;
if (addrhi == DISPLAY_HI) {
y = addrlo / DisplayRasterWidth;
x = (addrlo - y * DisplayRasterWidth) << 4;
} else if (addrhi == DISPLAY_HI + 1) {
y = (addrlo + DLWORDSPER_SEGMENT) / DisplayRasterWidth;
x = ((addrlo + DLWORDSPER_SEGMENT) - y * DisplayRasterWidth) << 4;
} else
return (NIL);
if (backward) y -= h;
if ((x < MOUSEXR) && (x + w > MOUSEXL) && (y < MOUSEYH) && (y + h > MOUSEYL))
return (T);
else
return (NIL);
}
#else
/* for COLOR & MONO */
int cursorin(DLword addrhi, DLword addrlo, int w, int h, int backward)
{
register int x, y;
register DLword *base68k;
extern int MonoOrColor;
extern int displaywidth;
extern DLword *ColorDisplayRegion68k;
if (MonoOrColor == MONO_SCREEN) { /* On MONO screen */
if (addrhi == DISPLAY_HI) {
y = addrlo / DisplayRasterWidth;
x = (addrlo - y * DisplayRasterWidth) << 4;
} else if (addrhi == DISPLAY_HI + 1) {
y = (addrlo + DLWORDSPER_SEGMENT) / DisplayRasterWidth;
x = ((addrlo + DLWORDSPER_SEGMENT) - y * DisplayRasterWidth) << 4;
} else
return (NIL);
if (backward) y -= h;
if ((x < MOUSEXR) && (x + w > MOUSEXL) && (y < MOUSEYH) && (y + h > MOUSEYL))
return (T);
else
return (NIL);
} else {
base68k = (DLword *)Addr68k_from_LADDR(addrhi << 16 | addrlo);
if ((ColorDisplayRegion68k <= base68k) && (base68k <= COLOR_MAX_Address)) {
y = (base68k - ColorDisplayRegion68k) / displaywidth;
x = (UNSIGNED)(base68k - ColorDisplayRegion68k) - (y * displaywidth);
/* printf("cursorin: IN COLOR mx=%d my=%d x=%d y%d w=%d h=%d\n"
,*EmMouseX68K,*EmMouseY68K,x,y,w,h); */
} else
return (NIL);
if (backward) y -= h;
if ((x < MOUSEXR) && ((x + (w >> 3)) > MOUSEXL) && (y < MOUSEYH) &&
(y + h > MOUSEYL)) { /* printf("cursorin T\n"); */
return (T);
} else
return (NIL);
} /* on COLOR screen */
}
#endif /* COLOR */