From 5cb82e106124066155486e2bce3ecdd50266929c Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Mon, 3 May 2021 00:33:12 -0700
Subject: [PATCH] Previous file support from the [R]emove and [D]ownload
 commands.

More support for moving backwards through file searches/listing types.
---
 src/sbbs3/listfile.cpp | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp
index b8a7eb4d82..1918bd1aa9 100644
--- a/src/sbbs3/listfile.cpp
+++ b/src/sbbs3/listfile.cpp
@@ -811,7 +811,9 @@ int sbbs_t::listfileinfo(uint dirnum, const char *filespec, long mode)
 			|| mode==FI_OFFLINE) {
 			SYNC;
 //			CRLF;
-			SAFECOPY(str, "VEQRNP\b-\r");
+			SAFECOPY(str, "VEQRN\r");
+			if(m > 1)
+				SAFECAT(str, "P-\b");
 			if(dir_op(dirnum)) {
 				mnemonics(text[SysopRemoveFilePrompt]);
 				SAFECAT(str,"FMC");
@@ -1049,7 +1051,9 @@ int sbbs_t::listfileinfo(uint dirnum, const char *filespec, long mode)
 			xfer_prot_menu(XFER_DOWNLOAD);
 			SYNC;
 			mnemonics(text[ProtocolBatchQuitOrNext]);
-			sprintf(str,"B%cN\r",text[YNQP][2]);
+			SAFEPRINTF(str,"B%cN\r",text[YNQP][2]);
+			if(m > 1)
+				SAFECAT(str, "\b-");
 			for(i=0;i<cfg.total_prots;i++)
 				if(cfg.prot[i]->dlcmd[0]
 					&& chk_ar(cfg.prot[i]->ar,&useron,&client)) {
@@ -1066,6 +1070,12 @@ int sbbs_t::listfileinfo(uint dirnum, const char *filespec, long mode)
 					break; 
 				} 
 			}
+			else if(ch == '\b' || ch == '-') { /* previous */
+				m--;
+				if(m)
+					m--;
+				continue;
+			}
 			else if(ch!=CR && ch!='N') {
 				for(i=0;i<cfg.total_prots;i++)
 					if(cfg.prot[i]->dlcmd[0] && cfg.prot[i]->mnemonic==ch
-- 
GitLab