Annotation of mstools/samples/sdktools/image/drwatson/error.c, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1993  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     error.c
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     This file implements the error handeling functions for the
        !            12:     entire DRWTSN32 application.  This includes error popups,
        !            13:     debug prints, and assertions.
        !            14: 
        !            15: Author:
        !            16: 
        !            17:     Wesley Witt (wesw) 1-May-1993
        !            18: 
        !            19: Environment:
        !            20: 
        !            21:     User Mode
        !            22: 
        !            23: --*/
        !            24: 
        !            25: #include <windows.h>
        !            26: #include <stdlib.h>
        !            27: #include <stdio.h>
        !            28: #include <string.h>
        !            29: 
        !            30: #include "drwatson.h"
        !            31: #include "proto.h"
        !            32: #include "resource.h"
        !            33: #include "messages.h"
        !            34: 
        !            35: 
        !            36: void
        !            37: FatalError(char *format, ...)
        !            38: 
        !            39: /*++
        !            40: 
        !            41: Routine Description:
        !            42: 
        !            43:     This function is called when there is nothing else to do, hence
        !            44:     the name FatalError.  It puts up a popup and then terminates.
        !            45: 
        !            46: Arguments:
        !            47: 
        !            48:     Same as printf.
        !            49: 
        !            50: Return Value:
        !            51: 
        !            52:     None.
        !            53: 
        !            54: --*/
        !            55: 
        !            56: {
        !            57:     char      vbuf[1024];
        !            58:     char      buf[1024];
        !            59:     char      szErrorCode[10];
        !            60:     DWORD     dwCount;
        !            61:     DWORD     dwArgs[4];
        !            62:     va_list   arg_ptr;
        !            63: 
        !            64:     va_start(arg_ptr, format);
        !            65:     _vsnprintf(vbuf, sizeof(vbuf), format, arg_ptr);
        !            66:     wsprintf( szErrorCode, "%d", GetLastError() );
        !            67:     dwArgs[0] = (DWORD)vbuf;
        !            68:     dwArgs[1] = (DWORD)szErrorCode;
        !            69:     dwCount = FormatMessage(
        !            70:                 FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY,
        !            71:                 NULL,
        !            72:                 MSG_FATAL_ERROR,
        !            73:                 0, // GetUserDefaultLangID(),
        !            74:                 buf,
        !            75:                 sizeof(buf),
        !            76:                 (va_list*)dwArgs
        !            77:                 );
        !            78:     Assert( dwCount != 0 );
        !            79:     MessageBox( NULL,
        !            80:                 buf,
        !            81:                 LoadRcString( IDS_FATAL_ERROR ),
        !            82:                 MB_SETFOREGROUND | MB_OK
        !            83:               );
        !            84:     ExitProcess( 0 );
        !            85: }
        !            86: 
        !            87: void
        !            88: NonFatalError(char *format, ...)
        !            89: 
        !            90: /*++
        !            91: 
        !            92: Routine Description:
        !            93: 
        !            94:     This function is used to generate a popup with some kind of
        !            95:     warning message inside.
        !            96: 
        !            97: Arguments:
        !            98: 
        !            99:     Same as printf.
        !           100: 
        !           101: Return Value:
        !           102: 
        !           103:     None.
        !           104: 
        !           105: --*/
        !           106: 
        !           107: {
        !           108:     char      vbuf[1024];
        !           109:     char      buf[1024];
        !           110:     char      szErrorCode[10];
        !           111:     DWORD     dwCount;
        !           112:     DWORD     dwArgs[4];
        !           113:     va_list   arg_ptr;
        !           114: 
        !           115:     va_start(arg_ptr, format);
        !           116:     _vsnprintf(vbuf, sizeof(vbuf), format, arg_ptr);
        !           117:     wsprintf( szErrorCode, "%d", GetLastError() );
        !           118:     dwArgs[0] = (DWORD)vbuf;
        !           119:     dwArgs[1] = (DWORD)szErrorCode;
        !           120:     dwCount = FormatMessage(
        !           121:                 FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY,
        !           122:                 NULL,
        !           123:                 MSG_FATAL_ERROR,
        !           124:                 0, // GetUserDefaultLangID(),
        !           125:                 buf,
        !           126:                 sizeof(buf),
        !           127:                 (va_list*)dwArgs
        !           128:                 );
        !           129:     Assert( dwCount != 0 );
        !           130:     MessageBox( NULL,
        !           131:                 buf,
        !           132:                 LoadRcString( IDS_NONFATAL_ERROR ),
        !           133:                 MB_SETFOREGROUND | MB_OK
        !           134:               );
        !           135: }
        !           136: 
        !           137: void
        !           138: dprintf(char *format, ...)
        !           139: 
        !           140: /*++
        !           141: 
        !           142: Routine Description:
        !           143: 
        !           144:     This function is a var-args version of OutputDebugString.
        !           145: 
        !           146: Arguments:
        !           147: 
        !           148:     Same as printf.
        !           149: 
        !           150: Return Value:
        !           151: 
        !           152:     None.
        !           153: 
        !           154: --*/
        !           155: 
        !           156: {
        !           157:     char    buf[1024];
        !           158: 
        !           159:     va_list arg_ptr;
        !           160:     va_start(arg_ptr, format);
        !           161:     _vsnprintf(buf, sizeof(buf), format, arg_ptr);
        !           162:     OutputDebugString( buf );
        !           163:     return;
        !           164: }
        !           165: 
        !           166: BOOL CALLBACK
        !           167: AssertDialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        !           168: 
        !           169: /*++
        !           170: 
        !           171: Routine Description:
        !           172: 
        !           173:     This is the dialog procedure for the assert dialog box.  Normally
        !           174:     an assertion box is simply a message box but in this case a Help
        !           175:     button is desired so a dialog box is used.
        !           176: 
        !           177: Arguments:
        !           178: 
        !           179:     hDlg       - window handle to the dialog box
        !           180:     message    - message number
        !           181:     wParam     - first message parameter
        !           182:     lParam     - second message parameter
        !           183: 
        !           184: Return Value:
        !           185: 
        !           186:     TRUE       - did not process the message
        !           187:     FALSE      - did process the message
        !           188: 
        !           189: --*/
        !           190: 
        !           191: {
        !           192:     char     *p;
        !           193:     HICON    hIcon;
        !           194:     char     szHelpFileName[MAX_PATH];
        !           195: 
        !           196:     switch (message) {
        !           197:         case WM_INITDIALOG:
        !           198:             //
        !           199:             // lParam comes in as a pointer to a buffer containing
        !           200:             // 2 null terminated strings
        !           201:             //
        !           202: 
        !           203:             //
        !           204:             // get the assertion text
        !           205:             //
        !           206:             p = (char *) lParam;
        !           207:             SetDlgItemText( hDlg, ID_ASSERT_TEXT, p );
        !           208: 
        !           209:             //
        !           210:             // get the app name and use it as the title
        !           211:             //
        !           212:             p += (strlen(p)+1);
        !           213:             SetWindowText( hDlg, p );
        !           214: 
        !           215:             //
        !           216:             // set the icon
        !           217:             //
        !           218:             hIcon = LoadIcon( NULL, IDI_HAND );
        !           219:             SendMessage( GetDlgItem( hDlg, ID_ASSERT_ICON ), STM_SETICON, (WPARAM) hIcon, 0 );
        !           220:             break;
        !           221: 
        !           222:         case WM_COMMAND:
        !           223:             switch (wParam) {
        !           224:                 case IDABORT:
        !           225:                     //
        !           226:                     // end the dialog and say why
        !           227:                     //
        !           228:                     EndDialog( hDlg, IDABORT );
        !           229:                     break;
        !           230: 
        !           231:                 case IDRETRY:
        !           232:                     //
        !           233:                     // end the dialog and say why
        !           234:                     //
        !           235:                     EndDialog( hDlg, IDRETRY );
        !           236:                     break;
        !           237: 
        !           238:                 case IDIGNORE:
        !           239:                     //
        !           240:                     // end the dialog and say why
        !           241:                     //
        !           242:                     EndDialog( hDlg, IDIGNORE );
        !           243:                     break;
        !           244: 
        !           245:                 case ID_HELP:
        !           246:                     //
        !           247:                     // get the help file name
        !           248:                     //
        !           249:                     GetHelpFileName( szHelpFileName, sizeof(szHelpFileName) );
        !           250: 
        !           251:                     //
        !           252:                     // call winhelp
        !           253:                     //
        !           254:                     WinHelp( hDlg, szHelpFileName, HELP_CONTEXT, IDH_ASSERT );
        !           255:                     break;
        !           256:             }
        !           257:             break;
        !           258:     }
        !           259: 
        !           260:     return FALSE;
        !           261: }
        !           262: 
        !           263: void
        !           264: AssertError(
        !           265:     char   *Expression,
        !           266:     char   *File,
        !           267:     DWORD  LineNumber
        !           268:     )
        !           269: 
        !           270: /*++
        !           271: 
        !           272: Routine Description:
        !           273: 
        !           274:     Display an assertion failure message box which gives the user a choice
        !           275:     as to whether the process should be aborted, the assertion ignored or
        !           276:     a break exception generated.
        !           277: 
        !           278: Arguments:
        !           279: 
        !           280:     Expression  - Supplies a string representation of the failed assertion.
        !           281:     File        - Supplies a pointer to the file name where the assertion
        !           282:                   failed.
        !           283:     LineNumber  - Supplies the line number in the file where the assertion
        !           284:                   failed.
        !           285: 
        !           286: Return Value:
        !           287: 
        !           288:     None.
        !           289: 
        !           290: --*/
        !           291: 
        !           292: {
        !           293:     int        Response;
        !           294:     char       ModuleBuffer[ MAX_PATH ];
        !           295:     DWORD      Length;
        !           296:     char       Buffer[ 4096 ];
        !           297:     DWORD      Args[ ] = {
        !           298:         ( DWORD ) Expression,
        !           299:         ( DWORD ) GetLastError( ),
        !           300:         ( DWORD ) File,
        !           301:         ( DWORD ) LineNumber
        !           302:     };
        !           303: 
        !           304:     //
        !           305:     // Format the assertion string that describes the failure.
        !           306:     //
        !           307:     FormatMessage(
        !           308:                   FORMAT_MESSAGE_ARGUMENT_ARRAY
        !           309:                 | FORMAT_MESSAGE_FROM_STRING
        !           310:                 & ~FORMAT_MESSAGE_FROM_HMODULE,
        !           311:                 ( LPVOID ) "Assertion Failed : %1!s! (%2!d!)\nin file %3!hs! at line %4!d!\n",
        !           312:                 0,
        !           313:                 0, // GetUserDefaultLangID(),
        !           314:                 Buffer,
        !           315:                 sizeof( Buffer ),
        !           316:                 (va_list*)Args
        !           317:                 );
        !           318: 
        !           319: 
        !           320:     //
        !           321:     // Get the asserting module's file name.
        !           322:     //
        !           323:     Length = GetModuleFileName(
        !           324:                     NULL,
        !           325:                     ModuleBuffer,
        !           326:                     sizeof( ModuleBuffer )
        !           327:                     );
        !           328: 
        !           329:     //
        !           330:     // put it at the end of the buffer
        !           331:     //
        !           332:     strcpy( &Buffer[strlen(Buffer)+1], ModuleBuffer );
        !           333: 
        !           334:     Response = DialogBoxParam( GetModuleHandle( NULL ),
        !           335:                             MAKEINTRESOURCE( ASSERTDIALOG ),
        !           336:                             0,
        !           337:                             AssertDialogProc,
        !           338:                             (LPARAM) Buffer
        !           339:                           );
        !           340: 
        !           341:     switch( Response ) {
        !           342:         case IDABORT:
        !           343:             //
        !           344:             // Terminate the process.
        !           345:             //
        !           346:             ExitProcess( (UINT) -1 );
        !           347:             break;
        !           348: 
        !           349:         case IDIGNORE:
        !           350:             //
        !           351:             // Ignore the failed assertion.
        !           352:             //
        !           353:             break;
        !           354: 
        !           355:         case IDRETRY:
        !           356:             //
        !           357:             // Break into a debugger.
        !           358:             //
        !           359:             DebugBreak( );
        !           360:             break;
        !           361: 
        !           362:         default:
        !           363:             //
        !           364:             // Break into a debugger because of a catastrophic failure.
        !           365:             //
        !           366:             DebugBreak( );
        !           367:             break;
        !           368:     }
        !           369: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.