status_t ScreenWindow::_WriteVesaModeFile(const screen_mode& mode) const { BPath path; status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path, true); if (status < B_OK) return status; path.Append("kernel/drivers"); status = create_directory(path.Path(), 0755); if (status < B_OK) return status; path.Append("vesa"); BFile file; status = file.SetTo(path.Path(), B_CREATE_FILE | B_WRITE_ONLY | B_ERASE_FILE); if (status < B_OK) return status; char buffer[256]; snprintf(buffer, sizeof(buffer), "mode %ld %ld %ld\n", mode.width, mode.height, mode.BitsPerPixel()); ssize_t bytesWritten = file.Write(buffer, strlen(buffer)); if (bytesWritten < B_OK) return bytesWritten; return B_OK; }
static void print_mode(const screen_mode& mode, bool shortOutput) { const char* format = shortOutput ? "%ld %ld %ld %g\n" : "%ld %ld, %ld bits, %g Hz\n"; printf(format, mode.width, mode.height, mode.BitsPerPixel(), mode.refresh); }
status_t ScreenMode::Get(screen_mode& mode, int32 workspace) const { display_mode displayMode; BScreen screen(fWindow); if (workspace == ~0) workspace = current_workspace(); if (screen.GetMode(workspace, &displayMode) != B_OK) return B_ERROR; mode.SetTo(displayMode); return B_OK; }
static void print_mode(const display_mode& displayMode, const screen_mode& mode) { const display_timing& timing = displayMode.timing; printf("%lu %u %u %u %u %u %u %u %u ", timing.pixel_clock / 1000, timing.h_display, timing.h_sync_start, timing.h_sync_end, timing.h_total, timing.v_display, timing.v_sync_start, timing.v_sync_end, timing.v_total); // TODO: more flags? if ((timing.flags & B_POSITIVE_HSYNC) != 0) printf(" +HSync"); if ((timing.flags & B_POSITIVE_VSYNC) != 0) printf(" +VSync"); if ((timing.flags & B_TIMING_INTERLACED) != 0) printf(" Interlace"); printf(" %lu\n", mode.BitsPerPixel()); }