FDE_CSSSYNTAXSTATUS CFDE_CSSSyntaxParser::DoSyntaxParse() { while (m_eStatus >= FDE_CSSSYNTAXSTATUS_None) { if (m_TextPlane.IsEOF()) { if (m_pStream == NULL) { if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue && m_TextData.GetLength() > 0) { SaveTextData(); return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue; } return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS; } FX_BOOL bEOS; int32_t iLen = m_TextPlane.LoadFromStream(m_pStream, m_iStreamPos, m_iPlaneSize, bEOS); m_iStreamPos = m_pStream->GetPosition(); if (iLen < 1) { if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue && m_TextData.GetLength() > 0) { SaveTextData(); return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue; } return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS; } } FX_WCHAR wch; while (!m_TextPlane.IsEOF()) { wch = m_TextPlane.GetChar(); switch (m_eMode) { case FDE_CSSSYNTAXMODE_RuleSet: switch (wch) { case '@': m_TextPlane.MoveNext(); SwitchMode(FDE_CSSSYNTAXMODE_AtRule); break; case '}': m_TextPlane.MoveNext(); if (RestoreMode()) { return FDE_CSSSYNTAXSTATUS_DeclClose; } else { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } break; case '/': if (m_TextPlane.GetNextChar() == '*') { m_ModeStack.Push(m_eMode); SwitchMode(FDE_CSSSYNTAXMODE_Comment); break; } default: if (wch <= ' ') { m_TextPlane.MoveNext(); } else if (FDE_IsSelectorStart(wch)) { SwitchMode(FDE_CSSSYNTAXMODE_Selector); return FDE_CSSSYNTAXSTATUS_StyleRule; } else { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } break; } break; case FDE_CSSSYNTAXMODE_Selector: switch (wch) { case ',': m_TextPlane.MoveNext(); SwitchMode(FDE_CSSSYNTAXMODE_Selector); if (m_iTextDatLen > 0) { return FDE_CSSSYNTAXSTATUS_Selector; } break; case '{': if (m_TextData.GetLength() > 0) { SaveTextData(); return FDE_CSSSYNTAXSTATUS_Selector; } else { m_TextPlane.MoveNext(); m_ModeStack.Push(FDE_CSSSYNTAXMODE_RuleSet); SwitchMode(FDE_CSSSYNTAXMODE_PropertyName); return FDE_CSSSYNTAXSTATUS_DeclOpen; } break; case '/': if (m_TextPlane.GetNextChar() == '*') { if (SwitchToComment() > 0) { return FDE_CSSSYNTAXSTATUS_Selector; } break; } default: AppendChar(wch); break; } break; case FDE_CSSSYNTAXMODE_PropertyName: switch (wch) { case ':': m_TextPlane.MoveNext(); SwitchMode(FDE_CSSSYNTAXMODE_PropertyValue); return FDE_CSSSYNTAXSTATUS_PropertyName; case '}': m_TextPlane.MoveNext(); if (RestoreMode()) { return FDE_CSSSYNTAXSTATUS_DeclClose; } else { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } break; case '/': if (m_TextPlane.GetNextChar() == '*') { if (SwitchToComment() > 0) { return FDE_CSSSYNTAXSTATUS_PropertyName; } break; } default: AppendChar(wch); break; } break; case FDE_CSSSYNTAXMODE_PropertyValue: switch (wch) { case ';': m_TextPlane.MoveNext(); case '}': SwitchMode(FDE_CSSSYNTAXMODE_PropertyName); return FDE_CSSSYNTAXSTATUS_PropertyValue; case '/': if (m_TextPlane.GetNextChar() == '*') { if (SwitchToComment() > 0) { return FDE_CSSSYNTAXSTATUS_PropertyValue; } break; } default: AppendChar(wch); break; } break; case FDE_CSSSYNTAXMODE_Comment: if (wch == '/' && m_TextData.GetLength() > 0 && m_TextData.GetAt(m_TextData.GetLength() - 1) == '*') { RestoreMode(); } else { m_TextData.AppendChar(wch); } m_TextPlane.MoveNext(); break; case FDE_CSSSYNTAXMODE_MediaType: switch (wch) { case ',': m_TextPlane.MoveNext(); SwitchMode(FDE_CSSSYNTAXMODE_MediaType); if (m_iTextDatLen > 0) { return FDE_CSSSYNTAXSTATUS_MediaType; } break; case '{': { FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_MediaRule) { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } if (m_TextData.GetLength() > 0) { SaveTextData(); return FDE_CSSSYNTAXSTATUS_MediaType; } else { m_TextPlane.MoveNext(); *pMode = FDE_CSSSYNTAXMODE_RuleSet; SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); return FDE_CSSSYNTAXSTATUS_DeclOpen; } } break; case ';': { FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } if (m_TextData.GetLength() > 0) { SaveTextData(); if (IsImportEnabled()) { return FDE_CSSSYNTAXSTATUS_MediaType; } } else { FX_BOOL bEnabled = IsImportEnabled(); m_TextPlane.MoveNext(); m_ModeStack.Pop(); SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); if (bEnabled) { DisableImport(); return FDE_CSSSYNTAXSTATUS_ImportClose; } } } break; case '/': if (m_TextPlane.GetNextChar() == '*') { if (SwitchToComment() > 0) { return FDE_CSSSYNTAXSTATUS_MediaType; } break; } default: AppendChar(wch); break; } break; case FDE_CSSSYNTAXMODE_URI: { FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; } if (wch <= ' ' || wch == ';') { int32_t iURIStart, iURILength = m_TextData.GetLength(); if (iURILength > 0 && FDE_ParseCSSURI(m_TextData.GetBuffer(), iURILength, iURIStart, iURILength)) { m_TextData.Subtract(iURIStart, iURILength); SwitchMode(FDE_CSSSYNTAXMODE_MediaType); if (IsImportEnabled()) { return FDE_CSSSYNTAXSTATUS_URI; } else { break; } } } AppendChar(wch); } break; case FDE_CSSSYNTAXMODE_AtRule: if (wch > ' ') { AppendChar(wch); } else { int32_t iLen = m_TextData.GetLength(); const FX_WCHAR* psz = m_TextData.GetBuffer(); if (FXSYS_wcsncmp(L"charset", psz, iLen) == 0) { SwitchMode(FDE_CSSSYNTAXMODE_Charset); } else if (FXSYS_wcsncmp(L"import", psz, iLen) == 0) { m_ModeStack.Push(FDE_CSSSYNTAXMODE_Import); SwitchMode(FDE_CSSSYNTAXMODE_URI); if (IsImportEnabled()) { return FDE_CSSSYNTAXSTATUS_ImportRule; } else { break; } } else if (FXSYS_wcsncmp(L"media", psz, iLen) == 0) { m_ModeStack.Push(FDE_CSSSYNTAXMODE_MediaRule); SwitchMode(FDE_CSSSYNTAXMODE_MediaType); return FDE_CSSSYNTAXSTATUS_MediaRule; } else if (FXSYS_wcsncmp(L"font-face", psz, iLen) == 0) { SwitchMode(FDE_CSSSYNTAXMODE_Selector); return FDE_CSSSYNTAXSTATUS_FontFaceRule; } else if (FXSYS_wcsncmp(L"page", psz, iLen) == 0) { SwitchMode(FDE_CSSSYNTAXMODE_Selector); return FDE_CSSSYNTAXSTATUS_PageRule; } else { SwitchMode(FDE_CSSSYNTAXMODE_UnknownRule); } } break; case FDE_CSSSYNTAXMODE_Charset: if (wch == ';') { m_TextPlane.MoveNext(); SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); if (IsCharsetEnabled()) { DisableCharset(); if (m_iTextDatLen > 0) { if (m_pStream != NULL) { FX_WORD wCodePage = FX_GetCodePageFormStringW( m_TextData.GetBuffer(), m_iTextDatLen); if (wCodePage < 0xFFFF && m_pStream->GetCodePage() != wCodePage) { m_pStream->SetCodePage(wCodePage); } } return FDE_CSSSYNTAXSTATUS_Charset; } } } else { AppendChar(wch); } break; case FDE_CSSSYNTAXMODE_UnknownRule: if (wch == ';') { SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); } m_TextPlane.MoveNext(); break; default: FXSYS_assert(FALSE); break; } } } return m_eStatus; }
// // TDS 4.2.6 // EFI_STATUS BBTestSetCursorPositionConformanceAutoTest ( IN EFI_BB_TEST_PROTOCOL *This, IN VOID *ClientInterface, IN EFI_TEST_LEVEL TestLevel, IN EFI_HANDLE SupportHandle ) { EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; EFI_STATUS Status; EFI_SIMPLE_TEXT_OUT_PROTOCOL *SimpleOut; EFI_TEST_ASSERTION AssertionType; EFI_SIMPLE_TEXT_OUTPUT_MODE ModeOrg, ModeExpected; INT32 Mode; UINTN ColumnTest[10], RowTest[10]; UINTN Column, Row; UINTN Index; EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; EFI_DEVICE_PATH_PROTOCOL *DevicePath; CHAR16 *DevicePathStr; // // Get the Standard Library Interface // Status = gtBS->HandleProtocol ( SupportHandle, &gEfiStandardTestLibraryGuid, &StandardLib ); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.HandleProtocol - Handle standard test library", L"%a:%d:Status - %r", __FILE__, (UINTN)__LINE__, Status ); return Status; } SimpleOut = (EFI_SIMPLE_TEXT_OUT_PROTOCOL *)ClientInterface; // // Get Device Path of current Simple_Text_Output_Protocol // And out put device path or device name // Status = LocateDevicePathFromSimpleTextOut (SimpleOut, &DevicePath, StandardLib); if (Status == EFI_SUCCESS) { DevicePathStr = DevicePathToStr (DevicePath); if (DevicePathStr != NULL) { StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: %s", DevicePathStr ); Status = gtBS->FreePool (DevicePathStr); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.FreePool - Free pool", L"%a:%d:Status - %r", __FILE__, (UINTN)__LINE__, Status ); return Status; } DevicePathStr = NULL; } } else { Status = LocateGopFromSimpleTextOut (SimpleOut, &GraphicsOutput, StandardLib); if (EFI_ERROR(Status)) { // // Console Splitter/StdErr // StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: ConsoleSplitter/StdErr" ); } else { // // Console Splitter/ConOut // StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: ConsoleSplitter/ConOut" ); } } // // Backup Mode // BackupMode (SimpleOut, &ModeOrg); // // For each mode supported! // for (Mode = 0; Mode < SimpleOut->Mode->MaxMode; Mode++) { // // Change mode // Status = SimpleOut->SetMode (SimpleOut, Mode); if (EFI_ERROR(Status)) { AssertionType = EFI_TEST_ASSERTION_FAILED; StandardLib->RecordAssertion ( StandardLib, AssertionType, gTestGenericFailureGuid, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.SetMode - SetMode() with valid mode", L"%a:%d: Status = %r, Mode = %d", __FILE__, (UINTN)__LINE__, Status, Mode ); continue; } // // Get Mode's screen boundary // Status = SimpleOut->QueryMode (SimpleOut, Mode, &Column, &Row); if (EFI_ERROR(Status)) { AssertionType = EFI_TEST_ASSERTION_FAILED; StandardLib->RecordAssertion ( StandardLib, AssertionType, gTestGenericFailureGuid, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.QueryMode - QueryMode() with valid mode", L"%a:%d: Status = %r, Mode = %d", __FILE__, (UINTN)__LINE__, Status, Mode ); continue; } // // Prepare test data // ColumnTest[0] = Column; RowTest[0] = Row - 1; ColumnTest[1] = Column; RowTest[1] = 0; ColumnTest[2] = Column + 1; RowTest[2] = Row - 1; ColumnTest[3] = Column + 1; RowTest[3] = 0; ColumnTest[4] = 0; RowTest[4] = Row; ColumnTest[5] = Column - 1; RowTest[5] = Row; ColumnTest[6] = Column - 1; RowTest[6] = Row + 1; ColumnTest[7] = 0; RowTest[7] = Row + 1; for (Index = 0; Index < 8; Index++) { // // Prepare expected Mode after call Reset. // BackupMode (SimpleOut, &ModeExpected); // // Call SetAttribute with invalid Attribute // Status = SimpleOut->SetCursorPosition (SimpleOut, ColumnTest[Index], RowTest[Index]); // // Mode itegrity test // if (CheckModeIntegrity (&ModeExpected, SimpleOut->Mode) == FALSE) { AssertionType = EFI_TEST_ASSERTION_FAILED; } else { AssertionType = EFI_TEST_ASSERTION_PASSED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gSimpleTextOutputConformanceTestAssertionGuid009, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.SetCursorPosition - SetCursorPosition() with invalid position, mode position integrity", L"%a:%d: Mode=%d, Positoin=(%d x %d) Current: Cursor Position(%d x %d), Mode=%d, MaxMode=%d, Attribute=%d, CursorVisible=%d. "\ L" Expected:Cursor Position(%d x %d), Mode=%d, MaxMode=%d, Attribute=%d, CursorVisible=%d.", __FILE__, (UINTN)__LINE__, Mode, ColumnTest[Index], RowTest[Index], SimpleOut->Mode->CursorColumn, SimpleOut->Mode->CursorRow, SimpleOut->Mode->Mode, SimpleOut->Mode->MaxMode, SimpleOut->Mode->Attribute, SimpleOut->Mode->CursorVisible, ModeExpected.CursorColumn, ModeExpected.CursorRow, ModeExpected.Mode, ModeExpected.MaxMode, ModeExpected.Attribute, ModeExpected.CursorVisible ); // // Status check // if (Status!=EFI_UNSUPPORTED) { AssertionType = EFI_TEST_ASSERTION_FAILED; } else { AssertionType = EFI_TEST_ASSERTION_PASSED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gSimpleTextOutputConformanceTestAssertionGuid010, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.SetCursorPosition - SetCursorPositoin() with invalid Position", L"%a:%d: Status = %r, Mode = %d, Position = (%d x %d)", __FILE__, (UINTN)__LINE__, Status, Mode, ColumnTest[Index], RowTest[Index] ); } } return RestoreMode (SimpleOut, &ModeOrg, StandardLib); }
/**************************************************************************** REMARKS: Displays the menu of DDC tests and allows the DDC functionality to be tested. ****************************************************************************/ void DDCCITests( GC_devCtx *gc) { int choice,err = ddcOk; GA_SCIFuncs sci; /* For NonVGA controllers we need to run this test in graphics modes * to ensure that we are running on the proper controller hardware * that we support DPMS on (ie: the Windows driver hardware). */ SetGraphicsMode(gc); /* Allow a 1.5 second delay before trying to do DDC/CI communications */ _OS_delay(1500000); /* Initialise DDC/CI communications */ sci.dwSize = sizeof(sci); if (!GA_queryFunctions(dc,GA_GET_SCIFUNCS,&sci) || (err = MCS_begin(dc)) != ddcOk) { RestoreMode(gc); GC_clrscr(gc); if (err == ddcNotAvailable) GC_printf(gc,"DDC/CI not supported by monitor!\n\n"); else GC_printf(gc,"DDC monitor not connected!\n\n"); GC_printf(gc,"Press any key to continue"); EVT_getch(); return; } /* Display menu information on screen */ for (;;) { ClearPage(0); gmoveto(40,40); gprintf("DDC/CI support active:"); gnewline(); gprintf("Enter function to test:"); gprintf(" [0] - Is Control Supported"); gprintf(" [1] - Enable Control"); gprintf(" [2] - Get Control Value"); gprintf(" [3] - Set Control Value"); gprintf(" [4] - Reset Control"); gprintf(" [5] - Get Timing Report"); gprintf(" [6] - Save Current Settings"); gprintf(" [7] - Get Self Test Report"); gprintf(" [8] - Get Capabilities String"); gprintf(" [Esc] - Quit"); gprintf("Which: "); /* Loop around trying the different DPMS states */ choice = EVT_getch(); if (choice == 0x1B || tolower(choice) == 'q') break; gnewline(); switch (choice) { case '0': testMCS_isControlSupported(gc); break; case '1': testMCS_enableControl(gc); break; case '2': testMCS_getControlValue(gc); break; case '3': testMCS_setControlValue(gc); break; case '4': testMCS_resetControl(gc); break; case '5': testMCS_getTimingReport(); break; case '6': testMCS_saveCurrentSettings(); break; case '7': testMCS_getSelfTestReport(); break; case '8': testMCS_getCapabilitiesString(); break; } } /* Close the DDC/CI communications channel */ MCS_end(); /* Restore text mode for NonVGA controllers */ RestoreMode(gc); }
// // TDS 4.2.5 // EFI_STATUS BBTestSetAttributeConformanceAutoTest ( IN EFI_BB_TEST_PROTOCOL *This, IN VOID *ClientInterface, IN EFI_TEST_LEVEL TestLevel, IN EFI_HANDLE SupportHandle ) { // // This test case should be obsolete according to Spec changed. // EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; EFI_STATUS Status; EFI_SIMPLE_TEXT_OUT_PROTOCOL *SimpleOut; EFI_TEST_ASSERTION AssertionType; EFI_SIMPLE_TEXT_OUTPUT_MODE ModeOrg, ModeExpected; UINTN Attribute[10]; UINTN Index; EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; EFI_DEVICE_PATH_PROTOCOL *DevicePath; CHAR16 *DevicePathStr; // // Get the Standard Library Interface // Status = gtBS->HandleProtocol ( SupportHandle, &gEfiStandardTestLibraryGuid, &StandardLib ); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.HandleProtocol - Handle standard test library", L"%a:%d:Status - %r", __FILE__, (UINTN)__LINE__, Status ); return Status; } SimpleOut = (EFI_SIMPLE_TEXT_OUT_PROTOCOL *)ClientInterface; // // Get Device Path of current Simple_Text_Output_Protocol // And out put device path or device name // Status = LocateDevicePathFromSimpleTextOut (SimpleOut, &DevicePath, StandardLib); if (Status == EFI_SUCCESS) { DevicePathStr = DevicePathToStr (DevicePath); if (DevicePathStr != NULL) { StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: %s", DevicePathStr ); Status = gtBS->FreePool (DevicePathStr); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.FreePool - Free pool", L"%a:%d:Status - %r", __FILE__, (UINTN)__LINE__, Status ); return Status; } DevicePathStr = NULL; } } else { Status = LocateGopFromSimpleTextOut (SimpleOut, &GraphicsOutput, StandardLib); if (EFI_ERROR(Status)) { // // Console Splitter/StdErr // StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: ConsoleSplitter/StdErr" ); } else { // // Console Splitter/ConOut // StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_DEFAULT, L"\r\nCurrent Device: ConsoleSplitter/ConOut" ); } } // // Prepare test data // Attribute[0] = 0xB3; Attribute[1] = 0x80; Attribute[2] = 0x91; Attribute[3] = 0xA2; Attribute[4] = 65538; // // Backup Mode // BackupMode (SimpleOut, &ModeOrg); for (Index = 0; Index < 5; Index++) { // // Prepare expected Mode after call Reset. // BackupMode (SimpleOut, &ModeExpected); // // Call SetAttribute with invalid Attribute // Status = SimpleOut->SetAttribute (SimpleOut, Attribute[Index]); // // Mode itegrity test // ModeExpected.CursorColumn = SimpleOut->Mode->CursorColumn; ModeExpected.CursorRow = SimpleOut->Mode->CursorRow; if (CheckModeIntegrity (&ModeExpected, SimpleOut->Mode) == FALSE) { AssertionType = EFI_TEST_ASSERTION_FAILED; } else { AssertionType = EFI_TEST_ASSERTION_PASSED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gSimpleTextOutputConformanceTestAssertionGuid005, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.SetAttribute - SetAttribute() with invalid Attribute, mode position integrity", L"%a:%d: Attribute=%x Current: Cursor Position(%d x %d), Mode=%d, MaxMode=%d, Attribute=%d, CursorVisible=%d. "\ L" Expected:Cursor Position(%d x %d), Mode=%d, MaxMode=%d, Attribute=%d, CursorVisible=%d.", __FILE__, (UINTN)__LINE__, Attribute[Index], SimpleOut->Mode->CursorColumn, SimpleOut->Mode->CursorRow, SimpleOut->Mode->Mode, SimpleOut->Mode->MaxMode, SimpleOut->Mode->Attribute, SimpleOut->Mode->CursorVisible, ModeExpected.CursorColumn, ModeExpected.CursorRow, ModeExpected.Mode, ModeExpected.MaxMode, ModeExpected.Attribute, ModeExpected.CursorVisible ); // // Status check // if (Status!=EFI_UNSUPPORTED) { AssertionType = EFI_TEST_ASSERTION_FAILED; } else { AssertionType = EFI_TEST_ASSERTION_PASSED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gSimpleTextOutputConformanceTestAssertionGuid006, L"EFI_SIMPLE_TEXT_OUT_PROTOCOL.SetAttribute - SetAttribute() with invalid Attribute", L"%a:%d: Status = %r, Attribute = %x", __FILE__, (UINTN)__LINE__, Status, Attribute[Index] ); } return RestoreMode (SimpleOut, &ModeOrg, StandardLib); }