diff --git a/src/cc/cclib.cpp b/src/cc/cclib.cpp index 549db5848..6d1f1a2fb 100644 --- a/src/cc/cclib.cpp +++ b/src/cc/cclib.cpp @@ -58,9 +58,10 @@ CClib_methods[] = { (char *)"rogue", (char *)"txidinfo", (char *)"txid", 1, 1, 'I', EVAL_ROGUE }, { (char *)"rogue", (char *)"pending", (char *)"", 0, 0, 'P', EVAL_ROGUE }, { (char *)"rogue", (char *)"register", (char *)"txid [inventory]", 1, 2, 'R', EVAL_ROGUE }, - { (char *)"rogue", (char *)"progress", (char *)"txid fname", 2, 2, 'K', EVAL_ROGUE }, - { (char *)"rogue", (char *)"claimwin", (char *)"txid", 1, 1, 'W', EVAL_ROGUE }, - { (char *)"rogue", (char *)"extract", (char *)"txid item", 2, 2, 'X', EVAL_ROGUE }, + { (char *)"rogue", (char *)"progress", (char *)"regtxid fname", 2, 2, 'K', EVAL_ROGUE }, + { (char *)"rogue", (char *)"saveandquit", (char *)"ptxid", 1, 1, 'Q', EVAL_ROGUE }, + { (char *)"rogue", (char *)"claimwin", (char *)"ptxid", 1, 1, 'W', EVAL_ROGUE }, + { (char *)"rogue", (char *)"extract", (char *)"wtxid item", 2, 2, 'X', EVAL_ROGUE }, #else { (char *)"sudoku", (char *)"gen", (char *)"", 0, 0, 'G', EVAL_SUDOKU }, { (char *)"sudoku", (char *)"txidinfo", (char *)"txid", 1, 1, 'T', EVAL_SUDOKU }, @@ -83,6 +84,7 @@ UniValue rogue_pending(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); UniValue rogue_txidinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); UniValue rogue_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); UniValue rogue_progress(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); +UniValue rogue_saveandquit(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); UniValue rogue_claimwin(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); UniValue rogue_extract(uint64_t txfee,struct CCcontract_info *cp,cJSON *params); @@ -111,6 +113,8 @@ UniValue CClib_method(struct CCcontract_info *cp,char *method,cJSON *params) return(rogue_register(txfee,cp,params)); else if ( strcmp(method,"progress") == 0 ) return(rogue_progress(txfee,cp,params)); + else if ( strcmp(method,"saveandquit") == 0 ) + return(rogue_saveandquit(txfee,cp,params)); else if ( strcmp(method,"claimwin") == 0 ) return(rogue_claimwin(txfee,cp,params)); else if ( strcmp(method,"extract") == 0 ) diff --git a/src/cc/rogue/command.c b/src/cc/rogue/command.c index fa10d2b3a..d6f834dbc 100644 --- a/src/cc/rogue/command.c +++ b/src/cc/rogue/command.c @@ -260,6 +260,8 @@ over: after = FALSE; q_comm = TRUE; quit(0); + if ( rs->needflush == 0 ) + rs->needflush = (uint32_t)time(NULL); q_comm = FALSE; when 'i': after = FALSE; inventory(rs,pack, 0); when 'I': after = FALSE; picky_inven(rs); diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index 010b66c9f..0a2fbbeb6 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -410,6 +410,8 @@ playit(struct rogue_state *rs) if ( flushkeystrokes(rs) == 0 ) rs->needflush = 0; } + if ( rs->didquit != 0 ) + my_exit(0); } } endit(0); @@ -425,36 +427,36 @@ quit(int sig) { struct rogue_state *rs = &globalR; int oy, ox; - + NOOP(sig); - + /* * Reset the signal in case we got here via an interrupt */ if (!q_comm) - mpos = 0; + mpos = 0; getyx(curscr, oy, ox); msg(rs,"really quit?"); if (readchar(rs) == 'y') { - signal(SIGINT, leave); - clear(); - mvprintw(LINES - 2, 0, "You quit with %d gold pieces", purse); - move(LINES - 1, 0); - refresh(); - score(purse, 1, 0); - my_exit(0); + signal(SIGINT, leave); + clear(); + mvprintw(LINES - 2, 0, "You quit with %d gold pieces", purse); + move(LINES - 1, 0); + refresh(); + score(purse, 1, 0); + rs->didquit = (uint32_t)time(NULL); } else { - move(0, 0); - clrtoeol(); - status(rs); - move(oy, ox); - refresh(); - mpos = 0; - count = 0; - to_death = FALSE; + move(0, 0); + clrtoeol(); + status(rs); + move(oy, ox); + refresh(); + mpos = 0; + count = 0; + to_death = FALSE; } } diff --git a/src/cc/rogue/rogue.h b/src/cc/rogue/rogue.h index 472b2755a..80200fb23 100644 --- a/src/cc/rogue/rogue.h +++ b/src/cc/rogue/rogue.h @@ -317,7 +317,7 @@ struct rogue_state { uint64_t seed; char *keystrokes; - uint32_t needflush,replaydone; + uint32_t needflush,replaydone,didquit; int32_t numkeys,ind,num,guiflag,counter; char buffered[512]; }; diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 763408258..8761ffc70 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -147,6 +147,12 @@ UniValue rogue_claimwin(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) return(result); } +UniValue rogue_saveandquit(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) +{ + UniValue result(UniValue::VOBJ); + return(result); +} + UniValue rogue_extract(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { UniValue result(UniValue::VOBJ);