#include "df/viewscreen_setupdwarfgamest.h" struct embark_profile_name_hook : df::viewscreen_setupdwarfgamest { typedef df::viewscreen_setupdwarfgamest interpose_base; DEFINE_VMETHOD_INTERPOSE( void, feed, ( std::set *input ) ) { int ch = -1; for( auto it = input->begin(); ch == -1 && it != input->end(); ++it ) { ch = Screen::keyToChar( *it ); } // Intercept all printable characters except space. // If space is intercepted the shift-space abort key will not work. if( in_save_profile && ch >= 33 && ch <= 126 ) { profile_name.push_back( ( char )ch ); } else { if( input->count( df::interface_key::LEAVESCREEN ) ) { input->insert( df::interface_key::SETUPGAME_SAVE_PROFILE_ABORT ); } INTERPOSE_NEXT( feed )( input ); } } }; IMPLEMENT_VMETHOD_INTERPOSE( embark_profile_name_hook, feed );