123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /****************************************************************************
- *
- * 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
|