aboutsummaryrefslogtreecommitdiff
path: root/board/MAI/bios_emulator/scitech/src/common/galib.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/MAI/bios_emulator/scitech/src/common/galib.c')
-rw-r--r--board/MAI/bios_emulator/scitech/src/common/galib.c269
1 files changed, 269 insertions, 0 deletions
diff --git a/board/MAI/bios_emulator/scitech/src/common/galib.c b/board/MAI/bios_emulator/scitech/src/common/galib.c
new file mode 100644
index 000000000..7c1fbe312
--- /dev/null
+++ b/board/MAI/bios_emulator/scitech/src/common/galib.c
@@ -0,0 +1,269 @@
+/****************************************************************************
+*
+* SciTech Nucleus Graphics Architecture
+*
+* Copyright (C) 1991-1998 SciTech Software, Inc.
+* All rights reserved.
+*
+* ======================================================================
+* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW|
+* | |
+* |This copyrighted computer code contains proprietary technology |
+* |owned by SciTech Software, Inc., located at 505 Wall Street, |
+* |Chico, CA 95928 USA (http://www.scitechsoft.com). |
+* | |
+* |The contents of this file are subject to the SciTech Nucleus |
+* |License; you may *not* use this file or related software except in |
+* |compliance with the License. You may obtain a copy of the License |
+* |at http://www.scitechsoft.com/nucleus-license.txt |
+* | |
+* |Software distributed under the License is distributed on an |
+* |"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
+* |implied. See the License for the specific language governing |
+* |rights and limitations under the License. |
+* | |
+* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW|
+* ======================================================================
+*
+* Language: ANSI C
+* Environment: Any 32-bit protected mode environment
+*
+* Description: C module for the Graphics Accelerator Driver API. Uses
+* the SciTech PM library for interfacing with DOS
+* extender specific functions.
+*
+****************************************************************************/
+
+#include "nucleus/graphics.h"
+#if defined(__WIN32_VXD__) || defined(__NT_DRIVER__)
+#include "sdd/sddhelp.h"
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#endif
+
+/*---------------------------- Global Variables ---------------------------*/
+
+#ifndef TEST_HARNESS
+GA_exports _VARAPI __GA_exports;
+static int loaded = false;
+static PE_MODULE *hModBPD = NULL;
+
+static N_imports _N_imports = {
+ sizeof(N_imports),
+ _OS_delay,
+ };
+
+static GA_imports _GA_imports = {
+ sizeof(GA_imports),
+ GA_getSharedInfo,
+ GA_TimerInit,
+ GA_TimerRead,
+ GA_TimerDifference,
+ };
+#endif
+
+/*----------------------------- Implementation ----------------------------*/
+
+#define DLL_NAME "graphics.bpd"
+
+/****************************************************************************
+REMARKS:
+This function is no longer used but we must implement it and return NULL
+for compatibility with older binary drivers.
+****************************************************************************/
+GA_sharedInfo * NAPI GA_getSharedInfo(
+ int device)
+{
+ return NULL;
+}
+
+#ifndef TEST_HARNESS
+/****************************************************************************
+REMARKS:
+Fatal error handler for non-exported GA_exports.
+****************************************************************************/
+static void _GA_fatalErrorHandler(void)
+{
+ PM_fatalError("Unsupported Nucleus export function called! Please upgrade your copy of Nucleus!\n");
+}
+
+/****************************************************************************
+PARAMETERS:
+shared - True to load the driver into shared memory.
+
+REMARKS:
+Loads the Nucleus binary portable DLL into memory and initilises it.
+****************************************************************************/
+static ibool LoadDriver(
+ ibool shared)
+{
+ GA_initLibrary_t GA_initLibrary;
+ GA_exports *gaExp;
+ char filename[PM_MAX_PATH];
+ char bpdpath[PM_MAX_PATH];
+ int i,max;
+ ulong *p;
+
+ /* Check if we have already loaded the driver */
+ if (loaded)
+ return true;
+ PM_init();
+
+ /* First try to see if we can find the system wide shared exports
+ * if they are available. Under OS/2 this connects to our global
+ * shared Nucleus loader in SDDPMI.DLL.
+ */
+ __GA_exports.dwSize = sizeof(__GA_exports);
+ if (GA_getSharedExports(&__GA_exports,shared))
+ return loaded = true;
+
+ /* Open the BPD file */
+ if (!PM_findBPD(DLL_NAME,bpdpath))
+ return false;
+ strcpy(filename,bpdpath);
+ strcat(filename,DLL_NAME);
+ if ((hModBPD = PE_loadLibrary(filename,shared)) == NULL)
+ return false;
+ if ((GA_initLibrary = (GA_initLibrary_t)PE_getProcAddress(hModBPD,"_GA_initLibrary")) == NULL)
+ return false;
+ bpdpath[strlen(bpdpath)-1] = 0;
+ if (strcmp(bpdpath,PM_getNucleusPath()) == 0)
+ strcpy(bpdpath,PM_getNucleusConfigPath());
+ else {
+ PM_backslash(bpdpath);
+ strcat(bpdpath,"config");
+ }
+ if ((gaExp = GA_initLibrary(shared,bpdpath,filename,GA_getSystemPMImports(),&_N_imports,&_GA_imports)) == NULL)
+ PM_fatalError("GA_initLibrary failed!\n");
+
+ /* Initialize all default imports to point to fatal error handler
+ * for upwards compatibility, and copy the exported functions.
+ */
+ max = sizeof(__GA_exports)/sizeof(GA_initLibrary_t);
+ for (i = 0,p = (ulong*)&__GA_exports; i < max; i++)
+ *p++ = (ulong)_GA_fatalErrorHandler;
+ memcpy(&__GA_exports,gaExp,MIN(sizeof(__GA_exports),gaExp->dwSize));
+ loaded = true;
+ return true;
+}
+
+/* The following are stub entry points that the application calls to
+ * initialise the Nucleus loader library, and we use this to load our
+ * driver DLL from disk and initialise the library using it.
+ */
+
+/* {secret} */
+int NAPI GA_status(void)
+{
+ if (!loaded)
+ return nDriverNotFound;
+ return __GA_exports.GA_status();
+}
+
+/* {secret} */
+const char * NAPI GA_errorMsg(
+ N_int32 status)
+{
+ if (!loaded)
+ return "Unable to load Nucleus device driver!";
+ return __GA_exports.GA_errorMsg(status);
+}
+
+/* {secret} */
+int NAPI GA_getDaysLeft(N_int32 shared)
+{
+ if (!LoadDriver(shared))
+ return -1;
+ return __GA_exports.GA_getDaysLeft(shared);
+}
+
+/* {secret} */
+int NAPI GA_registerLicense(uchar *license,N_int32 shared)
+{
+ if (!LoadDriver(shared))
+ return 0;
+ return __GA_exports.GA_registerLicense(license,shared);
+}
+
+/* {secret} */
+ibool NAPI GA_loadInGUI(N_int32 shared)
+{
+ if (!LoadDriver(shared))
+ return false;
+ return __GA_exports.GA_loadInGUI(shared);
+}
+
+/* {secret} */
+int NAPI GA_enumerateDevices(N_int32 shared)
+{
+ if (!LoadDriver(shared))
+ return 0;
+ return __GA_exports.GA_enumerateDevices(shared);
+}
+
+/* {secret} */
+GA_devCtx * NAPI GA_loadDriver(N_int32 deviceIndex,N_int32 shared)
+{
+ if (!LoadDriver(shared))
+ return NULL;
+ return __GA_exports.GA_loadDriver(deviceIndex,shared);
+}
+
+/* {secret} */
+void NAPI GA_getGlobalOptions(
+ GA_globalOptions *options,
+ ibool shared)
+{
+ if (LoadDriver(shared))
+ __GA_exports.GA_getGlobalOptions(options,shared);
+}
+
+/* {secret} */
+PE_MODULE * NAPI GA_loadLibrary(
+ const char *szBPDName,
+ ulong *size,
+ ibool shared)
+{
+ if (!LoadDriver(shared))
+ return NULL;
+ return __GA_exports.GA_loadLibrary(szBPDName,size,shared);
+}
+
+/* {secret} */
+GA_devCtx * NAPI GA_getCurrentDriver(
+ N_int32 deviceIndex)
+{
+ /* Bail for older drivers that didn't export this function! */
+ if (!__GA_exports.GA_getCurrentDriver)
+ return NULL;
+ return __GA_exports.GA_getCurrentDriver(deviceIndex);
+}
+
+/* {secret} */
+REF2D_driver * NAPI GA_getCurrentRef2d(
+ N_int32 deviceIndex)
+{
+ /* Bail for older drivers that didn't export this function! */
+ if (!__GA_exports.GA_getCurrentRef2d)
+ return NULL;
+ return __GA_exports.GA_getCurrentRef2d(deviceIndex);
+}
+
+/* {secret} */
+int NAPI GA_isOEMVersion(ibool shared)
+{
+ if (!LoadDriver(shared))
+ return 0;
+ return __GA_exports.GA_isOEMVersion(shared);
+}
+
+/* {secret} */
+N_uint32 * NAPI GA_getLicensedDevices(ibool shared)
+{
+ if (!LoadDriver(shared))
+ return 0;
+ return __GA_exports.GA_getLicensedDevices(shared);
+}
+#endif
+