diff options
Diffstat (limited to 'board/MAI/bios_emulator/scitech/src/common/galib.c')
| -rw-r--r-- | board/MAI/bios_emulator/scitech/src/common/galib.c | 269 | 
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 + |