From 06177f8ecab52c88d2e640f1737175863d154690 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 22 Feb 2018 22:51:21 +0000
Subject: [PATCH] When configuring a message base (changing values in the
 "status header'), allow the "last_msg" value to be changed as well. When
 dumping a msgbase index, show 'M' for messages (not blank). When running
 maintenance, read the entire index in one shot. Don't display progress
 (percentage counting) during maintenance (just slows it down). When reading
 messages, get the plain-text version (MIME decode if needed). When a message
 base fails to open, continue processing additional message bases if specified
 on the command-line.

---
 src/sbbs3/smbutil.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index 09d872e755..e3de8b39f0 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -414,8 +414,10 @@ void showstatus(void)
 /****************************************************************************/
 void config(void)
 {
+	char str[128];
 	char max_msgs[128],max_crcs[128],max_age[128],header_offset[128],attr[128];
 	int i;
+	uint32_t last_msg = 0;
 
 	i=smb_locksmbhdr(&smb);
 	if(i) {
@@ -430,6 +432,11 @@ void config(void)
 			,beep,i,smb.last_error);
 		return; 
 	}
+	printf("Last Message  =%-6"PRIu32" New Value (CR=No Change): "
+		,smb.status.last_msg);
+	gets(str);
+	if(isdigit(str[0]))
+		last_msg = atol(str);
 	printf("Header offset =%-5"PRIu32"  New value (CR=No Change): "
 		,smb.status.header_offset);
 	gets(header_offset);
@@ -458,6 +465,8 @@ void config(void)
 		smb_unlocksmbhdr(&smb);
 		return; 
 	}
+	if(last_msg != 0)
+		smb.status.last_msg = last_msg;
 	if(isdigit(max_msgs[0]))
 		smb.status.max_msgs=atol(max_msgs);
 	if(isdigit(max_crcs[0]))
@@ -567,7 +576,7 @@ void dumpindex(ulong start, ulong count)
 			printf("V  %04hX  %-10"PRIu32, idx.votes,idx.remsg);
 		else
 			printf("%c  %04hX  %04hX  %04X"
-				,(idx.attr&MSG_POLL_VOTE_MASK) == MSG_POLL_CLOSURE ? 'C' : (idx.attr&MSG_POLL ? 'P':'M')
+				,(idx.attr&MSG_POLL_VOTE_MASK) == MSG_POLL_CLOSURE ? 'C' : (idx.attr&MSG_POLL ? 'P':' ')
 				,idx.from, idx.to, idx.subj);
 		printf("  %04X  %06X  %s\n", idx.attr, idx.offset, my_timestr(idx.time));
 		l++; 
@@ -726,17 +735,13 @@ void maint(void)
 		return; 
 	}
 	fseek(smb.sid_fp,0L,SEEK_SET);
-	for(l=0;l<smb.status.total_msgs;l++) {
-		printf("%lu of %"PRIu32"\r"
-			,l+1,smb.status.total_msgs);
-		if(!fread(&idx[l],1,sizeof(idxrec_t),smb.sid_fp))
-			break; 
-	}
-	printf("\nDone.\n\n");
+	l = fread(idx, sizeof(idxrec_t), smb.status.total_msgs, smb.sid_fp);
+	l /= sizeof(idxrec_t);
 
+	printf("\nDone.\n\n");
 	printf("Scanning for pre-flagged messages...\n");
 	for(m=0;m<l;m++) {
-		printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
+//		printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
 		if(idx[m].attr&MSG_DELETE)
 			flagged++; 
 	}
@@ -746,7 +751,7 @@ void maint(void)
 		printf("Scanning for messages more than %u days old...\n"
 			,smb.status.max_age);
 		for(m=f=0;m<l;m++) {
-			printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
+//			printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
 			if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
 				continue;
 			if((ulong)now>idx[m].time && (now-idx[m].time)/(24L*60L*60L)
@@ -761,7 +766,7 @@ void maint(void)
 
 	printf("Scanning for read messages to be killed...\n");
 	for(m=f=0;m<l;m++) {
-		printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
+//		printf("\r%2lu%%",m ? (long)(100.0/((float)l/m)) : 0);
 		if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
 			continue;
 		if((idx[m].attr&(MSG_READ|MSG_KILLREAD))==(MSG_READ|MSG_KILLREAD)) {
@@ -1399,7 +1404,7 @@ void readmsgs(ulong start)
 
 			printf("\n\n");
 
-			if((inbuf=smb_getmsgtxt(&smb,&msg,GETMSGTXT_ALL))!=NULL) {
+			if((inbuf=smb_getmsgtxt(&smb,&msg,GETMSGTXT_ALL|GETMSGTXT_PLAIN))!=NULL) {
 				printf("%s",inbuf);
 				free(inbuf); 
 			}
@@ -1678,7 +1683,7 @@ int main(int argc, char **argv)
 				if((i=smb_open(&smb))!=0) {
 					fprintf(errfp,"\n%s!Error %d (%s) opening %s message base\n"
 						,beep,i,smb.last_error,smb.file);
-					bail(1); 
+					continue; 
 				}
 				if(!filelength(fileno(smb.shd_fp))) {
 					if(!create) {
-- 
GitLab