diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 9b6ac3e33de1b23b2abce3bb517a1d9d1de3109d..85d2e26f4ca44bf012807c591e49252bedc07f91 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -600,6 +600,7 @@ public: char yes_key(void) { return toupper(*text[Yes]); } char no_key(void) { return toupper(*text[No]); } char quit_key(void) { return toupper(*text[Quit]); } + char* quit_key(char* str) { str[0] = quit_key(); str[1] = '\0'; return str; } char all_key(void) { return toupper(*text[All]); } char list_key(void) { return toupper(*text[List]); } char next_key(void) { return toupper(*text[Next]); } @@ -839,8 +840,8 @@ public: char cmdstr_output[512]{}; char* ultoac(uint32_t, char*, char sep=','); char* u64toac(uint64_t, char*, char sep=','); - int protnum(char prot); - const char* protname(char prot); + int protnum(char prot, enum XFER_TYPE xfer_type = XFER_DOWNLOAD); + const char* protname(char prot, enum XFER_TYPE xfer_type = XFER_DOWNLOAD); void subinfo(int subnum); void dirinfo(int dirnum); diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp index 9da3f697d6f74edc983e210f65bfd2d8017a0665..be469aad49114b757a586b0cbecd1e3555f8785e 100644 --- a/src/sbbs3/str.cpp +++ b/src/sbbs3/str.cpp @@ -1437,20 +1437,38 @@ char* sbbs_t::u64toac(uint64_t val, char* str, char sep) return ::u64toac(val, str, sep); } -int sbbs_t::protnum(char prot) +int sbbs_t::protnum(char prot, enum XFER_TYPE type) { int i; for(i = 0; i < cfg.total_prots; ++i) { - if(prot == cfg.prot[i]->mnemonic && chk_ar(cfg.prot[i]->ar, &useron, &client)) - break; + if(prot != cfg.prot[i]->mnemonic || !chk_ar(cfg.prot[i]->ar, &useron, &client)) + continue; + switch(type) { + case XFER_UPLOAD: + if(cfg.prot[i]->ulcmd[0]) + return i; + break; + case XFER_DOWNLOAD: + if(cfg.prot[i]->dlcmd[0]) + return i; + break; + case XFER_BATCH_UPLOAD: + if(cfg.prot[i]->batulcmd[0]) + return i; + break; + case XFER_BATCH_DOWNLOAD: + if(cfg.prot[i]->batdlcmd[0]) + return i; + break; + } } return i; } -const char* sbbs_t::protname(char prot) +const char* sbbs_t::protname(char prot, enum XFER_TYPE type) { - int i = protnum(prot); + int i = protnum(prot, type); if(i < cfg.total_prots) return cfg.prot[i]->name; return text[None];