mame/src/emu/dipty.cpp
Vas Crabb 42fbb9c396 Make osd_file a polymorphic class that's held with smart pointers
Make avi_file a class that's held with smart pointers, encapsulate various AVI I/O structures
Make zip_file and _7z_file classes rather than having free functions everywhere
Hide zip/7z class implementation behind an interface, no longer need to call close() to send back to the cache
Don't dump as much crap in global namespace
Add solaris PTY implementation
Improve variable expansion for SDL OSD - supports ~/$FOO/${BAR} syntax
Rearrange stuff so the same things are in file module for all OSDs
Move file stuff into its own module

7z/zip open and destruct are still not thread-safe due to lack of interlocks around cache access
Directory functions still need to be moved to file module
SDL OSD may not initialise WinSock on Windows
2016-03-14 18:55:00 +11:00

80 lines
1.5 KiB
C++

// license:BSD-3-Clause
// copyright-holders:F.Ulivi
/***************************************************************************
dipty.h
Device PTY interface
***************************************************************************/
#include "emu.h"
#include "osdcore.h"
device_pty_interface::device_pty_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "pty")
, m_pty_master()
, m_slave_name()
, m_opened(false)
{
}
device_pty_interface::~device_pty_interface()
{
}
bool device_pty_interface::open()
{
if (!m_opened)
{
if (osd_file::openpty(m_pty_master, m_slave_name) == osd_file::error::NONE)
{
m_opened = true;
}
else
{
m_opened = false;
m_pty_master.reset();
}
}
return m_opened;
}
void device_pty_interface::close()
{
m_pty_master.reset();
m_opened = false;
}
bool device_pty_interface::is_open() const
{
return m_opened;
}
ssize_t device_pty_interface::read(UINT8 *rx_chars , size_t count) const
{
std::uint32_t actual_bytes;
if (m_opened && m_pty_master->read(rx_chars, 0, count, actual_bytes) == osd_file::error::NONE)
return actual_bytes;
else
return -1;
}
void device_pty_interface::write(UINT8 tx_char) const
{
std::uint32_t actual_bytes;
if (m_opened)
m_pty_master->write(&tx_char, 0, 1, actual_bytes);
}
bool device_pty_interface::is_slave_connected() const
{
// TODO: really check for slave status
return m_opened;
}
const char *device_pty_interface::slave_name() const
{
return m_slave_name.c_str();
}