Allow using the special sequence {!more} in macros to disable -more- prompts while processing the macro expansion.
Fixed a couple of off-by-one errors in the level-map.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1557 c06c8d41-db1a-0410-9941-cceddc491573
JYCMD6WMNHXA53K4LLKVTNX6PLRLU25F6J2TYMPQXM2ENAE66NIAC
CJNZ5CQY3OZ42EAVJCHT34QU5YA5W2VPAZ5BPXVRG734FGLRROXAC
A3Q3DA3ZMEA3HZQ544YSRK3GPLWGCU7MWR4JLTXULEP2O2ECLKOQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC
GCIZIUXO5TYROKDUYB3HAY7H7MRDTJNM7HR7DGSH7KXDIZC2LCDAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
ASFH3NFXSJ6AWVLIBJNTIC35HCOSHY42YQG2ELGPEYAULZUIRRRQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
YHSVOROKPYS33Y4RYZRVZTE3G5LXOFX52HEDNLV6HIXOJYNOKH3QC
if (Options.tutorial_left)
message_out(crawl_view.msgsz.y - 1,
LIGHTGREY,
"--more-- "
"Press Ctrl-P to reread old messages",
2, false);
else
message_out(crawl_view.msgsz.y - 1,
LIGHTGREY, "--more--", 2, false);
do
keypress = getch();
while (keypress != ' ' && keypress != '\r' && keypress != '\n');
if (Options.tutorial_left)
message_out(crawl_view.msgsz.y - 1,
LIGHTGREY,
"--more-- "
"Press Ctrl-P to reread old messages",
2, false);
else
message_out(crawl_view.msgsz.y - 1,
LIGHTGREY, "--more--", 2, false);
if (c == '}') {
v.push_back(num);
state = 0;
} else if (c >= '0' && c <= '9') {
num = num * 10 + c - '0';
}
// XXX Error handling
{
const std::string::size_type clb = s.find('}', i);
if (clb == std::string::npos)
break;
const std::string arg = s.substr(i, clb - i);
if (!more_reset && (arg == "!more" || arg == "!m"))
{
more_reset = true;
v.push_back(KEY_MACRO_MORE_PROTECT);
}
else
{
const int key = read_key_code(arg);
if (key)
v.push_back(key);
}
state = 0;
i = clb;
for (keyseq::iterator i = actions.begin(); i != actions.end(); i++)
Buffer.push_back(*i);
keyseq act(actions.size());
bool need_more_reset = false;
for (keyseq::const_iterator i = actions.begin(); i != actions.end();
++i)
{
int key = *i;
if (key == KEY_MACRO_MORE_PROTECT)
{
key = KEY_MACRO_DISABLE_MORE;
need_more_reset = true;
}
act.push_back(key);
}
if (need_more_reset)
act.push_back(KEY_MACRO_ENABLE_MORE);
Buffer.insert( reverse? Buffer.begin() : Buffer.end(),
act.begin(), act.end() );
// Add macro to front:
for (keyseq::reverse_iterator k = result.rbegin(); k != result.rend(); k++)
Buffer.push_front(*k);
macro_buf_add(result, true);
bool is_synthetic_key(int key)
{
switch (key)
{
case KEY_MACRO_ENABLE_MORE:
case KEY_MACRO_DISABLE_MORE:
case KEY_MACRO_MORE_PROTECT:
return (true);
default:
return (false);
}
}