mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-17 16:44:00 +00:00
183 lines
4.7 KiB
C
183 lines
4.7 KiB
C
/* $Id: dspsubrs.c,v 1.3 2001/12/26 22:17:02 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved
|
|
*/
|
|
/*** ADOPTED NEW VERSION ***/
|
|
|
|
/************************************************************************/
|
|
/* */
|
|
/* (C) Copyright 1989-2000 Venue. All Rights Reserved. */
|
|
/* Manufactured in the United States of America. */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
#include "version.h"
|
|
|
|
#include <stdio.h> // for putc
|
|
#include "arith.h" // for GetSmalldata
|
|
#include "display.h" // for BCPLDISPLAY, CURSORHEIGHT
|
|
#include "dspsubrsdefs.h" // for DSP_Cursor, DSP_ScreenHight, DSP_ScreenWidth
|
|
#include "lispemul.h" // for LispPTR, DLword, ATOM_T, NIL
|
|
#include "lispmap.h" // for S_POSITIVE
|
|
#include "lsptypes.h" // for GETWORD
|
|
#ifdef XWINDOW
|
|
#include "xcursordefs.h" // for Set_XCursor
|
|
#include "xlspwindefs.h" // for lisp_Xvideocolor, set_Xmouseposition
|
|
#endif
|
|
|
|
extern int DebugDSP;
|
|
extern int displaywidth, displayheight;
|
|
|
|
#ifdef XWINDOW
|
|
extern int Mouse_Included;
|
|
#endif /* XWINDOW */
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_dspbout() entry of SUBRCALL 9 1
|
|
* called from (DSPBOUT X)
|
|
*
|
|
****************************************************/
|
|
|
|
void DSP_dspbout(LispPTR *args) /* args[0] : charcode */
|
|
{ putc((args[0] & 0xFFFF) & 0x7f, BCPLDISPLAY); }
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_showdisplay() entry of SUBRCALL 19 2
|
|
* called from (SHOWDISPLAY BASE RASTERWIDTH)
|
|
*
|
|
****************************************************/
|
|
|
|
extern int DisplayInitialized;
|
|
|
|
void DSP_showdisplay(LispPTR *args)
|
|
{ DisplayInitialized = 1; }
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_VideoColor() entry of SUBRCALL 66 1
|
|
* called from (VIDEOCLOR BLACKFLG)
|
|
*
|
|
****************************************************/
|
|
|
|
LispPTR DSP_VideoColor(LispPTR *args) /* args[0] : black flag */
|
|
{
|
|
int invert;
|
|
#if defined(XWINDOW)
|
|
invert = args[0] & 0xFFFF;
|
|
lisp_Xvideocolor(invert);
|
|
if (invert)
|
|
return ATOM_T;
|
|
else
|
|
return NIL;
|
|
#else
|
|
return NIL;
|
|
#endif
|
|
}
|
|
|
|
extern struct cursor CurrentCursor;
|
|
extern int LispWindowFd;
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_Cursor() entry of SUBRCALL 64 2
|
|
* called from \HARDCURSORUP etc.
|
|
*
|
|
****************************************************/
|
|
void DSP_Cursor(LispPTR *args, int argnum)
|
|
/* args[0] : hot spot X
|
|
* args[1] : hot spot Y
|
|
*/
|
|
{
|
|
extern int ScreenLocked;
|
|
extern DLword *EmCursorX68K, *EmCursorY68K;
|
|
extern int LastCursorX, LastCursorY;
|
|
|
|
|
|
#ifdef XWINDOW
|
|
/* For X-Windows, set the cursor to the given location. */
|
|
Set_XCursor((int)(args[0] & 0xFFFF), (int)(args[1] & 0xFFFF));
|
|
#endif /* XWINDOW */
|
|
}
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_SetMousePos() entry of SUBRCALL 65 2
|
|
* called from macro \SETMOUSEXY etc.
|
|
*
|
|
****************************************************/
|
|
/* args[0] : X pos
|
|
* args[1] : Y pos
|
|
*/
|
|
void DSP_SetMousePos(LispPTR *args)
|
|
{
|
|
|
|
#ifdef XWINDOW
|
|
if (Mouse_Included)
|
|
set_Xmouseposition((int)(GetSmalldata(args[0])), (int)(GetSmalldata(args[1])));
|
|
#endif /* XWINDOW */
|
|
}
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_ScreenWidth() entry of SUBRCALL 67 0
|
|
* called from \Katana.DisplayWidth.
|
|
*
|
|
****************************************************/
|
|
LispPTR DSP_ScreenWidth(LispPTR *args)
|
|
{ return (S_POSITIVE | (0xFFFF & displaywidth)); }
|
|
|
|
/****************************************************
|
|
*
|
|
* DSP_ScreenHight() entry of SUBRCALL 68 0
|
|
* called from \Katana.DisplayHeight.
|
|
*
|
|
****************************************************/
|
|
LispPTR DSP_ScreenHight(LispPTR *args)
|
|
{ return (S_POSITIVE | (0xFFFF & displayheight)); }
|
|
|
|
/****************************************************
|
|
*
|
|
* flip_cursor()
|
|
*
|
|
****************************************************/
|
|
|
|
extern DLword *EmCursorBitMap68K;
|
|
extern int for_makeinit;
|
|
|
|
#ifdef XWINDOW
|
|
extern int Current_Hot_X, Current_Hot_Y;
|
|
#endif /* XWINDOW */
|
|
|
|
void flip_cursor() {
|
|
DLword *word;
|
|
int cnt;
|
|
extern int ScreenLocked;
|
|
extern DLword *EmCursorX68K, *EmCursorY68K;
|
|
|
|
word = EmCursorBitMap68K;
|
|
|
|
#ifdef INIT
|
|
|
|
/* since this is called frequently, and you don't want to have
|
|
to build a different LDE to run the 2 parts of a Loadup, there is
|
|
an ifdef AND a test. This way we don't generate
|
|
extra code for anybody else building an LDE
|
|
except those who want to try building loadups. */
|
|
|
|
if (!for_makeinit) {
|
|
for (cnt = CURSORHEIGHT; (cnt--);) { GETWORD(word++) ^= 0xFFFF; };
|
|
};
|
|
|
|
#else
|
|
|
|
for (cnt = CURSORHEIGHT; (cnt--);) { GETWORD(word++) ^= 0xFFFF; };
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef XWINDOW
|
|
/* JDS 011213: 15- cur y, as function does same! */
|
|
Set_XCursor(Current_Hot_X, 15 - Current_Hot_Y);
|
|
#endif /* XWINDOW */
|
|
}
|