Changeset 182 for trunk/dll/error.c
- Timestamp:
- May 28, 2005, 7:54:26 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/error.c
r169 r182 14 14 24 May 05 SHL Rename saymsg to more accurate Misc_Error 15 15 24 May 05 SHL Rework Win_Error args and clean up logic 16 27 May 05 SHL Rework to use common showMsg 16 17 17 18 ***********************************************************************/ … … 31 32 32 33 #pragma data_seg(DATA1) 33 #pragma alloc_text(FMINPUT,Win_Error,Dos_Error,saymsg )34 35 // fixme to pass hwndError rather hab 34 #pragma alloc_text(FMINPUT,Win_Error,Dos_Error,saymsg,showMsg) 35 36 static APIRET showMsg(ULONG mb_type, HWND hwnd, CHAR *pszTitle, CHAR *pszMsg); 36 37 37 38 //== Win_Error: report Win...() error === … … 39 40 VOID Win_Error(HWND hwndErr, HWND hwndOwner, PSZ pszFileName, ULONG ulLineNo, CHAR *pszFmt,...) 40 41 { 41 PERRINFO pErrInfoBlk; /* Pointer to ERRINFO structure that isfilled42 PERRINFO pErrInfoBlk; /* Pointer to ERRINFO structure filled 42 43 by WinGetErrorInfo */ 43 PSZ pszOffset; /* Pointer to thecurrent error message returned44 PSZ pszOffset; /* Pointer to current error message returned 44 45 by WinGetErrorInfo */ 45 CHAR szErrBuffer[4096]; /* The error message that is displayed to 46 the user via WinMessageBox */ 46 CHAR szMsg[4096]; 47 47 PSZ psz; 48 48 HAB hab; … … 50 50 51 51 if (hwndErr == NULLHANDLE) 52 hab = (HAB) 52 hab = (HAB)0; 53 53 else 54 54 hab = WinQueryAnchorBlock(hwndErr); … … 56 56 // Format callers message 57 57 va_start(va, pszFmt); 58 vsprintf(sz ErrBuffer, pszFmt, va);58 vsprintf(szMsg, pszFmt, va); 59 59 va_end(va); 60 60 61 61 // Append file name and line number 62 sprintf(sz ErrBuffer + strlen(szErrBuffer),62 sprintf(szMsg + strlen(szMsg), 63 63 GetPString(IDS_GENERR1TEXT), 64 64 pszFileName, ulLineNo, " "); 65 65 66 / * Get last PM error for the current thread */66 // Get last PM error for the current thread 67 67 pErrInfoBlk = WinGetErrorInfo(hab); 68 // fixme to report 68 69 if (pErrInfoBlk != NULL) 69 70 { … … 77 78 append error message to source code linenumber 78 79 */ 79 psz = sz ErrBuffer + strlen(szErrBuffer);80 psz = szMsg + strlen(szMsg); 80 81 sprintf(psz, "#0x%04x \"", ERRORIDERROR(pErrInfoBlk -> idError)); 81 82 psz += strlen(psz); 82 strcpy(psz, ((PSZ) pErrInfoBlk) + *(PSHORT)pszOffset);83 strcpy(psz, ((PSZ)pErrInfoBlk) + *(PSHORT)pszOffset); 83 84 psz += strlen(psz); 84 85 strcpy(psz, "\""); 85 WinFreeErrorInfo(pErrInfoBlk); /* Free resource segment */ 86 87 WinMessageBox(HWND_DESKTOP, /* Parent */ 88 hwndOwner, /* Owner */ 89 szErrBuffer, /* Formatted message */ 90 GetPString(IDS_GENERR2TEXT), /* Titlebar message */ 91 0, /* Message identifier */ 92 MB_ENTER | MB_ICONEXCLAMATION | MB_MOVEABLE); 86 WinFreeErrorInfo(pErrInfoBlk); // Free resource segment 87 88 showMsg(MB_ENTER | MB_ICONEXCLAMATION, 89 hwndOwner, 90 GetPString(IDS_GENERR2TEXT), // Titlebar message 91 szMsg); // Formatted message 93 92 } 94 93 … … 100 99 ULONG ulLineNo, CHAR *pszFmt,...) 101 100 { 102 CHAR szMsgBuffer[4096]; /* The whole error message that 103 is displayed to 104 the user via WinMessageBox */ 105 ULONG Class = 17; /* Error class - fixme to not init? */ 106 ULONG action = 9; /* Error action */ 107 ULONG Locus = 7; /* Error location */ 101 CHAR szMsg[4096]; 102 ULONG Class = 17; // Error class - fixme to not init? 103 ULONG action = 9; // Error action 104 ULONG Locus = 7; // Error location 108 105 ULONG ulMsgLen; 109 106 CHAR *pszMsgStart; … … 114 111 return MBID_ENTER; // Should not have been called 115 112 116 if (!hwndOwner)117 hwndOwner = HWND_DESKTOP;118 119 113 // Format caller's message 120 114 va_start(va, pszFmt); 121 vsprintf(szMsg Buffer, pszFmt, va);115 vsprintf(szMsg, pszFmt, va); 122 116 va_end(va); 123 117 124 118 DosErrClass(ulRC, &Class, &action, &Locus); 125 119 126 sprintf(szMsg Buffer + strlen(szMsgBuffer),120 sprintf(szMsg + strlen(szMsg), 127 121 GetPString(IDS_DOSERR1TEXT), 128 122 pszFileName, … … 132 126 GetPString(IDS_ERRACTION1TEXT + (action - 1)), 133 127 GetPString(IDS_ERRLOCUS1TEXT + (Locus - 1))); 134 pszMsgStart = szMsg Buffer + strlen(szMsgBuffer) + 1;128 pszMsgStart = szMsg + strlen(szMsg) + 1; 135 129 // Get message leaving space for NL separator 136 if (!DosGetMessage(NULL, 0L, (PCHAR) 137 !DosGetMessage(NULL, 0L, (PCHAR) 130 if (!DosGetMessage(NULL, 0L, (PCHAR)pszMsgStart + 1, 1024, ulRC, "OSO001.MSG", &ulMsgLen) || 131 !DosGetMessage(NULL, 0L, (PCHAR)pszMsgStart + 1, 1024, ulRC, "OSO001H.MSG", &ulMsgLen)) 138 132 { 139 133 // Got message 140 134 pszMsgStart[ulMsgLen + 1] = 0; // Terminate 141 *(pszMsgStart - 1) = '\n'; // Stuff NL before message text135 *(pszMsgStart - 1) = '\n'; // Stuff NL before message text 142 136 *pszMsgStart = '\"'; // Prefix message text with quote 137 143 138 psz = pszMsgStart + ulMsgLen; // Point at last char 144 139 // Chop trailing NL CR TAB … … 165 160 } 166 161 167 return WinMessageBox(HWND_DESKTOP, /* Parent */ 168 hwndOwner, /* Owner */ 169 szMsgBuffer, /* Formatted message */ 170 GetPString(IDS_DOSERR2TEXT), /* Title bar text */ 171 0, /* Message identifier */ 172 mb_type | MB_ICONEXCLAMATION | MB_MOVEABLE); 162 return showMsg(mb_type | MB_ICONEXCLAMATION, 163 hwndOwner, 164 GetPString(IDS_DOSERR2TEXT), // Title 165 szMsg); 173 166 174 167 } // Dos_Error 175 168 176 // fixme to be Misc_Error instead of saymsg169 // fixme to be rename to Misc_Error 177 170 178 171 //=== saymsg: report misc error === … … 180 173 APIRET saymsg(ULONG mb_type, HWND hwnd, CHAR *pszTitle, CHAR *pszFmt,...) 181 174 { 182 CHAR sz Buffer[4096];175 CHAR szMsg[4096]; 183 176 va_list va; 184 177 185 178 va_start(va, pszFmt); 186 vsprintf(sz Buffer, pszFmt, va);179 vsprintf(szMsg, pszFmt, va); 187 180 va_end(va); 181 182 return showMsg(mb_type, 183 hwnd, 184 pszTitle, 185 szMsg); 186 } // saymsg 187 188 //=== showMsg: report misc error === 189 190 static APIRET showMsg(ULONG mb_type, HWND hwnd, CHAR *pszTitle, CHAR *pszMsg) 191 { 192 fputs(pszMsg, stderr); 193 fputc('\n', stderr); 194 fflush(stderr); 188 195 189 196 if (!hwnd) 190 197 hwnd = HWND_DESKTOP; 191 198 192 return WinMessageBox(HWND_DESKTOP, hwnd, szBuffer, pszTitle, 193 0, mb_type | MB_MOVEABLE); 194 } // saymsg 199 return WinMessageBox(HWND_DESKTOP, // Parent 200 hwnd, // Owner 201 pszMsg, 202 pszTitle, 203 0, // help id 204 mb_type | MB_MOVEABLE); 205 } // showMsg
Note:
See TracChangeset
for help on using the changeset viewer.