123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /****************************************************************************
- *
- * 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: OS/2 32-bit
- *
- * Description: OS specific Nucleus Graphics Architecture services for
- * the OS/2 operating system environments.
- *
- ****************************************************************************/
- #include "pm_help.h"
- #define INCL_DOSERRORS
- #define INCL_DOS
- #define INCL_SUB
- #define INCL_VIO
- #define INCL_KBD
- #include <os2.h>
- /*---------------------------- Global Variables ---------------------------*/
- static HFILE hSDDHelp;
- static ulong outLen; /* Must not cross 64Kb boundary! */
- static ulong result; /* Must not cross 64Kb boundary! */
- static ibool haveRDTSC;
- /*-------------------------- Implementation -------------------------------*/
- /****************************************************************************
- REMARKS:
- This function returns a pointer to the common graphics driver loaded in the
- helper VxD. The memory for the VxD is shared between all processes via
- the VxD, so that the VxD, 16-bit code and 32-bit code all see the same
- state when accessing the graphics binary portable driver.
- ****************************************************************************/
- GA_sharedInfo * NAPI GA_getSharedInfo(
- int device)
- {
- /* Initialise the PM library and connect to our runtime DLL's */
- PM_init();
- /* Open our helper device driver */
- if (DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,
- FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,
- NULL))
- PM_fatalError("Unable to open SDDHELP$ helper device driver!");
- outLen = sizeof(result);
- DosDevIOCtl(hSDDHelp,PMHELP_IOCTL,PMHELP_GETSHAREDINFO,
- NULL, 0, NULL,
- &result, outLen, &outLen);
- DosClose(hSDDHelp);
- if (result) {
- /* We have found the shared Nucleus packet. Because not all processes
- * map to SDDPMI.DLL, we need to ensure that we connect to this
- * DLL so that it gets mapped into our address space (that is
- * where the shared Nucleus packet is located). Simply doing a
- * DosLoadModule on it is enough for this.
- */
- HMODULE hModSDDPMI;
- char buf[80];
- DosLoadModule((PSZ)buf,sizeof(buf),(PSZ)"SDDPMI.DLL",&hModSDDPMI);
- }
- return (GA_sharedInfo*)result;
- }
- /****************************************************************************
- REMARKS:
- Nothing special for this OS.
- ****************************************************************************/
- ibool NAPI GA_getSharedExports(
- GA_exports *gaExp)
- {
- (void)gaExp;
- return false;
- }
- /****************************************************************************
- REMARKS:
- This function initialises the high precision timing functions for the
- Nucleus loader library.
- ****************************************************************************/
- ibool NAPI GA_TimerInit(void)
- {
- if (_GA_haveCPUID() && (_GA_getCPUIDFeatures() & CPU_HaveRDTSC) != 0)
- haveRDTSC = true;
- return true;
- }
- /****************************************************************************
- REMARKS:
- This function reads the high resolution timer.
- ****************************************************************************/
- void NAPI GA_TimerRead(
- GA_largeInteger *value)
- {
- if (haveRDTSC)
- _GA_readTimeStamp(value);
- else
- DosTmrQueryTime((QWORD*)value);
- }
|