mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-14 07:30:21 +00:00
120 lines
3.9 KiB
C
120 lines
3.9 KiB
C
/* $Id: dspif.c,v 1.4 2001/12/24 01:09:01 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
|
|
/* This is the display interface */
|
|
|
|
/************************************************************************/
|
|
/* */
|
|
/* (C) Copyright 1989, 1990, 1990, 1991, 1992, 1993, 1994, */
|
|
/* 1995, 1999 Venue. */
|
|
/* All Rights Reserved. */
|
|
/* Manufactured in the United States of America. */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
#include "version.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "lispemul.h"
|
|
#include "dbprint.h"
|
|
#include "devif.h"
|
|
|
|
#include "dspifdefs.h"
|
|
#include "xinitdefs.h"
|
|
|
|
static DspInterfaceRec curdsp = {0};
|
|
extern DspInterface currentdsp;
|
|
DspInterface currentdsp = &curdsp;
|
|
|
|
#ifdef XWINDOW
|
|
extern unsigned LispDisplayRequestedWidth;
|
|
extern unsigned LispDisplayRequestedHeight;
|
|
#endif /* XWINDOW */
|
|
|
|
#ifdef DOS
|
|
extern int dosdisplaymode;
|
|
|
|
static VESA_p(void) {
|
|
/* Magic. Do a vesa call to determine the current mode. */
|
|
return (VESA_call(3, 0));
|
|
}
|
|
|
|
static VGA_p(void) { return (TRUE); }
|
|
#endif /* DOS */
|
|
|
|
void make_dsp_instance(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
|
|
int depth_hint) {
|
|
#ifdef DOS
|
|
|
|
TPRINT(("Enter make_dsp_instance, dosdisplaymode is: %d\n", dosdisplaymode));
|
|
|
|
if (depth_hint == 0) depth_hint = 1;
|
|
|
|
switch (dosdisplaymode) {
|
|
case 1: VGA_init(dsp, 0, 0, 0, depth_hint); break;
|
|
case 0x102:
|
|
case 0x104: VESA_init(dsp, 0, 0, 0, depth_hint); break;
|
|
default:
|
|
if (VESA_p()) {
|
|
VESA_init(dsp, 0, 0, 0, depth_hint);
|
|
} else if (VGA_p()) {
|
|
VGA_init(dsp, 0, 0, 0, depth_hint);
|
|
} else { /* Can't set *ANY* video mode! */
|
|
(void)(void)fprintf(stderr, "No portable graphics mode supported by this host.\n");
|
|
(void)(void)fprintf(stderr, "\n-Expected VESA or VGA.\n");
|
|
exit(1);
|
|
}
|
|
break;
|
|
}
|
|
|
|
#elif XWINDOW
|
|
/* lispbitmap is 0 when we call X_init the first time. */
|
|
if (X_init(dsp, 0, LispDisplayRequestedWidth, LispDisplayRequestedHeight, depth_hint) == NULL) {
|
|
(void)fprintf(stderr, "Can't open display.");
|
|
exit(-1);
|
|
}
|
|
#endif /* DOS | XWINDOW */
|
|
} /* Now we know the maximum capabilities of the hardware. */
|
|
|
|
/*********************************************************************/
|
|
/* */
|
|
/* G e n e r i c R e t u r n T */
|
|
/* */
|
|
/* Utility function that just returns T */
|
|
/* */
|
|
/*********************************************************************/
|
|
unsigned long GenericReturnT(void *d) { (void)d; return (T); }
|
|
void GenericReturnVoid(void *d) {(void)d; return; }
|
|
void GenericPanic(void *d) {
|
|
(void)d;
|
|
TPRINT(("Enter GenericPanic\n"));
|
|
(void)fprintf(stderr, "Panic! Call to uninitialized display slot!");
|
|
exit(0);
|
|
}
|
|
|
|
void describedsp(DspInterface dsp) {
|
|
if (dsp == 0) {
|
|
printf("describedsp: Not a dsp!\n");
|
|
return;
|
|
}
|
|
|
|
printf("\n");
|
|
printf("width= %d\n", dsp->Display.width);
|
|
printf("height= %d\n", dsp->Display.height);
|
|
printf("bitsperpixel= %d\n", dsp->bitsperpixel);
|
|
printf("colors= %lu\n", dsp->colors);
|
|
printf("graphicsmode= %lu\n", dsp->graphicsmode);
|
|
printf("numberofbanks= %lu\n", dsp->numberofbanks);
|
|
#ifdef DOS
|
|
printf("BytesPerLine= %d\n", dsp->BytesPerLine);
|
|
printf("DisplayStartAddr= %d\n", dsp->DisplayStartAddr);
|
|
#endif /* DOS */
|
|
printf("bitblt_to_screen= %p\n", (void *)dsp->bitblt_to_screen);
|
|
printf("cleardisplay= %p\n", (void *)dsp->cleardisplay);
|
|
#ifdef DOS
|
|
printf("mouse_visible= %d\n", dsp->mouse_visible);
|
|
printf("mouse_invisible= %d\n", dsp->mouse_invisible);
|
|
printf("\n");
|
|
#endif /* DOS */
|
|
fflush(stdout);
|
|
}
|