#include <algorithm>
#include <cinttypes>
#include <cstdio>
#include <iostream>
#include <string>
#include <unistd.h>
#include <kms++/kms++.h>
#include <kms++util/kms++util.h>
using namespace std;
using namespace kms;
static struct {
bool print_props;
bool print_modes;
bool print_list;
bool x_modeline;
} s_opts;
static string format_mode(const Videomode& m, unsigned idx)
{
string str;
str = sformat(" %2u ", idx);
if (s_opts.x_modeline) {
str += sformat("%12s %6u %4u %4u %4u %4u %4u %4u %4u %4u %2u %#x %#x",
m.name.c_str(),
m.clock,
m.hdisplay, m.hsync_start, m.hsync_end, m.htotal,
m.vdisplay, m.vsync_start, m.vsync_end, m.vtotal,
m.vrefresh,
m.flags,
m.type);
} else {
string h = sformat("%u/%u/%u/%u", m.hdisplay, m.hfp(), m.hsw(), m.hbp());
string v = sformat("%u/%u/%u/%u", m.vdisplay, m.vfp(), m.vsw(), m.vbp());
str += sformat("%-12s %7.3f %-16s %-16s %2u (%.2f) %#10x %#6x",
m.name.c_str(),
m.clock / 1000.0,
h.c_str(), v.c_str(),
m.vrefresh, m.calculated_vrefresh(),
m.flags,
m.type);
}
return str;
}
static string format_mode_short(const Videomode& m)
{
string h = sformat("%u/%u/%u/%u", m.hdisplay, m.hfp(), m.hsw(), m.hbp());
string v = sformat("%u/%u/%u/%u", m.vdisplay, m.vfp(), m.vsw(), m.vbp());
return sformat("%s %.3f %s %s %u (%.2f)",
m.name.c_str(),
m.clock / 1000.0,
h.c_str(), v.c_str(),
m.vrefresh, m.calculated_vrefresh());
}
static string format_connector(Connector& c)
{
string str;
str = sformat("Connector %u (%u) %s",
c.idx(), c.id(), c.fullname().c_str());
if (c.connected())
str += " (connected)";
else
str += " (disconnected)";
return str;
}
static string format_encoder(Encoder& e)
{
return sformat("Encoder %u (%u) %s",
e.idx(), e.id(), e.get_encoder_type().c_str());
}
static string format_crtc(Crtc& c)
{
string str;
|