- Timestamp:
- Dec 29, 2012, 1:31:02 AM (13 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r22024 r22051 68 68 69 69 #include "hmhandle.h" 70 #include "oslibdos.h" 70 71 71 72 #include <vmutex.h> … … 657 658 #endif 658 659 659 /* c opy standard handles from OS/2's Open32 Subsystem*/660 /* create handle manager instance for Open32 handles */ 660 661 HMGlobals.pHMStandard = new HMDeviceStandardClass("\\\\STANDARD_HANDLE\\"); 661 HMSetStdHandle(STD_INPUT_HANDLE, O32_GetStdHandle(STD_INPUT_HANDLE));662 HMSetStdHandle(STD_OUTPUT_HANDLE, O32_GetStdHandle(STD_OUTPUT_HANDLE));663 HMSetStdHandle(STD_ERROR_HANDLE, O32_GetStdHandle(STD_ERROR_HANDLE));664 665 /* create handle manager instance for Open32 handles */666 662 HMGlobals.pHMOpen32 = new HMDeviceOpen32Class("\\\\.\\"); 667 663 HMGlobals.pHMEvent = new HMDeviceEventClass("\\\\EVENT\\"); … … 679 675 HMGlobals.pHMParPort = new HMDeviceParPortClass("\\\\LPT\\"); 680 676 HMGlobals.pHMNul = new HMDeviceNulClass("\\\\NUL\\"); 677 678 HMSetupStdHandle(STD_INPUT_HANDLE); 679 HMSetupStdHandle(STD_OUTPUT_HANDLE); 680 HMSetupStdHandle(STD_ERROR_HANDLE); 681 681 } 682 682 return (NO_ERROR); … … 1052 1052 1053 1053 /***************************************************************************** 1054 * Name : HANDLE _HMSet StdHandle1055 * Purpose : replacement for Open32's SetStdHandle function1054 * Name : HANDLE _HMSetupStdHandle 1055 * Purpose : initialization of standard handles 1056 1056 * Parameters: DWORD nStdHandle 1057 1057 * HANDLE hHandle … … 1064 1064 *****************************************************************************/ 1065 1065 1066 BOOL HMSet StdHandle(DWORD nStdHandle, HANDLE hHandleOpen32)1066 BOOL HMSetupStdHandle(DWORD nStdHandle) 1067 1067 { 1068 1068 PHMHANDLEDATA pHMHandleData; … … 1074 1074 SetLastError(ERROR_NOT_ENOUGH_MEMORY); /* use this as error message */ 1075 1075 return 0; 1076 } 1077 1078 ULONG handle; 1079 1080 switch (nStdHandle) 1081 { 1082 case STD_INPUT_HANDLE: 1083 { 1084 handle = 0; 1085 HMGlobals.hStandardIn = hHandle; 1086 break; 1087 } 1088 case STD_OUTPUT_HANDLE: 1089 { 1090 handle = 1; 1091 HMGlobals.hStandardOut = hHandle; 1092 break; 1093 } 1094 case STD_ERROR_HANDLE: 1095 { 1096 handle = 2; 1097 HMGlobals.hStandardError = hHandle; 1098 break; 1099 } 1100 default: 1101 { 1102 SetLastError(ERROR_INVALID_PARAMETER); /* set error information */ 1103 return (FALSE); /* raise error condition */ 1104 } 1076 1105 } 1077 1106 … … 1082 1111 pHMHandleData->dwCreation = 0; 1083 1112 pHMHandleData->dwFlags = 0; 1084 pHMHandleData->dwUserData = nStdHandle; 1085 pHMHandleData->hHMHandle = hHandleOpen32; 1113 pHMHandleData->dwUserData = 0; 1086 1114 pHMHandleData->lpHandlerData = NULL; 1087 1115 1088 TabWin32Handles[hHandle].pDeviceHandler = HMGlobals.pHMStandard; 1089 1090 switch (nStdHandle) 1091 { 1092 case STD_INPUT_HANDLE: HMGlobals.hStandardIn = hHandle; return TRUE; 1093 case STD_OUTPUT_HANDLE: HMGlobals.hStandardOut = hHandle; return TRUE; 1094 case STD_ERROR_HANDLE: HMGlobals.hStandardError = hHandle; return TRUE; 1095 1116 1117 DWORD type = OSLibDosQueryHType(handle); 1118 switch (type & 0x7) 1119 { 1120 case 0: /* disk file */ 1121 { 1122 pHMHandleData->hHMHandle = handle; 1123 TabWin32Handles[hHandle].pDeviceHandler = HMGlobals.pHMFile; 1124 break; 1125 } 1126 case 1: /* character device */ 1127 { 1128 // Note: we use a simple read/write device by default; 1129 // if this is a console application, iConsoleInit() will set up 1130 // proper devices with extended functionality 1131 pHMHandleData->hHMHandle = O32_GetStdHandle(nStdHandle); 1132 TabWin32Handles[hHandle].pDeviceHandler = HMGlobals.pHMStandard; 1133 break; 1134 } 1135 case 2: /* pipe */ 1136 { 1137 pHMHandleData->hHMHandle = handle; 1138 TabWin32Handles[hHandle].pDeviceHandler = HMGlobals.pHMNamedPipe; 1139 break; 1140 } 1096 1141 default: 1097 1142 { 1098 SetLastError(ERROR_ INVALID_PARAMETER);/* set error information */1143 SetLastError(ERROR_SYS_INTERNAL); /* set error information */ 1099 1144 return (FALSE); /* raise error condition */ 1100 1145 } 1101 1146 } 1102 } 1103 1104 /***************************************************************************** 1105 * Name : HANDLE _HMUdptStdHandle 1106 * Purpose : 1147 1148 return TRUE; 1149 } 1150 1151 /***************************************************************************** 1152 * Name : HANDLE _HMSetStdHandle 1153 * Purpose : replacement for Open32's SetStdHandle function 1107 1154 * Parameters: DWORD nStdHandle 1108 1155 * HANDLE hHandle … … 1115 1162 *****************************************************************************/ 1116 1163 1117 BOOL HM UpdtStdHandle(DWORD nStdHandle, HANDLE hHandle)1164 BOOL HMSetStdHandle(DWORD nStdHandle, HANDLE hHandle) 1118 1165 { 1119 1166 switch (nStdHandle) … … 1784 1831 1785 1832 if (!pHMHandle || !pHMHandle->pDeviceHandler) 1786 return ERROR_SYS_INTERNAL; 1833 { 1834 SetLastError(ERROR_SYS_INTERNAL); 1835 return (FALSE); 1836 } 1787 1837 1788 1838 fResult = pHMHandle->pDeviceHandler->ReadFile(&pHMHandle->hmHandleData, -
trunk/src/kernel32/console.cpp
r22050 r22051 468 468 CONSOLE_TEXTMODE_BUFFER, 469 469 0); 470 HM UpdtStdHandle(STD_INPUT_HANDLE,471 470 HMSetStdHandle(STD_INPUT_HANDLE, 471 hStandardIn); 472 472 } 473 473 … … 485 485 CONSOLE_TEXTMODE_BUFFER, 486 486 0); 487 HM UpdtStdHandle(STD_OUTPUT_HANDLE,488 487 HMSetStdHandle(STD_OUTPUT_HANDLE, 488 hStandardOut); 489 489 } 490 490 … … 502 502 CONSOLE_TEXTMODE_BUFFER, 503 503 0); 504 HM UpdtStdHandle(STD_ERROR_HANDLE,505 504 HMSetStdHandle(STD_ERROR_HANDLE, 505 hStandardError); 506 506 } 507 507 -
trunk/src/kernel32/oslibdos.cpp
r22038 r22051 3485 3485 //****************************************************************************** 3486 3486 //****************************************************************************** 3487 DWORD OSLibDosQueryHType(ULONG handle) 3488 { 3489 ULONG type, attr; 3490 APIRET rc = DosQueryHType(handle, &type, &attr); 3491 if (rc != NO_ERROR) { 3492 dprintf(("DosQueryHType error: return code = %u\n", rc)); 3493 return -1; 3494 } 3495 return type; 3496 } 3497 //****************************************************************************** 3498 //****************************************************************************** 3487 3499 3488 3500 /* sdbm: -
trunk/src/kernel32/oslibdos.h
r21916 r22051 363 363 DWORD OSLibDosGetNumPhysDrives(); 364 364 365 DWORD OSLibDosQueryHType(ULONG handle); 366 365 367 #ifdef __cplusplus 366 368 }
Note:
See TracChangeset
for help on using the changeset viewer.