/** Return structured name of the current class/structure. */
CStrA DumpTarget::GetCurrentStructName()
{
    CStrA out;
    if (!m_cur_struct.empty()) {
        /* we are inside some named struct, return its name */
        out = m_cur_struct.top();
    }
    return out.Transfer();
}
/** Translate TileIndex into string. */
CStrA TileStr(TileIndex tile)
{
    CStrA out;
    out.Format("0x%04X (%d, %d)", tile, TileX(tile), TileY(tile));
    return out.Transfer();
}
/** Return name of given SignalType. */
CStrA ValueStr(SignalType t)
{
    CStrA out;
    out.Format("%d (%s)", t, ItemAtT(t, signal_type_names, "UNK"));
    return out.Transfer();
}
/** Return name of given DiagDirection. */
CStrA ValueStr(DiagDirection dd)
{
    CStrA out;
    out.Format("%d (%s)", dd, ItemAtT(dd, diagdir_names, "UNK", INVALID_DIAGDIR, "INV"));
    return out.Transfer();
}
/** Return composed name of given TrackdirBits. */
CStrA ValueStr(TrackdirBits td_bits)
{
    CStrA out;
    out.Format("%d (%s)", td_bits, ComposeNameT(td_bits, trackdir_names, "UNK", INVALID_TRACKDIR_BIT, "INV").Data());
    return out.Transfer();
}
/** Return name of given Trackdir. */
CStrA ValueStr(Trackdir td)
{
    CStrA out;
    out.Format("%d (%s)", td, ItemAtT(td, trackdir_names, "UNK", INVALID_TRACKDIR, "INV"));
    return out.Transfer();
}