mirror of
https://github.com/Interlisp/maiko.git
synced 2026-02-04 07:33:07 +00:00
Maiko sources matching state as of 020102 prior to initial patching for Mac OSX
This commit is contained in:
328
src/dspsubrs.c
Executable file
328
src/dspsubrs.c
Executable file
@@ -0,0 +1,328 @@
|
||||
/* $Id: dspsubrs.c,v 1.3 2001/12/26 22:17:02 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
|
||||
static char *id = "$Id: dspsubrs.c,v 1.3 2001/12/26 22:17:02 sybalsky Exp $ Copyright (C) Venue";
|
||||
/*** ADOPTED NEW VERSION ***/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* (C) Copyright 1989-2000 Venue. All Rights Reserved. */
|
||||
/* Manufactured in the United States of America. */
|
||||
/* */
|
||||
/* The contents of this file are proprietary information */
|
||||
/* belonging to Venue, and are provided to you under license. */
|
||||
/* They may not be further distributed or disclosed to third */
|
||||
/* parties without the specific permission of Venue. */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
#include "version.h"
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#ifndef NOPIXRECT
|
||||
#include <sunwindow/window_hs.h>
|
||||
#include <pixrect/memvar.h>
|
||||
#endif /* NOPIXRECT */
|
||||
|
||||
|
||||
#include "lispemul.h"
|
||||
#include "lsptypes.h"
|
||||
#include "lispmap.h"
|
||||
#include "display.h"
|
||||
#include "arith.h"
|
||||
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)
|
||||
*
|
||||
****************************************************/
|
||||
|
||||
DSP_dspbout( args )
|
||||
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 ;
|
||||
|
||||
DSP_showdisplay( args )
|
||||
LispPTR *args;
|
||||
{
|
||||
DisplayInitialized = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************
|
||||
*
|
||||
* DSP_VideoColor() entry of SUBRCALL 66 1
|
||||
* called from (VIDEOCLOR BLACKFLG)
|
||||
*
|
||||
****************************************************/
|
||||
|
||||
DSP_VideoColor( args )
|
||||
LispPTR *args; /* args[0] : black flag */
|
||||
{
|
||||
int invert;
|
||||
#ifdef SUNDISPLAY
|
||||
return NIL;
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
|
||||
#ifdef XWINDOW
|
||||
invert = args[0] & 0xFFFF;
|
||||
lisp_Xvideocolor( invert );
|
||||
if( invert )
|
||||
return ATOM_T;
|
||||
else
|
||||
return NIL;
|
||||
#endif /* XWINDOW */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern struct cursor CurrentCursor;
|
||||
extern int LispWindowFd;
|
||||
|
||||
extern int errno;
|
||||
|
||||
|
||||
/****************************************************
|
||||
*
|
||||
* DSP_Cursor() entry of SUBRCALL 64 2
|
||||
* called from \HARDCURSORUP etc.
|
||||
*
|
||||
****************************************************/
|
||||
DSP_Cursor( args , argnum)
|
||||
LispPTR *args; int argnum;
|
||||
/* args[0] : hot sopt X
|
||||
* args[1] : hot spot Y
|
||||
*/
|
||||
{
|
||||
extern int ScreenLocked;
|
||||
extern DLword *EmCursorX68K,*EmCursorY68K;
|
||||
extern int LastCursorX,LastCursorY;
|
||||
static int Init=T;
|
||||
|
||||
#ifdef SUNDISPLAY
|
||||
if (argnum == 2) {
|
||||
CurrentCursor.cur_xhot=args[0] & 0xffff;
|
||||
CurrentCursor.cur_yhot=args[1] & 0xffff;
|
||||
};
|
||||
|
||||
#ifdef OLD_CURSOR
|
||||
win_setcursor( LispWindowFd, &CurrentCursor );
|
||||
#else
|
||||
#ifndef INIT
|
||||
ScreenLocked =T;
|
||||
if(!Init){
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(*EmCursorX68K,*EmCursorY68K);
|
||||
}
|
||||
else{
|
||||
Init=NIL;
|
||||
cursor_hidden_bitmap(0,0);
|
||||
taking_mouse_up(0,0);
|
||||
*EmCursorX68K=LastCursorX=0;
|
||||
*EmCursorY68K=LastCursorY=0;
|
||||
}
|
||||
|
||||
ScreenLocked=NIL;
|
||||
#else
|
||||
/* Init specific lde only */
|
||||
ScreenLocked =T;
|
||||
if(!Init){
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(0,0);
|
||||
}
|
||||
else{
|
||||
Init=NIL;
|
||||
cursor_hidden_bitmap(0,0);
|
||||
taking_mouse_up(0,0);
|
||||
}
|
||||
|
||||
ScreenLocked=NIL;
|
||||
#endif /* INIT */
|
||||
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
|
||||
#ifdef XWINDOW
|
||||
/* For X-Windows, set the cursor the 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.
|
||||
*
|
||||
****************************************************/
|
||||
|
||||
DSP_SetMousePos( args )
|
||||
register LispPTR *args; /* args[0] : X pos
|
||||
* args[1] : Y pos
|
||||
*/
|
||||
{
|
||||
#ifdef SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
register int x ,y;
|
||||
x=GetSmalldata(args[0]);
|
||||
y=GetSmalldata(args[1]); /* debug */
|
||||
win_setmouseposition(LispWindowFd, GetSmalldata(args[0]),
|
||||
GetSmalldata(args[1]));
|
||||
#else
|
||||
extern int ScreenLocked;
|
||||
extern DLword *EmCursorX68K,*EmCursorY68K,*EmMouseX68K,*EmMouseY68K;
|
||||
register int x ,y;
|
||||
ScreenLocked=T;
|
||||
x=GetSmalldata(args[0]);
|
||||
y=GetSmalldata(args[1]);
|
||||
/* for Suntool's invisible cursor */
|
||||
win_setmouseposition(LispWindowFd, x,y);
|
||||
/* for REAL cursor image */
|
||||
taking_mouse_down();
|
||||
taking_mouse_up(x,y);
|
||||
|
||||
#ifndef INIT
|
||||
*EmMouseX68K=x;
|
||||
*EmMouseY68K=y;
|
||||
#endif
|
||||
ScreenLocked=NIL;
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
|
||||
#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.
|
||||
*
|
||||
****************************************************/
|
||||
DSP_ScreenWidth( args )
|
||||
LispPTR *args;
|
||||
{
|
||||
return( S_POSITIVE | (0xFFFF & displaywidth) );
|
||||
}
|
||||
|
||||
/****************************************************
|
||||
*
|
||||
* DSP_ScreenHight() entry of SUBRCALL 68 0
|
||||
* called from \Katana.DisplayHeight.
|
||||
*
|
||||
****************************************************/
|
||||
DSP_ScreenHight( args )
|
||||
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 */
|
||||
|
||||
flip_cursor()
|
||||
{
|
||||
register DLword *word;
|
||||
register 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 elses 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 SUNDISPLAY
|
||||
#ifdef OLD_CURSOR
|
||||
|
||||
win_setcursor( LispWindowFd, &CurrentCursor );
|
||||
#else
|
||||
ScreenLocked=T;
|
||||
taking_mouse_down();
|
||||
#ifndef INIT
|
||||
taking_mouse_up(*EmCursorX68K,*EmCursorY68K);
|
||||
#else
|
||||
if(!for_makeinit)
|
||||
taking_mouse_up(*EmCursorX68K,*EmCursorY68K);
|
||||
else
|
||||
taking_mouse_up(0,0);
|
||||
#endif /* INIT */
|
||||
|
||||
ScreenLocked=NIL;
|
||||
#endif
|
||||
#endif /* SUNDISPLAY */
|
||||
|
||||
|
||||
#ifdef XWINDOW
|
||||
/* JDS 011213: 15- cur y, as function does same! */
|
||||
Set_XCursor( Current_Hot_X, 15-Current_Hot_Y );
|
||||
#endif /* XWINDOW */
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user