summaryrefslogtreecommitdiffstats
path: root/board/MAI/bios_emulator/scitech/src/pm/os2
diff options
context:
space:
mode:
Diffstat (limited to 'board/MAI/bios_emulator/scitech/src/pm/os2')
-rw-r--r--board/MAI/bios_emulator/scitech/src/pm/os2/event.c495
-rw-r--r--board/MAI/bios_emulator/scitech/src/pm/os2/mon.h144
-rw-r--r--board/MAI/bios_emulator/scitech/src/pm/os2/oshdr.h1
-rw-r--r--board/MAI/bios_emulator/scitech/src/pm/os2/pm.c730
4 files changed, 684 insertions, 686 deletions
diff --git a/board/MAI/bios_emulator/scitech/src/pm/os2/event.c b/board/MAI/bios_emulator/scitech/src/pm/os2/event.c
index 706e84d6f3..91cc19b915 100644
--- a/board/MAI/bios_emulator/scitech/src/pm/os2/event.c
+++ b/board/MAI/bios_emulator/scitech/src/pm/os2/event.c
@@ -87,8 +87,8 @@ Converts a mickey movement value to a pixel adjustment value.
static int MickeyToPixel(
int mickey)
{
- // TODO: We can add some code in here to handle 'acceleration' for
- // the mouse cursor. For now just use the mickeys.
+ /* TODO: We can add some code in here to handle 'acceleration' for */
+ /* the mouse cursor. For now just use the mickeys. */
return mickey;
}
@@ -116,196 +116,196 @@ static void _EVT_pumpMessages(void)
/* Pump all keyboard messages from our circular buffer */
for (;;) {
- /* Check that the monitor thread is still running */
- if (!bMonRunning)
- PM_fatalError("Keyboard monitor thread died!");
-
- /* Protect keypacket buffer with mutex */
- DosRequestMutexSem(hmtxKeyBuf, SEM_INDEFINITE_WAIT);
- if (kpHead == kpTail) {
- DosReleaseMutexSem(hmtxKeyBuf);
- break;
- }
-
- noInput = FALSE;
-
- /* Read packet from circular buffer and remove it */
- memcpy(&kp, &keyMonPkts[kpTail], sizeof(KEYPACKET));
- if (++kpTail == KEYBUFSIZE)
- kpTail = 0;
- DosReleaseMutexSem(hmtxKeyBuf);
-
- /* Compensate for the 0xE0 character */
- if (kp.XlatedScan && kp.XlatedChar == 0xE0)
- kp.XlatedChar = 0;
-
- /* Determine type of keyboard event */
- memset(&evt,0,sizeof(evt));
- if (kp.KbdDDFlagWord & KEY_RELEASE)
- evt.what = EVT_KEYUP;
- else
- evt.what = EVT_KEYDOWN;
-
- /* Convert keyboard codes */
- scan = kp.MonFlagWord >> 8;
- if (evt.what == EVT_KEYUP) {
- /* Get message for keyup code from table of cached down values */
- evt.message = keyUpMsg[scan];
- keyUpMsg[scan] = 0;
- oldKeyMessage = -1;
- }
- else {
- evt.message = ((ulong)scan << 8) | kp.XlatedChar;
- if (evt.message == keyUpMsg[scan]) {
- evt.what = EVT_KEYREPEAT;
- evt.message |= 0x10000;
- }
- oldKeyMessage = evt.message & 0x0FFFF;
- keyUpMsg[scan] = (ushort)evt.message;
- }
-
- /* Convert shift state modifiers */
- if (kp.u.ShiftState & 0x0001)
- evt.modifiers |= EVT_RIGHTSHIFT;
- if (kp.u.ShiftState & 0x0002)
- evt.modifiers |= EVT_LEFTSHIFT;
- if (kp.u.ShiftState & 0x0100)
- evt.modifiers |= EVT_LEFTCTRL;
- if (kp.u.ShiftState & 0x0200)
- evt.modifiers |= EVT_LEFTALT;
- if (kp.u.ShiftState & 0x0400)
- evt.modifiers |= EVT_RIGHTCTRL;
- if (kp.u.ShiftState & 0x0800)
- evt.modifiers |= EVT_RIGHTALT;
- EVT.oldMove = -1;
-
- /* Add time stamp and add the event to the queue */
- evt.when = key.time;
- if (EVT.count < EVENTQSIZE)
- addEvent(&evt);
- }
+ /* Check that the monitor thread is still running */
+ if (!bMonRunning)
+ PM_fatalError("Keyboard monitor thread died!");
+
+ /* Protect keypacket buffer with mutex */
+ DosRequestMutexSem(hmtxKeyBuf, SEM_INDEFINITE_WAIT);
+ if (kpHead == kpTail) {
+ DosReleaseMutexSem(hmtxKeyBuf);
+ break;
+ }
+
+ noInput = FALSE;
+
+ /* Read packet from circular buffer and remove it */
+ memcpy(&kp, &keyMonPkts[kpTail], sizeof(KEYPACKET));
+ if (++kpTail == KEYBUFSIZE)
+ kpTail = 0;
+ DosReleaseMutexSem(hmtxKeyBuf);
+
+ /* Compensate for the 0xE0 character */
+ if (kp.XlatedScan && kp.XlatedChar == 0xE0)
+ kp.XlatedChar = 0;
+
+ /* Determine type of keyboard event */
+ memset(&evt,0,sizeof(evt));
+ if (kp.KbdDDFlagWord & KEY_RELEASE)
+ evt.what = EVT_KEYUP;
+ else
+ evt.what = EVT_KEYDOWN;
+
+ /* Convert keyboard codes */
+ scan = kp.MonFlagWord >> 8;
+ if (evt.what == EVT_KEYUP) {
+ /* Get message for keyup code from table of cached down values */
+ evt.message = keyUpMsg[scan];
+ keyUpMsg[scan] = 0;
+ oldKeyMessage = -1;
+ }
+ else {
+ evt.message = ((ulong)scan << 8) | kp.XlatedChar;
+ if (evt.message == keyUpMsg[scan]) {
+ evt.what = EVT_KEYREPEAT;
+ evt.message |= 0x10000;
+ }
+ oldKeyMessage = evt.message & 0x0FFFF;
+ keyUpMsg[scan] = (ushort)evt.message;
+ }
+
+ /* Convert shift state modifiers */
+ if (kp.u.ShiftState & 0x0001)
+ evt.modifiers |= EVT_RIGHTSHIFT;
+ if (kp.u.ShiftState & 0x0002)
+ evt.modifiers |= EVT_LEFTSHIFT;
+ if (kp.u.ShiftState & 0x0100)
+ evt.modifiers |= EVT_LEFTCTRL;
+ if (kp.u.ShiftState & 0x0200)
+ evt.modifiers |= EVT_LEFTALT;
+ if (kp.u.ShiftState & 0x0400)
+ evt.modifiers |= EVT_RIGHTCTRL;
+ if (kp.u.ShiftState & 0x0800)
+ evt.modifiers |= EVT_RIGHTALT;
+ EVT.oldMove = -1;
+
+ /* Add time stamp and add the event to the queue */
+ evt.when = key.time;
+ if (EVT.count < EVENTQSIZE)
+ addEvent(&evt);
+ }
/* Don't just flush because that terminally confuses the monitor */
do {
- KbdCharIn(&key, IO_NOWAIT, 0);
- } while (key.fbStatus & KBDTRF_FINAL_CHAR_IN);
+ KbdCharIn(&key, IO_NOWAIT, 0);
+ } while (key.fbStatus & KBDTRF_FINAL_CHAR_IN);
/* Pump all mouse messages */
KbdGetStatus(&keyInfo,0);
/* Check return code - mouse may not be operational!! */
if (MouGetNumQueEl(&mqueue,_EVT_hMouse) == NO_ERROR) {
- while (mqueue.cEvents) {
- while (mqueue.cEvents--) {
- memset(&evt,0,sizeof(evt));
- mWait = MOU_NOWAIT;
- MouReadEventQue(&mouse,&mWait,_EVT_hMouse);
-
- /* Update the mouse position. We get the mouse coordinates
- * in mickeys so we have to translate these into pixels and
- * move our mouse position. If we don't do this, OS/2 gives
- * us the coordinates in character positions since it still
- * thinks we are in text mode!
- */
- EVT.mx += MickeyToPixel(mouse.col);
- EVT.my += MickeyToPixel(mouse.row);
- if (EVT.mx < 0) EVT.mx = 0;
- if (EVT.my < 0) EVT.my = 0;
- if (EVT.mx > rangeX) EVT.mx = rangeX;
- if (EVT.my > rangeY) EVT.my = rangeY;
- evt.where_x = EVT.mx;
- evt.where_y = EVT.my;
- evt.relative_x = mouse.col;
- evt.relative_y = mouse.row;
- evt.when = key.time;
- if (mouse.fs & (MOUSE_BN1_DOWN | MOUSE_MOTION_WITH_BN1_DOWN))
- evt.modifiers |= EVT_LEFTBUT;
- if (mouse.fs & (MOUSE_BN2_DOWN | MOUSE_MOTION_WITH_BN2_DOWN))
- evt.modifiers |= EVT_RIGHTBUT;
- if (mouse.fs & (MOUSE_BN3_DOWN | MOUSE_MOTION_WITH_BN3_DOWN))
- evt.modifiers |= EVT_MIDDLEBUT;
- if (keyInfo.fsState & 0x0001)
- evt.modifiers |= EVT_RIGHTSHIFT;
- if (keyInfo.fsState & 0x0002)
- evt.modifiers |= EVT_LEFTSHIFT;
- if (keyInfo.fsState & 0x0100)
- evt.modifiers |= EVT_LEFTCTRL;
- if (keyInfo.fsState & 0x0200)
- evt.modifiers |= EVT_LEFTALT;
- if (keyInfo.fsState & 0x0400)
- evt.modifiers |= EVT_RIGHTCTRL;
- if (keyInfo.fsState & 0x0800)
- evt.modifiers |= EVT_RIGHTALT;
-
- /* Check for left mouse click events */
- /* 0x06 == (MOUSE_BN1_DOWN | MOUSE_MOTION_WITH_BN1_DOWN) */
- if (((mouse.fs & 0x0006) && !(oldMouseState & 0x0006))
- || (!(mouse.fs & 0x0006) && (oldMouseState & 0x0006))) {
- if (mouse.fs & 0x0006)
- evt.what = EVT_MOUSEDOWN;
- else
- evt.what = EVT_MOUSEUP;
- evt.message = EVT_LEFTBMASK;
- EVT.oldMove = -1;
- if (EVT.count < EVENTQSIZE)
- addEvent(&evt);
- }
-
- /* Check for right mouse click events */
- /* 0x0018 == (MOUSE_BN2_DOWN | MOUSE_MOTION_WITH_BN2_DOWN) */
- if (((mouse.fs & 0x0018) && !(oldMouseState & 0x0018))
- || (!(mouse.fs & 0x0018) && (oldMouseState & 0x0018))) {
- if (mouse.fs & 0x0018)
- evt.what = EVT_MOUSEDOWN;
- else
- evt.what = EVT_MOUSEUP;
- evt.message = EVT_RIGHTBMASK;
- EVT.oldMove = -1;
- if (EVT.count < EVENTQSIZE)
- addEvent(&evt);
- }
-
- /* Check for middle mouse click events */
- /* 0x0060 == (MOUSE_BN3_DOWN | MOUSE_MOTION_WITH_BN3_DOWN) */
- if (((mouse.fs & 0x0060) && !(oldMouseState & 0x0060))
- || (!(mouse.fs & 0x0060) && (oldMouseState & 0x0060))) {
- if (mouse.fs & 0x0060)
- evt.what = EVT_MOUSEDOWN;
- else
- evt.what = EVT_MOUSEUP;
- evt.message = EVT_MIDDLEBMASK;
- EVT.oldMove = -1;
- if (EVT.count < EVENTQSIZE)
- addEvent(&evt);
- }
-
- /* Check for mouse movement event */
- if (mouse.fs & 0x002B) {
- evt.what = EVT_MOUSEMOVE;
- if (EVT.oldMove != -1) {
- EVT.evtq[EVT.oldMove].where_x = evt.where_x;/* Modify existing one */
- EVT.evtq[EVT.oldMove].where_y = evt.where_y;
- }
- else {
- EVT.oldMove = EVT.freeHead; /* Save id of this move event */
- if (EVT.count < EVENTQSIZE)
- addEvent(&evt);
- }
- }
-
- /* Save current mouse state */
- oldMouseState = mouse.fs;
- }
- MouGetNumQueEl(&mqueue,_EVT_hMouse);
- }
- noInput = FALSE;
- }
+ while (mqueue.cEvents) {
+ while (mqueue.cEvents--) {
+ memset(&evt,0,sizeof(evt));
+ mWait = MOU_NOWAIT;
+ MouReadEventQue(&mouse,&mWait,_EVT_hMouse);
+
+ /* Update the mouse position. We get the mouse coordinates
+ * in mickeys so we have to translate these into pixels and
+ * move our mouse position. If we don't do this, OS/2 gives
+ * us the coordinates in character positions since it still
+ * thinks we are in text mode!
+ */
+ EVT.mx += MickeyToPixel(mouse.col);
+ EVT.my += MickeyToPixel(mouse.row);
+ if (EVT.mx < 0) EVT.mx = 0;
+ if (EVT.my < 0) EVT.my = 0;
+ if (EVT.mx > rangeX) EVT.mx = rangeX;
+ if (EVT.my > rangeY) EVT.my = rangeY;
+ evt.where_x = EVT.mx;
+ evt.where_y = EVT.my;
+ evt.relative_x = mouse.col;
+ evt.relative_y = mouse.row;
+ evt.when = key.time;
+ if (mouse.fs & (MOUSE_BN1_DOWN | MOUSE_MOTION_WITH_BN1_DOWN))
+ evt.modifiers |= EVT_LEFTBUT;
+ if (mouse.fs & (MOUSE_BN2_DOWN | MOUSE_MOTION_WITH_BN2_DOWN))
+ evt.modifiers |= EVT_RIGHTBUT;
+ if (mouse.fs & (MOUSE_BN3_DOWN | MOUSE_MOTION_WITH_BN3_DOWN))
+ evt.modifiers |= EVT_MIDDLEBUT;
+ if (keyInfo.fsState & 0x0001)
+ evt.modifiers |= EVT_RIGHTSHIFT;
+ if (keyInfo.fsState & 0x0002)
+ evt.modifiers |= EVT_LEFTSHIFT;
+ if (keyInfo.fsState & 0x0100)
+ evt.modifiers |= EVT_LEFTCTRL;
+ if (keyInfo.fsState & 0x0200)
+ evt.modifiers |= EVT_LEFTALT;
+ if (keyInfo.fsState & 0x0400)
+ evt.modifiers |= EVT_RIGHTCTRL;
+ if (keyInfo.fsState & 0x0800)
+ evt.modifiers |= EVT_RIGHTALT;
+
+ /* Check for left mouse click events */
+ /* 0x06 == (MOUSE_BN1_DOWN | MOUSE_MOTION_WITH_BN1_DOWN) */
+ if (((mouse.fs & 0x0006) && !(oldMouseState & 0x0006))
+ || (!(mouse.fs & 0x0006) && (oldMouseState & 0x0006))) {
+ if (mouse.fs & 0x0006)
+ evt.what = EVT_MOUSEDOWN;
+ else
+ evt.what = EVT_MOUSEUP;
+ evt.message = EVT_LEFTBMASK;
+ EVT.oldMove = -1;
+ if (EVT.count < EVENTQSIZE)
+ addEvent(&evt);
+ }
+
+ /* Check for right mouse click events */
+ /* 0x0018 == (MOUSE_BN2_DOWN | MOUSE_MOTION_WITH_BN2_DOWN) */
+ if (((mouse.fs & 0x0018) && !(oldMouseState & 0x0018))
+ || (!(mouse.fs & 0x0018) && (oldMouseState & 0x0018))) {
+ if (mouse.fs & 0x0018)
+ evt.what = EVT_MOUSEDOWN;
+ else
+ evt.what = EVT_MOUSEUP;
+ evt.message = EVT_RIGHTBMASK;
+ EVT.oldMove = -1;
+ if (EVT.count < EVENTQSIZE)
+ addEvent(&evt);
+ }
+
+ /* Check for middle mouse click events */
+ /* 0x0060 == (MOUSE_BN3_DOWN | MOUSE_MOTION_WITH_BN3_DOWN) */
+ if (((mouse.fs & 0x0060) && !(oldMouseState & 0x0060))
+ || (!(mouse.fs & 0x0060) && (oldMouseState & 0x0060))) {
+ if (mouse.fs & 0x0060)
+ evt.what = EVT_MOUSEDOWN;
+ else
+ evt.what = EVT_MOUSEUP;
+ evt.message = EVT_MIDDLEBMASK;
+ EVT.oldMove = -1;
+ if (EVT.count < EVENTQSIZE)
+ addEvent(&evt);
+ }
+
+ /* Check for mouse movement event */
+ if (mouse.fs & 0x002B) {
+ evt.what = EVT_MOUSEMOVE;
+ if (EVT.oldMove != -1) {
+ EVT.evtq[EVT.oldMove].where_x = evt.where_x;/* Modify existing one */
+ EVT.evtq[EVT.oldMove].where_y = evt.where_y;
+ }
+ else {
+ EVT.oldMove = EVT.freeHead; /* Save id of this move event */
+ if (EVT.count < EVENTQSIZE)
+ addEvent(&evt);
+ }
+ }
+
+ /* Save current mouse state */
+ oldMouseState = mouse.fs;
+ }
+ MouGetNumQueEl(&mqueue,_EVT_hMouse);
+ }
+ noInput = FALSE;
+ }
/* If there was no input available, give up the current timeslice
* Note: DosSleep(0) will effectively do nothing if no other thread is ready. Hence
* DosSleep(0) will still use 100% CPU _but_ should not interfere with other programs.
*/
if (noInput)
- DosSleep(0);
+ DosSleep(0);
}
/****************************************************************************
@@ -341,78 +341,78 @@ static void _kbdMonThread(
/* Register the buffers to be used for monitoring for current session */
if (DosMonReg(_EVT_hKbdMon, &monInbuf, (ULONG*)&monOutbuf,MONITOR_END, -1)) {
- DosPostEventSem(hevStart); /* unblock the main thread */
- return;
- }
+ DosPostEventSem(hevStart); /* unblock the main thread */
+ return;
+ }
/* Unblock the main thread and tell it we're OK*/
bMonRunning = TRUE;
DosPostEventSem(hevStart);
while (bMonRunning) { /* Start an endless loop */
- /* Read data from keyboard driver */
- rc = DosMonRead((PBYTE)&monInbuf, IO_WAIT, (PBYTE)&kp, (PUSHORT)&count);
- if (rc) {
+ /* Read data from keyboard driver */
+ rc = DosMonRead((PBYTE)&monInbuf, IO_WAIT, (PBYTE)&kp, (PUSHORT)&count);
+ if (rc) {
#ifdef CHECKED
- if (bMonRunning)
- printf("Error in DosMonRead, rc = %ld\n", rc);
+ if (bMonRunning)
+ printf("Error in DosMonRead, rc = %ld\n", rc);
#endif
- bMonRunning = FALSE;
- return;
- }
+ bMonRunning = FALSE;
+ return;
+ }
- /* Pass FLUSH packets immediately */
- if (kp.MonFlagWord & 4) {
+ /* Pass FLUSH packets immediately */
+ if (kp.MonFlagWord & 4) {
#ifdef CHECKED
- printf("Flush packet!\n");
+ printf("Flush packet!\n");
#endif
- DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
- continue;
- }
-
- //TODO: to be removed
- /* Skip extended scancodes & some others */
- if (((kp.MonFlagWord >> 8) == 0xE0) || ((kp.KbdDDFlagWord & 0x0F) == 0x0F)) {
- DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
- continue;
- }
-
-// printf("RawScan = %X, XlatedScan = %X, fbStatus = %X, KbdDDFlags = %X\n",
-// kp.MonFlagWord >> 8, kp.XlatedScan, kp.u.ShiftState, kp.KbdDDFlagWord);
-
- /* Protect access to buffer with mutex semaphore */
- rc = DosRequestMutexSem(hmtxKeyBuf, 1000);
- if (rc) {
+ DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
+ continue;
+ }
+
+ /*TODO: to be removed */
+ /* Skip extended scancodes & some others */
+ if (((kp.MonFlagWord >> 8) == 0xE0) || ((kp.KbdDDFlagWord & 0x0F) == 0x0F)) {
+ DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
+ continue;
+ }
+
+/* printf("RawScan = %X, XlatedScan = %X, fbStatus = %X, KbdDDFlags = %X\n", */
+/* kp.MonFlagWord >> 8, kp.XlatedScan, kp.u.ShiftState, kp.KbdDDFlagWord); */
+
+ /* Protect access to buffer with mutex semaphore */
+ rc = DosRequestMutexSem(hmtxKeyBuf, 1000);
+ if (rc) {
#ifdef CHECKED
- printf("Can't get access to mutex, rc = %ld\n", rc);
+ printf("Can't get access to mutex, rc = %ld\n", rc);
#endif
- bMonRunning = FALSE;
- return;
- }
-
- /* Store packet in circular buffer, drop it if it's full */
- kpNew = kpHead + 1;
- if (kpNew == KEYBUFSIZE)
- kpNew = 0;
- if (kpNew != kpTail) {
- memcpy(&keyMonPkts[kpHead], &kp, sizeof(KEYPACKET));
- // TODO: fix this!
- /* Convert break to make code */
- keyMonPkts[kpHead].MonFlagWord &= 0x7FFF;
- kpHead = kpNew;
- }
- DosReleaseMutexSem(hmtxKeyBuf);
-
- /* Finally write the packet */
- rc = DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
- if (rc) {
+ bMonRunning = FALSE;
+ return;
+ }
+
+ /* Store packet in circular buffer, drop it if it's full */
+ kpNew = kpHead + 1;
+ if (kpNew == KEYBUFSIZE)
+ kpNew = 0;
+ if (kpNew != kpTail) {
+ memcpy(&keyMonPkts[kpHead], &kp, sizeof(KEYPACKET));
+ /* TODO: fix this! */
+ /* Convert break to make code */
+ keyMonPkts[kpHead].MonFlagWord &= 0x7FFF;
+ kpHead = kpNew;
+ }
+ DosReleaseMutexSem(hmtxKeyBuf);
+
+ /* Finally write the packet */
+ rc = DosMonWrite((PBYTE)&monOutbuf, (PBYTE)&kp, count);
+ if (rc) {
#ifdef CHECKED
- if (bMonRunning)
- printf("Error in DosMonWrite, rc = %ld\n", rc);
+ if (bMonRunning)
+ printf("Error in DosMonWrite, rc = %ld\n", rc);
#endif
- bMonRunning = FALSE;
- return;
- }
- }
+ bMonRunning = FALSE;
+ return;
+ }
+ }
(void)params;
}
@@ -461,15 +461,15 @@ void EVTAPI EVT_init(
/* Open the keyboard monitor */
if (DosMonOpen((PSZ)"KBD$", &_EVT_hKbdMon))
- PM_fatalError("Unable to open keyboard monitor!");
+ PM_fatalError("Unable to open keyboard monitor!");
/* Create event semaphore, the monitor will post it when it's initalized */
if (DosCreateEventSem(NULL, &hevStart, 0, FALSE))
- PM_fatalError("Unable to create event semaphore!");
+ PM_fatalError("Unable to create event semaphore!");
/* Create mutex semaphore protecting the keypacket buffer */
if (DosCreateMutexSem(NULL, &hmtxKeyBuf, 0, FALSE))
- PM_fatalError("Unable to create mutex semaphore!");
+ PM_fatalError("Unable to create mutex semaphore!");
/* Start keyboard monitor thread, use 32K stack */
kbdMonTID = _beginthread(_kbdMonThread, NULL, 0x8000, NULL);
@@ -478,9 +478,9 @@ void EVTAPI EVT_init(
/* Give the thread one second */
DosWaitEventSem(hevStart, 1000);
if (!bMonRunning) { /* Check the thread is OK */
- DosMonClose(_EVT_hKbdMon);
- PM_fatalError("Keyboard monitor thread didn't initialize!");
- }
+ DosMonClose(_EVT_hKbdMon);
+ PM_fatalError("Keyboard monitor thread didn't initialize!");
+ }
/* Catch program termination signals so we can clean up properly */
signal(SIGABRT, _EVT_abort);
@@ -517,7 +517,7 @@ and this function can be used to resume it again later.
****************************************************************************/
void EVT_resume(void)
{
- // Do nothing for OS/2
+ /* Do nothing for OS/2 */
}
/****************************************************************************
@@ -527,7 +527,7 @@ de-install the event handling code.
****************************************************************************/
void EVT_suspend(void)
{
- // Do nothing for OS/2
+ /* Do nothing for OS/2 */
}
/****************************************************************************
@@ -551,16 +551,15 @@ void EVT_exit(void)
rc = DosKillThread(kbdMonTID);
#ifdef CHECKED
if (rc)
- printf("DosKillThread failed, rc = %ld\n", rc);
+ printf("DosKillThread failed, rc = %ld\n", rc);
#endif
rc = DosMonClose(_EVT_hKbdMon);
#ifdef CHECKED
if (rc) {
- printf("DosMonClose failed, rc = %ld\n", rc);
- }
+ printf("DosMonClose failed, rc = %ld\n", rc);
+ }
#endif
DosCloseEventSem(hevStart);
DosCloseMutexSem(hmtxKeyBuf);
KbdFlushBuffer(0);
}
-
diff --git a/board/MAI/bios_emulator/scitech/src/pm/os2/mon.h b/board/MAI/bios_emulator/scitech/src/pm/os2/mon.h
index 52f12f0d2d..28d39fba4b 100644
--- a/board/MAI/bios_emulator/scitech/src/pm/os2/mon.h
+++ b/board/MAI/bios_emulator/scitech/src/pm/os2/mon.h
@@ -63,55 +63,55 @@ typedef struct _MLNPACKET {
USHORT KbdDDFlagWord;
} MLNPACKET;
-// DBCSStatus
-
-#define SF_SHIFTS 1 // If set to 1, shift status returned without a character
-#define SF_NOTCHAR 2 // 0 - Scan code is a character
- // 1 - Scan code is not a character;
- // instead it is an extended key code from the keyboard.
-#define SF_IMMEDIATE 32 // If set to 1, immediate conversion requested
-#define SF_TYPEMASK 192 // Has the following values:
- // 00 - Undefined
- // 01 - Final character; interim character flag is turned off
- // 10 - Interim character
- // 11 - Final character; interim character flag is turned on.
-// MonFlagWord
-
-#define MF_OPEN 1 // open
-#define MF_CLOSE 2 // close
-#define MF_FLUSH 4 // is flush packet
-
-// KbdDDFlagWord
-
-#define KF_NOTSQPACKET 1024 // Don't put this packet in SQ buffer
-#define KF_ACCENTEDKEY 512 // Key was translated using previous accent.
-#define KF_MULTIMAKE 256 // Key was repeated make of a toggle key.
-#define KF_SECONDARYKEY 128 // Previous scan code was the E0 prefix code.
-#define KF_KEYBREAK 64 // This is the break of the key.
-#define KF_KEYTYPEMASK 63 // Isolates the Key Type field of DDFlags.
-#define KF_UNDEFKEY 63 // Key packet is undefined
-#define KF_SYSREQKEY 23 // This key packet is the SysReq key (4990)
-#define KF_PRINTFLUSHKEY 22 // This packet is Ct-Alt-PrtScr
-#define KF_PSPRINTECHOKEY 21 // This packet is Ctl-P
-#define KF_PRINTECHOKEY 20 // This packet is Ctl-PrtScr
-#define KF_PRTSCRKEY 19 // This packet is PrtScr
-#define KF_PSBREAKKEY 18 // This packet is Ctl-C
-#define KF_BREAKKEY 17 // This packet is Ctl-Break
-#define KF_ACCENTKEY 16 // This packet is an accent key
-#define KF_XRORPNOT 13 // This packet is a Read or Peek Notification Pct.
-#define KF_MLNOTIFICATION 14 // packet is a Multi-Layer NLS packet
-#define KF_HOTKEYPACKET 12 // This packet is the hot key.
-#define KF_BADKEYCOMBO 11 // Accent/char combo undefined, beep only.
-#define KF_WAKEUPKEY 10 // This packet is one following PAUSEKEY
-#define KF_PSPAUSEKEY 9 // This packet is Ctl-S
-#define KF_PAUSEKEY 8 // This packet is Ctl-Numlock or PAUSE
-#define KF_SHIFTMASK 7 // Key is a shift Key
-#define KF_DUMPKEY 6 // This packet is Ctl-Numlock-NumLock
-#define KF_REBOOTKEY 5 // This packet is Ctl-Alt-Del
-#define KF_RESENDCODE 4 // This packet is resend code from controller
-#define KF_OVERRUNCODE 3 // This packet is overrun code from controller
-#define KF_SECPREFIXCODE 2 // This packet is E0/E1 scan code
-#define KF_ACKCODE 1 // This packet is ack code from keyboard
+/* DBCSStatus */
+
+#define SF_SHIFTS 1 /* If set to 1, shift status returned without a character */
+#define SF_NOTCHAR 2 /* 0 - Scan code is a character */
+ /* 1 - Scan code is not a character; */
+ /* instead it is an extended key code from the keyboard. */
+#define SF_IMMEDIATE 32 /* If set to 1, immediate conversion requested */
+#define SF_TYPEMASK 192 /* Has the following values: */
+ /* 00 - Undefined */
+ /* 01 - Final character; interim character flag is turned off */
+ /* 10 - Interim character */
+ /* 11 - Final character; interim character flag is turned on. */
+/* MonFlagWord */
+
+#define MF_OPEN 1 /* open */
+#define MF_CLOSE 2 /* close */
+#define MF_FLUSH 4 /* is flush packet */
+
+/* KbdDDFlagWord */
+
+#define KF_NOTSQPACKET 1024 /* Don't put this packet in SQ buffer */
+#define KF_ACCENTEDKEY 512 /* Key was translated using previous accent. */
+#define KF_MULTIMAKE 256 /* Key was repeated make of a toggle key. */
+#define KF_SECONDARYKEY 128 /* Previous scan code was the E0 prefix code. */
+#define KF_KEYBREAK 64 /* This is the break of the key. */
+#define KF_KEYTYPEMASK 63 /* Isolates the Key Type field of DDFlags. */
+#define KF_UNDEFKEY 63 /* Key packet is undefined */
+#define KF_SYSREQKEY 23 /* This key packet is the SysReq key (4990) */
+#define KF_PRINTFLUSHKEY 22 /* This packet is Ct-Alt-PrtScr */
+#define KF_PSPRINTECHOKEY 21 /* This packet is Ctl-P */
+#define KF_PRINTECHOKEY 20 /* This packet is Ctl-PrtScr */
+#define KF_PRTSCRKEY 19 /* This packet is PrtScr */
+#define KF_PSBREAKKEY 18 /* This packet is Ctl-C */
+#define KF_BREAKKEY 17 /* This packet is Ctl-Break */
+#define KF_ACCENTKEY 16 /* This packet is an accent key */
+#define KF_XRORPNOT 13 /* This packet is a Read or Peek Notification Pct. */
+#define KF_MLNOTIFICATION 14 /* packet is a Multi-Layer NLS packet */
+#define KF_HOTKEYPACKET 12 /* This packet is the hot key. */
+#define KF_BADKEYCOMBO 11 /* Accent/char combo undefined, beep only. */
+#define KF_WAKEUPKEY 10 /* This packet is one following PAUSEKEY */
+#define KF_PSPAUSEKEY 9 /* This packet is Ctl-S */
+#define KF_PAUSEKEY 8 /* This packet is Ctl-Numlock or PAUSE */
+#define KF_SHIFTMASK 7 /* Key is a shift Key */
+#define KF_DUMPKEY 6 /* This packet is Ctl-Numlock-NumLock */
+#define KF_REBOOTKEY 5 /* This packet is Ctl-Alt-Del */
+#define KF_RESENDCODE 4 /* This packet is resend code from controller */
+#define KF_OVERRUNCODE 3 /* This packet is overrun code from controller */
+#define KF_SECPREFIXCODE 2 /* This packet is E0/E1 scan code */
+#define KF_ACKCODE 1 /* This packet is ack code from keyboard */
typedef struct _MONBUF {
@@ -120,29 +120,29 @@ typedef struct _MONBUF {
BYTE Reserved[20];
} MONBUF;
-#define RS_SYSREG 32768 // Bit 15 SysReq key down
-#define RS_CAPSLOCK 16384 // Bit 14 Caps Lock key down
-#define RS_NUMLOCK 8192 // Bit 13 NumLock key down
-#define RS_SCROLLLOCK 4096 // Bit 12 Scroll Lock key down
-#define RS_RALT 2048 // Bit 11 Right Alt key down
-#define RS_RCONTROL 1024 // Bit 10 Right Ctrl key down
-#define RS_LALT 512 // Bit 9 Left Alt key down
-#define RS_LCONTROL 256 // Bit 8 Left Ctrl key down
-#define RS_INSERT 128 // Bit 7 Insert on
-#define RS_CAPS 64 // Bit 6 Caps Lock on
-#define RS_NUM 32 // Bit 5 NumLock on
-#define RS_SCROLL 16 // Bit 4 Scroll Lock on
-#define RS_ALT 8 // Bit 3 Either Alt key down
-#define RS_CONTROL 4 // Bit 2 Either Ctrl key down
-#define RS_LSHIFT 2 // Bit 1 Left Shift key down
-#define RS_RSHIFT 1 // Bit 0 Right Shift key down
-
-
-#define CS_RCONTROL 91 // Right Control
-#define CS_LSHIFT 42 // Left Shift
-#define CS_RSHIFT 54 // Right Shift
-#define CS_LALT 56 // Left Alt
-#define CS_RALT 94 // Right Alt
+#define RS_SYSREG 32768 /* Bit 15 SysReq key down */
+#define RS_CAPSLOCK 16384 /* Bit 14 Caps Lock key down */
+#define RS_NUMLOCK 8192 /* Bit 13 NumLock key down */
+#define RS_SCROLLLOCK 4096 /* Bit 12 Scroll Lock key down */
+#define RS_RALT 2048 /* Bit 11 Right Alt key down */
+#define RS_RCONTROL 1024 /* Bit 10 Right Ctrl key down */
+#define RS_LALT 512 /* Bit 9 Left Alt key down */
+#define RS_LCONTROL 256 /* Bit 8 Left Ctrl key down */
+#define RS_INSERT 128 /* Bit 7 Insert on */
+#define RS_CAPS 64 /* Bit 6 Caps Lock on */
+#define RS_NUM 32 /* Bit 5 NumLock on */
+#define RS_SCROLL 16 /* Bit 4 Scroll Lock on */
+#define RS_ALT 8 /* Bit 3 Either Alt key down */
+#define RS_CONTROL 4 /* Bit 2 Either Ctrl key down */
+#define RS_LSHIFT 2 /* Bit 1 Left Shift key down */
+#define RS_RSHIFT 1 /* Bit 0 Right Shift key down */
+
+
+#define CS_RCONTROL 91 /* Right Control */
+#define CS_LSHIFT 42 /* Left Shift */
+#define CS_RSHIFT 54 /* Right Shift */
+#define CS_LALT 56 /* Left Alt */
+#define CS_RALT 94 /* Right Alt */
/* DosMon* prototypes */
diff --git a/board/MAI/bios_emulator/scitech/src/pm/os2/oshdr.h b/board/MAI/bios_emulator/scitech/src/pm/os2/oshdr.h
index ae1f97a06c..e7aa1c6764 100644
--- a/board/MAI/bios_emulator/scitech/src/pm/os2/oshdr.h
+++ b/board/MAI/bios_emulator/scitech/src/pm/os2/oshdr.h
@@ -39,4 +39,3 @@
#include "os2/mon.h"
void __PM_checkConsoleSwitch(void);
-
diff --git a/board/MAI/bios_emulator/scitech/src/pm/os2/pm.c b/board/MAI/bios_emulator/scitech/src/pm/os2/pm.c
index 5025102806..756eead1dd 100644
--- a/board/MAI/bios_emulator/scitech/src/pm/os2/pm.c
+++ b/board/MAI/bios_emulator/scitech/src/pm/os2/pm.c
@@ -116,16 +116,16 @@ typedef struct _VIDEO_ADAPTER {
/* PMIREQUEST_SOFTWAREINT structures from OS/2 DDK */
typedef struct {
- ULONG ulFlags; // VDM initialization type
-#define VDM_POSTLOAD 0x1 // adapter just loaded, used internally for initialization
-#define VDM_INITIALIZE 0x2 // force initialization of a permanently open VDM, even if previously initialized
-#define VDM_TERMINATE_POSTINITIALIZE 0x6 //start VDM with initialization, but close it afterwards (includes VDM_INITIALIZE)
-#define VDM_QUERY_CAPABILITY 0x10 // query the current int 10 capability
-#define VDM_FULL_VDM_CREATED 0x20 // a full VDM is created
-#define VDM_MINI_VDM_CREATED 0x40 // a mini VDM is created
-#define VDM_MINI_VDM_SUPPORTED 0x80 // mini VDM support is available
- PCHAR szName; // VDM initialization program
- PCHAR szArgs; // VDM initialization arguments
+ ULONG ulFlags; /* VDM initialization type */
+#define VDM_POSTLOAD 0x1 /* adapter just loaded, used internally for initialization */
+#define VDM_INITIALIZE 0x2 /* force initialization of a permanently open VDM, even if previously initialized */
+#define VDM_TERMINATE_POSTINITIALIZE 0x6 /*start VDM with initialization, but close it afterwards (includes VDM_INITIALIZE) */
+#define VDM_QUERY_CAPABILITY 0x10 /* query the current int 10 capability */
+#define VDM_FULL_VDM_CREATED 0x20 /* a full VDM is created */
+#define VDM_MINI_VDM_CREATED 0x40 /* a mini VDM is created */
+#define VDM_MINI_VDM_SUPPORTED 0x80 /* mini VDM support is available */
+ PCHAR szName; /* VDM initialization program */
+ PCHAR szArgs; /* VDM initialization arguments */
}INITVDM;
typedef struct {
@@ -218,7 +218,7 @@ typedef struct _SESWITCHREC {
HEV Event; /* Posted after callback is called */
} SESWITCHREC;
-// Page sized block cache
+/* Page sized block cache */
#define PAGES_PER_BLOCK 32
#define PAGE_BLOCK_SIZE (PAGES_PER_BLOCK * PM_PAGE_SIZE + (PM_PAGE_SIZE-1) + sizeof(pageblock))
@@ -269,29 +269,29 @@ static ulong CallSDDHelp(
ulong result;
if ((rc = DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,
- FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,
- NULL)) != 0) {
- if (rc == 4) { /* Did we run out of file handles? */
- ULONG ulNewFHs;
- LONG lAddFHs = 5;
-
- if (DosSetRelMaxFH(&lAddFHs, &ulNewFHs) != 0)
- PM_fatalError("Failed to raise the file handles limit!");
- else {
- if ((rc = DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,
- FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,
- NULL)) != 0) {
- PM_fatalError("Unable to open SDDHELP$ helper device driver! (#2)");
- }
- }
- }
- else
- PM_fatalError("Unable to open SDDHELP$ helper device driver!");
- }
+ FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,
+ NULL)) != 0) {
+ if (rc == 4) { /* Did we run out of file handles? */
+ ULONG ulNewFHs;
+ LONG lAddFHs = 5;
+
+ if (DosSetRelMaxFH(&lAddFHs, &ulNewFHs) != 0)
+ PM_fatalError("Failed to raise the file handles limit!");
+ else {
+ if ((rc = DosOpen(PMHELP_NAME,&hSDDHelp,&result,0,0,
+ FILE_OPEN, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE,
+ NULL)) != 0) {
+ PM_fatalError("Unable to open SDDHELP$ helper device driver! (#2)");
+ }
+ }
+ }
+ else
+ PM_fatalError("Unable to open SDDHELP$ helper device driver!");
+ }
if (DosDevIOCtl(hSDDHelp,PMHELP_IOCTL,func,
- &parmsIn, inLen = sizeof(parmsIn), &inLen,
- &parmsOut, outLen = sizeof(parmsOut), &outLen) != 0)
- PM_fatalError("Failure calling SDDHELP$ helper device driver!");
+ &parmsIn, inLen = sizeof(parmsIn), &inLen,
+ &parmsOut, outLen = sizeof(parmsOut), &outLen) != 0)
+ PM_fatalError("Failure calling SDDHELP$ helper device driver!");
DosClose(hSDDHelp);
return parmsOut[0];
}
@@ -310,9 +310,9 @@ ibool __IsDBCSSystem(void)
/* Get the DBCS vector - if it's not empty, we're on DBCS */
DosQueryDBCSEnv(sizeof(achDBCSInfo), &ccStruct, achDBCSInfo);
if (achDBCSInfo[0] != 0)
- return true;
+ return true;
else
- return false;
+ return false;
}
/****************************************************************************
@@ -324,9 +324,9 @@ ibool __isShellLoaded(void)
PVOID ptr;
if (DosGetNamedSharedMem(&ptr, (PSZ)"\\SHAREMEM\\PMGLOBAL.MEM", PAG_READ) == NO_ERROR) {
- DosFreeMem(ptr);
- return true;
- }
+ DosFreeMem(ptr);
+ return true;
+ }
return false;
}
@@ -339,19 +339,19 @@ message.
void PMAPI PM_init(void)
{
if (!lowMem) {
- /* Obtain the 32->16 callgate from the device driver to enable IOPL */
- if ((_PM_gdt = CallSDDHelp(PMHELP_GETGDT32)) == 0)
- PM_fatalError("Unable to obtain call gate selector!");
+ /* Obtain the 32->16 callgate from the device driver to enable IOPL */
+ if ((_PM_gdt = CallSDDHelp(PMHELP_GETGDT32)) == 0)
+ PM_fatalError("Unable to obtain call gate selector!");
- PM_setIOPL(3);
+ PM_setIOPL(3);
- /* Map the first Mb of physical memory into lowMem */
- if ((lowMem = PM_mapPhysicalAddr(0,0xFFFFF,true)) == NULL)
- PM_fatalError("Unable to map first Mb physical memory!");
+ /* Map the first Mb of physical memory into lowMem */
+ if ((lowMem = PM_mapPhysicalAddr(0,0xFFFFF,true)) == NULL)
+ PM_fatalError("Unable to map first Mb physical memory!");
- /* Initialise the MTRR interface functions */
- MTRR_init();
- }
+ /* Initialise the MTRR interface functions */
+ MTRR_init();
+ }
}
/****************************************************************************
@@ -367,79 +367,79 @@ static ibool InitInt10(void)
RESULTCODES resCodes;
if (haveInt10 == -1) {
- /* Connect to VIDEOPMI and get entry point. Note that we only
- * do this if GENPMI or SDDPMI are already loaded, since we need
- * a GRADD based driver for this to work.
- */
- PM_init();
- haveInt10 = false;
- if (DosQueryModuleHandle((PSZ)"GENPMI.DLL",&hModGENPMI) != 0)
- hModGENPMI = NULLHANDLE;
- if (DosQueryModuleHandle((PSZ)"SDDPMI.DLL",&hModSDDPMI) != 0)
- hModSDDPMI = NULLHANDLE;
- if (hModGENPMI || hModSDDPMI) {
- if (DosLoadModule((PSZ)buf,sizeof(buf),(PSZ)"VIDEOPMI.DLL",&hModVideoPMI) == 0) {
- if (DosQueryProcAddr(hModVideoPMI,0,(PSZ)"VIDEOPMI32Request",(void*)&PM_VIDEOPMI32Request) != 0)
- PM_fatalError("Unable to get VIDEOPMI32Request entry point!");
- strcpy(path,"X:\\OS2\\SVGADATA.PMI");
- path[0] = PM_getBootDrive();
- if (PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_LOADPMIFILE,path,NULL) != 0) {
- DosFreeModule(hModVideoPMI);
- PM_VIDEOPMI32Request = NULL;
- haveInt10 = false;
- }
- else {
- /* Attempt to initialise the full VDM in the system. This will only
- * work if VPRPMI.SYS is loaded, but it provides support for passing
- * values in ES/DS/ESI/EDI between the BIOS which does not work with
- * kernel VDM's in fixpacks earlier than FP15. FP15 and later and
- * the new Warp 4.51 and Warp Server convenience packs should work
- * fine with the kernel mini-VDM.
- *
- * Also the full VDM is the only solution for really old kernels
- * (but GRADD won't run on them so this is superfluous ;-).
- */
- INITVDM InitVDM = {VDM_INITIALIZE,NULL,NULL};
- PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_SOFTWAREINT,&InitVDM,NULL);
- haveInt10 = true;
- }
- }
- }
- else {
- /* A GRADD driver isn't loaded, hence we can't use VIDEOPMI. But we will try
- * to access the mini-VDM directly, first verifying that the support is
- * available in the kernel (it should be for kernels that support GRADD).
- * This may be needed in a command line boot or if non-GRADD driver is
- * used (Matrox or classic VGA).
- * Note: because of problems with mini-VDM support in the kernel, we have to
- * spawn a daemon process that will do the actual mini-VDM access for us.
- */
- /* Try to open shared semaphore to see if our daemon is already up */
- if (DosOpenEventSem(SHAREDSEM, &hevDaemon) == NO_ERROR) {
- if (DosWaitEventSem(hevDaemon, 1) == NO_ERROR) {
- /* If semaphore is posted, all is well */
- useVPMI = false;
- haveInt10 = true;
- }
- }
- else {
- /* Create shared event semaphore */
- if (DosCreateEventSem(SHAREDSEM, &hevDaemon, DC_SEM_SHARED, FALSE) == NO_ERROR) {
- PM_findBPD(DAEMON_NAME, path);
- strcat(path, DAEMON_NAME);
- if (DosExecPgm(buf, sizeof(buf), EXEC_BACKGROUND, (PSZ)DAEMON_NAME,
- NULL, &resCodes, (PSZ)path) == NO_ERROR) {
- /* The daemon was successfully spawned, now give it a sec to come up */
- if (DosWaitEventSem(hevDaemon, 2000) == NO_ERROR) {
- /* It's up! */
- useVPMI = false;
- haveInt10 = true;
- }
- }
- }
- }
- }
- }
+ /* Connect to VIDEOPMI and get entry point. Note that we only
+ * do this if GENPMI or SDDPMI are already loaded, since we need
+ * a GRADD based driver for this to work.
+ */
+ PM_init();
+ haveInt10 = false;
+ if (DosQueryModuleHandle((PSZ)"GENPMI.DLL",&hModGENPMI) != 0)
+ hModGENPMI = NULLHANDLE;
+ if (DosQueryModuleHandle((PSZ)"SDDPMI.DLL",&hModSDDPMI) != 0)
+ hModSDDPMI = NULLHANDLE;
+ if (hModGENPMI || hModSDDPMI) {
+ if (DosLoadModule((PSZ)buf,sizeof(buf),(PSZ)"VIDEOPMI.DLL",&hModVideoPMI) == 0) {
+ if (DosQueryProcAddr(hModVideoPMI,0,(PSZ)"VIDEOPMI32Request",(void*)&PM_VIDEOPMI32Request) != 0)
+ PM_fatalError("Unable to get VIDEOPMI32Request entry point!");
+ strcpy(path,"X:\\OS2\\SVGADATA.PMI");
+ path[0] = PM_getBootDrive();
+ if (PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_LOADPMIFILE,path,NULL) != 0) {
+ DosFreeModule(hModVideoPMI);
+ PM_VIDEOPMI32Request = NULL;
+ haveInt10 = false;
+ }
+ else {
+ /* Attempt to initialise the full VDM in the system. This will only
+ * work if VPRPMI.SYS is loaded, but it provides support for passing
+ * values in ES/DS/ESI/EDI between the BIOS which does not work with
+ * kernel VDM's in fixpacks earlier than FP15. FP15 and later and
+ * the new Warp 4.51 and Warp Server convenience packs should work
+ * fine with the kernel mini-VDM.
+ *
+ * Also the full VDM is the only solution for really old kernels
+ * (but GRADD won't run on them so this is superfluous ;-).
+ */
+ INITVDM InitVDM = {VDM_INITIALIZE,NULL,NULL};
+ PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_SOFTWAREINT,&InitVDM,NULL);
+ haveInt10 = true;
+ }
+ }
+ }
+ else {
+ /* A GRADD driver isn't loaded, hence we can't use VIDEOPMI. But we will try
+ * to access the mini-VDM directly, first verifying that the support is
+ * available in the kernel (it should be for kernels that support GRADD).
+ * This may be needed in a command line boot or if non-GRADD driver is
+ * used (Matrox or classic VGA).
+ * Note: because of problems with mini-VDM support in the kernel, we have to
+ * spawn a daemon process that will do the actual mini-VDM access for us.
+ */
+ /* Try to open shared semaphore to see if our daemon is already up */
+ if (DosOpenEventSem(SHAREDSEM, &hevDaemon) == NO_ERROR) {
+ if (DosWaitEventSem(hevDaemon, 1) == NO_ERROR) {
+ /* If semaphore is posted, all is well */
+ useVPMI = false;
+ haveInt10 = true;
+ }
+ }
+ else {
+ /* Create shared event semaphore */
+ if (DosCreateEventSem(SHAREDSEM, &hevDaemon, DC_SEM_SHARED, FALSE) == NO_ERROR) {
+ PM_findBPD(DAEMON_NAME, path);
+ strcat(path, DAEMON_NAME);
+ if (DosExecPgm(buf, sizeof(buf), EXEC_BACKGROUND, (PSZ)DAEMON_NAME,
+ NULL, &resCodes, (PSZ)path) == NO_ERROR) {
+ /* The daemon was successfully spawned, now give it a sec to come up */
+ if (DosWaitEventSem(hevDaemon, 2000) == NO_ERROR) {
+ /* It's up! */
+ useVPMI = false;
+ haveInt10 = true;
+ }
+ }
+ }
+ }
+ }
+ }
return haveInt10;
}
@@ -480,9 +480,9 @@ void PMAPI PM_backslash(
{
uint pos = strlen(s);
if (s[pos-1] != '\\') {
- s[pos] = '\\';
- s[pos+1] = '\0';
- }
+ s[pos] = '\\';
+ s[pos+1] = '\0';
+ }
}
/****************************************************************************
@@ -505,9 +505,9 @@ void PMAPI PM_fatalError(
/* Be prepare to be called recursively (failed to fail situation :-) */
static int fatalErrorCount = 0;
if (fatalErrorCount++ == 0) {
- if (fatalErrorCleanup)
- fatalErrorCleanup();
- }
+ if (fatalErrorCleanup)
+ fatalErrorCleanup();
+ }
fprintf(stderr,"%s\n", msg);
exit(1);
}
@@ -522,10 +522,10 @@ void * PMAPI PM_getVESABuf(
uint *roff)
{
if (!VESABuf_ptr) {
- /* Allocate a global buffer for communicating with the VESA VBE */
- if ((VESABuf_ptr = PM_allocRealSeg(VESABuf_len, &VESABuf_rseg, &VESABuf_roff)) == NULL)
- return NULL;
- }
+ /* Allocate a global buffer for communicating with the VESA VBE */
+ if ((VESABuf_ptr = PM_allocRealSeg(VESABuf_len, &VESABuf_rseg, &VESABuf_roff)) == NULL)
+ return NULL;
+ }
*len = VESABuf_len;
*rseg = VESABuf_rseg;
*roff = VESABuf_roff;
@@ -632,11 +632,11 @@ void __PM_checkConsoleSwitch(void)
/* Quick optimized path for most common case */
if (SesSwitchRec.Flags == -1)
- return;
+ return;
again:
if (DosRequestMutexSem(SesSwitchRec.Mutex, 100))
- return;
+ return;
Flags = SesSwitchRec.Flags;
Callback = SesSwitchRec.Callback;
SesSwitchRec.Flags = -1;
@@ -647,15 +647,15 @@ again:
isSessionSwitching = false;
DosPostEventSem(SesSwitchRec.Event);
if (Flags == PM_DEACTIVATE && Mode == PM_SUSPEND_APP)
- /* Suspend application until we switch back to our application */
- for (;;) {
- DosSleep (500);
- /* SesSwitchRec.Flags is volatile so optimizer
- * won't load it into a register
- */
- if (SesSwitchRec.Flags != -1)
- goto again;
- }
+ /* Suspend application until we switch back to our application */
+ for (;;) {
+ DosSleep (500);
+ /* SesSwitchRec.Flags is volatile so optimizer
+ * won't load it into a register
+ */
+ if (SesSwitchRec.Flags != -1)
+ goto again;
+ }
}
/****************************************************************************
@@ -669,7 +669,7 @@ static void _PM_SessionSwitchEvent(
ULONG Count;
if (DosRequestMutexSem(SesSwitchRec.Mutex, 10000))
- return;
+ return;
/* We're going to wait on that semaphore */
DosResetEventSem(SesSwitchRec.Event, &Count);
@@ -692,10 +692,10 @@ static void _PM_ConsoleSwitch(
USHORT NotifyType;
for (;;) {
- if (VioModeWait(VMWR_POPUP, &NotifyType, 0) != 0)
- break;
- _PM_SessionSwitchEvent(saveState, PM_REACTIVATE);
- }
+ if (VioModeWait(VMWR_POPUP, &NotifyType, 0) != 0)
+ break;
+ _PM_SessionSwitchEvent(saveState, PM_REACTIVATE);
+ }
VioModeUndo(UNDOI_RELEASEOWNER, UNDOK_ERRORCODE, (HVIO)0);
}
@@ -709,13 +709,13 @@ static void _PM_ConsolePopup(
{
USHORT NotifyType;
for (;;) {
- if (VioSavRedrawWait(VSRWI_SAVEANDREDRAW, &NotifyType, 0) != 0)
- break;
- if (NotifyType == VSRWN_SAVE)
- _PM_SessionSwitchEvent(saveState, PM_DEACTIVATE);
- else if (NotifyType == VSRWN_REDRAW)
- _PM_SessionSwitchEvent(saveState, PM_REACTIVATE);
- }
+ if (VioSavRedrawWait(VSRWI_SAVEANDREDRAW, &NotifyType, 0) != 0)
+ break;
+ if (NotifyType == VSRWN_SAVE)
+ _PM_SessionSwitchEvent(saveState, PM_DEACTIVATE);
+ else if (NotifyType == VSRWN_REDRAW)
+ _PM_SessionSwitchEvent(saveState, PM_REACTIVATE);
+ }
VioSavRedrawUndo(UNDOI_RELEASEOWNER, UNDOK_ERRORCODE, (HVIO)0);
}
@@ -726,24 +726,24 @@ Set the suspend application callback for the fullscreen console.
void PMAPI PM_setSuspendAppCallback(
PM_saveState_cb saveState)
{
- // If PM isn't loaded, this stuff will cause crashes!
+ /* If PM isn't loaded, this stuff will cause crashes! */
if (__isShellLoaded()) {
- if (saveState) {
- /* Create the threads responsible for tracking console switches */
- SesSwitchRec.Flags = -1;
- DosCreateMutexSem(NULL, &SesSwitchRec.Mutex, 0, FALSE);
- DosCreateEventSem(NULL, &SesSwitchRec.Event, 0, FALSE);
- _beginthread ((void(*)(void*))_PM_ConsoleSwitch,NULL,SESSION_SWITCH_STACK_SIZE, (void*)saveState);
- _beginthread ((void(*)(void*))_PM_ConsolePopup,NULL,SESSION_SWITCH_STACK_SIZE, (void*)saveState);
- }
- else {
- /* Kill the threads responsible for tracking console switches */
- VioModeUndo(UNDOI_RELEASEOWNER, UNDOK_TERMINATE, (HVIO)0);
- VioSavRedrawUndo(UNDOI_RELEASEOWNER, UNDOK_TERMINATE, (HVIO)0);
- DosCloseEventSem(SesSwitchRec.Event);
- DosCloseMutexSem(SesSwitchRec.Mutex);
- }
- }
+ if (saveState) {
+ /* Create the threads responsible for tracking console switches */
+ SesSwitchRec.Flags = -1;
+ DosCreateMutexSem(NULL, &SesSwitchRec.Mutex, 0, FALSE);
+ DosCreateEventSem(NULL, &SesSwitchRec.Event, 0, FALSE);
+ _beginthread ((void(*)(void*))_PM_ConsoleSwitch,NULL,SESSION_SWITCH_STACK_SIZE, (void*)saveState);
+ _beginthread ((void(*)(void*))_PM_ConsolePopup,NULL,SESSION_SWITCH_STACK_SIZE, (void*)saveState);
+ }
+ else {
+ /* Kill the threads responsible for tracking console switches */
+ VioModeUndo(UNDOI_RELEASEOWNER, UNDOK_TERMINATE, (HVIO)0);
+ VioSavRedrawUndo(UNDOI_RELEASEOWNER, UNDOK_TERMINATE, (HVIO)0);
+ DosCloseEventSem(SesSwitchRec.Event);
+ DosCloseMutexSem(SesSwitchRec.Mutex);
+ }
+ }
}
/****************************************************************************
@@ -758,7 +758,7 @@ void PMAPI PM_restoreConsoleState(
VIOMODEINFO vmi;
if (!cs)
- return;
+ return;
memcpy(&vmi, &cs->vmi, sizeof (VIOMODEINFO));
VioSetMode(&vmi, (HVIO)0);
@@ -789,7 +789,7 @@ void PM_setOSCursorLocation(
/* If session switch is in progress, calling into VIO causes deadlocks! */
/* Also this call to VIO screws up our console library on DBCS boxes... */
if (!isSessionSwitching && !__IsDBCSSystem())
- VioSetCurPos(y,x,0);
+ VioSetCurPos(y,x,0);
}
/****************************************************************************
@@ -813,7 +813,7 @@ ibool PMAPI PM_setRealTimeClockHandler(
PM_intHandler ih,
int frequency)
{
- // TODO: Implement this!
+ /* TODO: Implement this! */
(void)ih;
(void)frequency;
return false;
@@ -826,7 +826,7 @@ Set the real time clock frequency (for stereo modes).
void PMAPI PM_setRealTimeClockFrequency(
int frequency)
{
- // TODO: Implement this!
+ /* TODO: Implement this! */
(void)frequency;
}
@@ -836,7 +836,7 @@ Restore the original real time clock handler.
****************************************************************************/
void PMAPI PM_restoreRealTimeClockHandler(void)
{
- // TODO: Implement this!
+ /* TODO: Implement this! */
}
/****************************************************************************
@@ -881,7 +881,7 @@ const char * PMAPI PM_getNucleusPath(void)
{
static char path[CCHMAXPATH];
if (getenv("NUCLEUS_PATH") != NULL)
- return getenv("NUCLEUS_PATH");
+ return getenv("NUCLEUS_PATH");
strcpy(path,"x:\\os2\\drivers");
path[0] = PM_getBootDrive();
PM_backslash(path);
@@ -920,10 +920,10 @@ const char * PMAPI PM_getMachineName(void)
static char name[40],*env;
if ((env = getenv("HOSTNAME")) != NULL) {
- strncpy(name,env,sizeof(name));
- name[sizeof(name)-1] = 0;
- return name;
- }
+ strncpy(name,env,sizeof(name));
+ name[sizeof(name)-1] = 0;
+ return name;
+ }
return "OS2";
}
@@ -970,7 +970,7 @@ void * PMAPI PM_mapPhysicalAddr(
parmsIn[1] = limit;
parmsIn[2] = isCached;
if ((linear = CallSDDHelp(PMHELP_MAPPHYS)) == 0)
- return NULL;
+ return NULL;
return (void*)(linear + baseOfs);
}
@@ -1031,9 +1031,9 @@ int PMAPI PM_getCOMPort(
int port)
{
switch (port) {
- case 0: return 0x3F8;
- case 1: return 0x2F8;
- }
+ case 0: return 0x3F8;
+ case 1: return 0x2F8;
+ }
return 0;
}
@@ -1045,10 +1045,10 @@ int PMAPI PM_getLPTPort(
int port)
{
switch (port) {
- case 0: return 0x3BC;
- case 1: return 0x378;
- case 2: return 0x278;
- }
+ case 0: return 0x3BC;
+ case 1: return 0x378;
+ case 2: return 0x278;
+ }
return 0;
}
@@ -1112,7 +1112,7 @@ void * PMAPI PM_mapRealPointer(
uint r_off)
{
if (r_seg == 0xFFFF)
- return &RMBuf[r_off];
+ return &RMBuf[r_off];
return lowMem + MK_PHYS(r_seg,r_off);
}
@@ -1126,7 +1126,7 @@ void * PMAPI PM_allocRealSeg(
uint *r_off)
{
if (size > sizeof(RMBuf))
- return NULL;
+ return NULL;
*r_seg = 0xFFFF;
*r_off = 0x0000;
return &RMBuf;
@@ -1160,79 +1160,79 @@ void PMAPI DPMI_int86(
ulong eax = 0;
if (!InitInt10())
- return;
+ return;
memset(&rmregs, 0, sizeof(rmregs));
rmregs.ulBIOSIntNo = intno;
INDPMI(eax); INDPMI(ebx); INDPMI(ecx); INDPMI(edx); INDPMI(esi); INDPMI(edi);
rmregs.aCRF.reg_ds = regs->ds;
rmregs.aCRF.reg_es = regs->es;
if (intno == 0x10) {
- eax = rmregs.aCRF.reg_eax;
- switch (eax & 0xFFFF) {
- case 0x4F00:
- /* We have to hack the way this function works, due to
- * some bugs in the IBM mini-VDM BIOS support. Specifically
- * we need to make the input buffer and output buffer the
- * 'same' buffer, and that ES:SI points to the output
- * buffer (ignored by the BIOS). The data will end up
- * being returned in the input buffer, except for the
- * first four bytes ('VESA') that will not be returned.
- */
- rmregs.pB[0].bBufferType = INPUT_BUFFER;
- rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
- rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
- rmregs.pB[0].pAddress = RMBuf;
- rmregs.pB[0].ulSize = 4;
- rmregs.pB[1].bBufferType = OUTPUT_BUFFER;
- rmregs.pB[1].bSelCRF = REG_OFFSET(reg_es);
- rmregs.pB[1].bOffCRF = REG_OFFSET(reg_esi);
- rmregs.pB[1].pAddress = ((PBYTE)RMBuf)+4;
- rmregs.pB[1].ulSize = 512-4;
- break;
- case 0x4F01:
- rmregs.pB[0].bBufferType = OUTPUT_BUFFER;
- rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
- rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
- rmregs.pB[0].pAddress = RMBuf;
- rmregs.pB[0].ulSize = 256;
- break;
- case 0x4F02:
- rmregs.pB[0].bBufferType = INPUT_BUFFER;
- rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
- rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
- rmregs.pB[0].pAddress = RMBuf;
- rmregs.pB[0].ulSize = 256;
- break;
- case 0x4F09:
- rmregs.pB[0].bBufferType = INPUT_BUFFER;
- rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
- rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
- rmregs.pB[0].pAddress = RMBuf;
- rmregs.pB[0].ulSize = 1024;
- break;
- case 0x4F0A:
- /* Due to bugs in the mini-VDM in OS/2, the 0x4F0A protected
- * mode interface functions will not work (we never get any
- * selectors returned), so we fail this function here. The
- * rest of the VBE/Core driver will work properly if this
- * function is failed, because the VBE 2.0 and 3.0 specs
- * allow for this.
- */
- regs->eax = 0x014F;
- return;
- }
- }
+ eax = rmregs.aCRF.reg_eax;
+ switch (eax & 0xFFFF) {
+ case 0x4F00:
+ /* We have to hack the way this function works, due to
+ * some bugs in the IBM mini-VDM BIOS support. Specifically
+ * we need to make the input buffer and output buffer the
+ * 'same' buffer, and that ES:SI points to the output
+ * buffer (ignored by the BIOS). The data will end up
+ * being returned in the input buffer, except for the
+ * first four bytes ('VESA') that will not be returned.
+ */
+ rmregs.pB[0].bBufferType = INPUT_BUFFER;
+ rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
+ rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
+ rmregs.pB[0].pAddress = RMBuf;
+ rmregs.pB[0].ulSize = 4;
+ rmregs.pB[1].bBufferType = OUTPUT_BUFFER;
+ rmregs.pB[1].bSelCRF = REG_OFFSET(reg_es);
+ rmregs.pB[1].bOffCRF = REG_OFFSET(reg_esi);
+ rmregs.pB[1].pAddress = ((PBYTE)RMBuf)+4;
+ rmregs.pB[1].ulSize = 512-4;
+ break;
+ case 0x4F01:
+ rmregs.pB[0].bBufferType = OUTPUT_BUFFER;
+ rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
+ rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
+ rmregs.pB[0].pAddress = RMBuf;
+ rmregs.pB[0].ulSize = 256;
+ break;
+ case 0x4F02:
+ rmregs.pB[0].bBufferType = INPUT_BUFFER;
+ rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
+ rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
+ rmregs.pB[0].pAddress = RMBuf;
+ rmregs.pB[0].ulSize = 256;
+ break;
+ case 0x4F09:
+ rmregs.pB[0].bBufferType = INPUT_BUFFER;
+ rmregs.pB[0].bSelCRF = REG_OFFSET(reg_es);
+ rmregs.pB[0].bOffCRF = REG_OFFSET(reg_edi);
+ rmregs.pB[0].pAddress = RMBuf;
+ rmregs.pB[0].ulSize = 1024;
+ break;
+ case 0x4F0A:
+ /* Due to bugs in the mini-VDM in OS/2, the 0x4F0A protected
+ * mode interface functions will not work (we never get any
+ * selectors returned), so we fail this function here. The
+ * rest of the VBE/Core driver will work properly if this
+ * function is failed, because the VBE 2.0 and 3.0 specs
+ * allow for this.
+ */
+ regs->eax = 0x014F;
+ return;
+ }
+ }
if (useVPMI)
- PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_SOFTWAREINT,NULL,&rmregs);
+ PM_VIDEOPMI32Request(&Adapter,PMIREQUEST_SOFTWAREINT,NULL,&rmregs);
else {
- DosSysCtl(6, &rmregs);
- }
+ DosSysCtl(6, &rmregs);
+ }
OUTDPMI(eax); OUTDPMI(ebx); OUTDPMI(ecx); OUTDPMI(edx); OUTDPMI(esi); OUTDPMI(edi);
if (((regs->eax & 0xFFFF) == 0x004F) && ((eax & 0xFFFF) == 0x4F00)) {
- /* Hack to fix up the missing 'VESA' string for mini-VDM */
- memcpy(RMBuf,"VESA",4);
- }
+ /* Hack to fix up the missing 'VESA' string for mini-VDM */
+ memcpy(RMBuf,"VESA",4);
+ }
regs->ds = rmregs.aCRF.reg_ds;
regs->es = rmregs.aCRF.reg_es;
regs->flags = rmregs.aCRF.reg_eflag;
@@ -1354,13 +1354,13 @@ static pageblock *PM_addNewPageBlock(void)
/* Allocate memory for the new page block, and add to head of list */
if (DosAllocSharedMem((void**)&newBlock,NULL,PAGE_BLOCK_SIZE,OBJ_GETTABLE | PAG_READ | PAG_WRITE | PAG_COMMIT))
- return NULL;
+ return NULL;
if (!PM_lockDataPages(newBlock,PAGE_BLOCK_SIZE,&newBlock->lockHandle))
- return NULL;
+ return NULL;
newBlock->prev = NULL;
newBlock->next = pageBlocks;
if (pageBlocks)
- pageBlocks->prev = newBlock;
+ pageBlocks->prev = newBlock;
pageBlocks = newBlock;
/* Initialise the page aligned free list for the page block */
@@ -1369,7 +1369,7 @@ static pageblock *PM_addNewPageBlock(void)
newBlock->freeListStart = newBlock->freeList;
newBlock->freeListEnd = p + (PAGES_PER_BLOCK-1) * PM_PAGE_SIZE;
for (i = 0; i < PAGES_PER_BLOCK; i++,p = next)
- FREELIST_NEXT(p) = next = p + PM_PAGE_SIZE;
+ FREELIST_NEXT(p) = next = p + PM_PAGE_SIZE;
FREELIST_NEXT(p - PM_PAGE_SIZE) = NULL;
return newBlock;
}
@@ -1388,11 +1388,11 @@ void * PMAPI PM_allocPage(
* page block if no free blocks are found.
*/
for (block = pageBlocks; block != NULL; block = block->next) {
- if (block->freeCount)
- break;
- }
+ if (block->freeCount)
+ break;
+ }
if (block == NULL && (block = PM_addNewPageBlock()) == NULL)
- return NULL;
+ return NULL;
block->freeCount--;
p = block->freeList;
block->freeList = FREELIST_NEXT(p);
@@ -1411,36 +1411,36 @@ void PMAPI PM_freePage(
/* First find the page block that this page belongs to */
for (block = pageBlocks; block != NULL; block = block->next) {
- if (p >= block->freeListStart && p <= block->freeListEnd)
- break;
- }
+ if (p >= block->freeListStart && p <= block->freeListEnd)
+ break;
+ }
CHECK(block != NULL);
/* Now free the block by adding it to the free list */
FREELIST_NEXT(p) = block->freeList;
block->freeList = p;
if (++block->freeCount == PAGES_PER_BLOCK) {
- /* If all pages in the page block are now free, free the entire
- * page block itself.
- */
- if (block == pageBlocks) {
- /* Delete from head */
- pageBlocks = block->next;
- if (block->next)
- block->next->prev = NULL;
- }
- else {
- /* Delete from middle of list */
- CHECK(block->prev != NULL);
- block->prev->next = block->next;
- if (block->next)
- block->next->prev = block->prev;
- }
-
- /* Unlock the memory and free it */
- PM_unlockDataPages(block,PAGE_BLOCK_SIZE,&block->lockHandle);
- DosFreeMem(block);
- }
+ /* If all pages in the page block are now free, free the entire
+ * page block itself.
+ */
+ if (block == pageBlocks) {
+ /* Delete from head */
+ pageBlocks = block->next;
+ if (block->next)
+ block->next->prev = NULL;
+ }
+ else {
+ /* Delete from middle of list */
+ CHECK(block->prev != NULL);
+ block->prev->next = block->next;
+ if (block->next)
+ block->next->prev = block->prev;
+ }
+
+ /* Unlock the memory and free it */
+ PM_unlockDataPages(block,PAGE_BLOCK_SIZE,&block->lockHandle);
+ DosFreeMem(block);
+ }
}
/****************************************************************************
@@ -1453,8 +1453,8 @@ void PMAPI PM_mapSharedPages(void)
/* Map all the page blocks above into the shared memory for process */
for (block = pageBlocks; block != NULL; block = block->next) {
- DosGetSharedMem(block, PAG_READ | PAG_WRITE);
- }
+ DosGetSharedMem(block, PAG_READ | PAG_WRITE);
+ }
}
/****************************************************************************
@@ -1533,7 +1533,7 @@ void PMAPI PM_setBankA(
INTCRF rmregs;
if (!InitInt10())
- return;
+ return;
memset(&rmregs, 0, sizeof(rmregs));
rmregs.ulBIOSIntNo = 0x10;
rmregs.aCRF.reg_eax = 0x4F05;
@@ -1552,7 +1552,7 @@ void PMAPI PM_setBankAB(
INTCRF rmregs;
if (!InitInt10())
- return;
+ return;
memset(&rmregs, 0, sizeof(rmregs));
rmregs.ulBIOSIntNo = 0x10;
rmregs.aCRF.reg_eax = 0x4F05;
@@ -1578,7 +1578,7 @@ void PMAPI PM_setCRTStart(
INTCRF rmregs;
if (!InitInt10())
- return;
+ return;
memset(&rmregs, 0, sizeof(rmregs));
rmregs.ulBIOSIntNo = 0x10;
rmregs.aCRF.reg_eax = 0x4F07;
@@ -1625,8 +1625,8 @@ int PMAPI PM_enableWriteCombine(
return MTRR_enableWriteCombine(base,size,type);
}
-// TODO: Move the MTRR helper stuff into the call gate, or better yet
-// entirely into the ring 0 helper driver!!
+/* TODO: Move the MTRR helper stuff into the call gate, or better yet */
+/* entirely into the ring 0 helper driver!! */
/* MTRR helper functions. To make it easier to implement the MTRR support
* under OS/2, we simply put our ring 0 helper functions into the
@@ -1705,7 +1705,7 @@ void _ASMAPI _MTRR_writeMSR(
PM_MODULE PMAPI PM_loadLibrary(
const char *szDLLName)
{
- // TODO: Implement this to load shared libraries!
+ /* TODO: Implement this to load shared libraries! */
(void)szDLLName;
return NULL;
}
@@ -1714,7 +1714,7 @@ void * PMAPI PM_getProcAddress(
PM_MODULE hModule,
const char *szProcName)
{
- // TODO: Implement this!
+ /* TODO: Implement this! */
(void)hModule;
(void)szProcName;
return NULL;
@@ -1723,7 +1723,7 @@ void * PMAPI PM_getProcAddress(
void PMAPI PM_freeLibrary(
PM_MODULE hModule)
{
- // TODO: Implement this!
+ /* TODO: Implement this! */
(void)hModule;
}
@@ -1740,15 +1740,15 @@ static void convertFindData(
memset(findData,0,findData->dwSize);
findData->dwSize = dwSize;
if (blk->attrFile & FILE_READONLY)
- findData->attrib |= PM_FILE_READONLY;
+ findData->attrib |= PM_FILE_READONLY;
if (blk->attrFile & FILE_DIRECTORY)
- findData->attrib |= PM_FILE_DIRECTORY;
+ findData->attrib |= PM_FILE_DIRECTORY;
if (blk->attrFile & FILE_ARCHIVED)
- findData->attrib |= PM_FILE_ARCHIVE;
+ findData->attrib |= PM_FILE_ARCHIVE;
if (blk->attrFile & FILE_HIDDEN)
- findData->attrib |= PM_FILE_HIDDEN;
+ findData->attrib |= PM_FILE_HIDDEN;
if (blk->attrFile & FILE_SYSTEM)
- findData->attrib |= PM_FILE_SYSTEM;
+ findData->attrib |= PM_FILE_SYSTEM;
findData->sizeLo = blk->cbFile;
findData->sizeHi = 0;
strncpy(findData->name,blk->achName,PM_MAX_PATH);
@@ -1770,9 +1770,9 @@ void *PMAPI PM_findFirstFile(
ulong count = 1;
if (DosFindFirst((PSZ)filename,&hdir,FIND_MASK,&blk,sizeof(blk),&count,FIL_STANDARD) == NO_ERROR) {
- convertFindData(findData,&blk);
- return (void*)hdir;
- }
+ convertFindData(findData,&blk);
+ return (void*)hdir;
+ }
return PM_FILE_INVALID;
}
@@ -1788,9 +1788,9 @@ ibool PMAPI PM_findNextFile(
ulong count = 1;
if (DosFindNext((HDIR)handle,&blk,sizeof(blk),&count) == NO_ERROR) {
- convertFindData(findData,&blk);
- return true;
- }
+ convertFindData(findData,&blk);
+ return true;
+ }
return false;
}
@@ -1857,16 +1857,16 @@ void PMAPI PM_setFileAttr(
FILESTATUS3 s;
if (DosQueryPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&s,sizeof(s)))
- return;
+ return;
s.attrFile = 0;
if (attrib & PM_FILE_READONLY)
- s.attrFile |= FILE_READONLY;
+ s.attrFile |= FILE_READONLY;
if (attrib & PM_FILE_ARCHIVE)
- s.attrFile |= FILE_ARCHIVED;
+ s.attrFile |= FILE_ARCHIVED;
if (attrib & PM_FILE_HIDDEN)
- s.attrFile |= FILE_HIDDEN;
+ s.attrFile |= FILE_HIDDEN;
if (attrib & PM_FILE_SYSTEM)
- s.attrFile |= FILE_SYSTEM;
+ s.attrFile |= FILE_SYSTEM;
DosSetPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&s,sizeof(s),0L);
}
@@ -1881,15 +1881,15 @@ uint PMAPI PM_getFileAttr(
uint retval = 0;
if (DosQueryPathInfo((PSZ)filename, FIL_STANDARD, &fs3, sizeof(FILESTATUS3)))
- return 0;
+ return 0;
if (fs3.attrFile & FILE_READONLY)
- retval |= PM_FILE_READONLY;
+ retval |= PM_FILE_READONLY;
if (fs3.attrFile & FILE_ARCHIVED)
- retval |= PM_FILE_ARCHIVE;
+ retval |= PM_FILE_ARCHIVE;
if (fs3.attrFile & FILE_HIDDEN)
- retval |= PM_FILE_HIDDEN;
+ retval |= PM_FILE_HIDDEN;
if (fs3.attrFile & FILE_SYSTEM)
- retval |= PM_FILE_SYSTEM;
+ retval |= PM_FILE_SYSTEM;
return retval;
}
@@ -1928,33 +1928,33 @@ ibool PMAPI PM_getFileTime(
time_t tt;
if (DosQueryPathInfo((PSZ)filename, FIL_STANDARD, &fs3, sizeof(FILESTATUS3)))
- return false;
+ return false;
if (gmTime) {
- tc.tm_year = fs3.fdateLastWrite.year + 80;
- tc.tm_mon = fs3.fdateLastWrite.month - 1;
- tc.tm_mday = fs3.fdateLastWrite.day;
- tc.tm_hour = fs3.ftimeLastWrite.hours;
- tc.tm_min = fs3.ftimeLastWrite.minutes;
- tc.tm_sec = fs3.ftimeLastWrite.twosecs * 2;
- if((tt = mktime(&tc)) == -1)
- return false;
- if(!(ret = gmtime(&tt)))
- return false;
- time->sec = ret->tm_sec;
- time->day = ret->tm_mday;
- time->mon = ret->tm_mon + 1;
- time->year = ret->tm_year - 80;
- time->min = ret->tm_min;
- time->hour = ret->tm_hour;
- }
+ tc.tm_year = fs3.fdateLastWrite.year + 80;
+ tc.tm_mon = fs3.fdateLastWrite.month - 1;
+ tc.tm_mday = fs3.fdateLastWrite.day;
+ tc.tm_hour = fs3.ftimeLastWrite.hours;
+ tc.tm_min = fs3.ftimeLastWrite.minutes;
+ tc.tm_sec = fs3.ftimeLastWrite.twosecs * 2;
+ if((tt = mktime(&tc)) == -1)
+ return false;
+ if(!(ret = gmtime(&tt)))
+ return false;
+ time->sec = ret->tm_sec;
+ time->day = ret->tm_mday;
+ time->mon = ret->tm_mon + 1;
+ time->year = ret->tm_year - 80;
+ time->min = ret->tm_min;
+ time->hour = ret->tm_hour;
+ }
else {
- time->sec = fs3.ftimeLastWrite.twosecs * 2;
- time->day = fs3.fdateLastWrite.day;
- time->mon = fs3.fdateLastWrite.month;
- time->year = fs3.fdateLastWrite.year;
- time->min = fs3.ftimeLastWrite.minutes;
- time->hour = fs3.ftimeLastWrite.hours;
- }
+ time->sec = fs3.ftimeLastWrite.twosecs * 2;
+ time->day = fs3.fdateLastWrite.day;
+ time->mon = fs3.fdateLastWrite.month;
+ time->year = fs3.fdateLastWrite.year;
+ time->min = fs3.ftimeLastWrite.minutes;
+ time->hour = fs3.ftimeLastWrite.hours;
+ }
return true;
}
@@ -1973,32 +1973,32 @@ ibool PMAPI PM_setFileTime(
time_t tt;
if (DosQueryPathInfo((PSZ)filename,FIL_STANDARD,(PVOID)&fs3,sizeof(fs3)))
- return false;
+ return false;
if (gmTime) {
- tc.tm_year = time->year + 80;
- tc.tm_mon = time->mon - 1;
- tc.tm_mday = time->day;
- tc.tm_hour = time->hour;
- tc.tm_min = time->min;
- tc.tm_sec = time->sec;
- if((tt = mktime(&tc)) == -1)
- return false;
- ret = localtime(&tt);
- fs3.ftimeLastWrite.twosecs = ret->tm_sec / 2;
- fs3.fdateLastWrite.day = ret->tm_mday;
- fs3.fdateLastWrite.month = ret->tm_mon + 1;
- fs3.fdateLastWrite.year = ret->tm_year - 80;
- fs3.ftimeLastWrite.minutes = ret->tm_min;
- fs3.ftimeLastWrite.hours = ret->tm_hour;
- }
+ tc.tm_year = time->year + 80;
+ tc.tm_mon = time->mon - 1;
+ tc.tm_mday = time->day;
+ tc.tm_hour = time->hour;
+ tc.tm_min = time->min;
+ tc.tm_sec = time->sec;
+ if((tt = mktime(&tc)) == -1)
+ return false;
+ ret = localtime(&tt);
+ fs3.ftimeLastWrite.twosecs = ret->tm_sec / 2;
+ fs3.fdateLastWrite.day = ret->tm_mday;
+ fs3.fdateLastWrite.month = ret->tm_mon + 1;
+ fs3.fdateLastWrite.year = ret->tm_year - 80;
+ fs3.ftimeLastWrite.minutes = ret->tm_min;
+ fs3.ftimeLastWrite.hours = ret->tm_hour;
+ }
else {
- fs3.ftimeLastWrite.twosecs = time->sec / 2;
- fs3.fdateLastWrite.day = time->day;
- fs3.fdateLastWrite.month = time->mon;
- fs3.fdateLastWrite.year = time->year;
- fs3.ftimeLastWrite.minutes = time->min;
- fs3.ftimeLastWrite.hours = time->hour;
- }
+ fs3.ftimeLastWrite.twosecs = time->sec / 2;
+ fs3.fdateLastWrite.day = time->day;
+ fs3.fdateLastWrite.month = time->mon;
+ fs3.fdateLastWrite.year = time->year;
+ fs3.ftimeLastWrite.minutes = time->min;
+ fs3.ftimeLastWrite.hours = time->hour;
+ }
memcpy(&fs3.fdateLastAccess, &fs3.fdateLastWrite, sizeof(FDATE));
memcpy(&fs3.fdateCreation, &fs3.fdateLastWrite, sizeof(FDATE));
memcpy(&fs3.ftimeLastAccess, &fs3.ftimeLastWrite, sizeof(FTIME));
OpenPOWER on IntegriCloud