From b5d0be13a7885601da54b7d94ee17cd23f30f561 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 16 Aug 2002 23:43:15 +0000
Subject: [PATCH] smbutil now relies on functions from str_util.c and
 date_str.c (e.g. truncsp, zonestr, faddrtoa, and the new subject_crc
 function).

---
 src/sbbs3/GNUmakefile |   3 +-
 src/sbbs3/Makefile    |   2 +-
 src/sbbs3/smbutil.c   | 157 ++++--------------------------------------
 3 files changed, 15 insertions(+), 147 deletions(-)

diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile
index fd2b6ab649..5f83645ddf 100644
--- a/src/sbbs3/GNUmakefile
+++ b/src/sbbs3/GNUmakefile
@@ -215,7 +215,8 @@ $(CHKSMB): $(EXEODIR)/chksmb.o $(SMBLIB) $(EXEODIR)/conwrap.o $(EXEODIR)/dirwrap
 
 # SMB Utility
 $(SMBUTIL): $(EXEODIR)/smbutil.o $(SMBLIB) $(EXEODIR)/conwrap.o $(EXEODIR)/dirwrap.o \
-	$(EXEODIR)/genwrap.o $(EXEODIR)/smbtxt.o $(EXEODIR)/crc32.o $(EXEODIR)/lzh.o 
+	$(EXEODIR)/genwrap.o $(EXEODIR)/smbtxt.o $(EXEODIR)/crc32.o $(EXEODIR)/lzh.o \
+	$(EXEODIR)/date_str.o $(EXEODIR)/str_util.o
 	@echo Linking $@
 	@$(CC) -o $@ $^
 
diff --git a/src/sbbs3/Makefile b/src/sbbs3/Makefile
index 4833fa162a..81ee8e3d2c 100644
--- a/src/sbbs3/Makefile
+++ b/src/sbbs3/Makefile
@@ -142,7 +142,7 @@ $(CHKSMB): chksmb.c $(SMBLIB) $(XPDEV)dirwrap.c
 	@$(CC) $(CFLAGS) -n$(EXEODIR) $** 
 
 # SMB Utility
-$(SMBUTIL): smbutil.c smbtxt.c crc32.c lzh.c $(SMBLIB) $(XPDEV)dirwrap.c
+$(SMBUTIL): smbutil.c smbtxt.c crc32.c lzh.c date_str.c str_util.c $(SMBLIB) $(XPDEV)dirwrap.c
 	@echo Creating $@
 	@$(CC) $(CFLAGS) -n$(EXEODIR) $** 
 
diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index 9860709006..18c1be5b2a 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -57,6 +57,7 @@
 #include <string.h>		/* strrchr */
 #include <ctype.h>		/* toupper */
 
+#include "sbbs.h"
 #include "genwrap.h"	/* stricmp */
 #include "dirwrap.h"	/* fexist */
 #include "conwrap.h"	/* getch */
@@ -110,62 +111,6 @@ char *usage=
 "       z[n] = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)\n"
 ;
 
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-	for (i=0; i<8; i++) {
-		cy=*rcrc & 0x8000;
-		*rcrc<<=1;
-		if (nch & 0x80) *rcrc |= 1;
-		nch<<=1;
-		if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns CRC-16 of string (not including terminating NULL)				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-	ucrc16(0,&crc);
-	while(str[i])
-		ucrc16(str[i++],&crc);
-	ucrc16(0,&crc);
-	ucrc16(0,&crc);
-	return(crc);
-}
-
-void remove_re(char *str)
-{
-	while(!strnicmp(str,"RE:",3)) {
-		strcpy(str,str+3);
-		while(str[0]==SP)
-			strcpy(str,str+1); 
-	}
-}
-
-/************************************************/
-/* Truncates white-space chars off end of 'str' */
-/************************************************/
-static void truncsp(char *str)
-{
-	uint c;
-
-	c=strlen(str);
-	while(c && (uchar)str[c-1]<=' ') c--;
-	str[c]=0;
-}
-
 /*****************************************************************************/
 // Expands Unix LF to CRLF
 /*****************************************************************************/
@@ -366,9 +311,7 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 		smb_freemsgdat(&smb,offset,length,1);
 		exit(1); 
 	}
-	remove_re(str);
-	strlwr(str);
-	msg.idx.subj=crc16(str);
+	msg.idx.subj=subject_crc(str);
 
 	i=smb_dfield(&msg,TEXT_BODY,length);
 	if(i) {
@@ -507,21 +450,6 @@ void listmsgs(ulong start, ulong count)
 		l++; }
 }
 
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(fidoaddr_t addr)
-{
-	static char str[25];
-	char point[25];
-
-	sprintf(str,"%hu:%hu/%hu",addr.zone,addr.net,addr.node);
-	if(addr.point) {
-		sprintf(point,".%u",addr.point);
-		strcat(str,point); }
-	return(str);
-}
-
 char *binstr(uchar *buf, ushort length)
 {
 	static char str[512];
@@ -549,7 +477,7 @@ char *binstr(uchar *buf, ushort length)
 /* Generates a 24 character ASCII string that represents the time_t pointer */
 /* Used as a replacement for ctime()                                        */
 /****************************************************************************/
-char *timestr(time_t *intime)
+char *my_timestr(time_t *intime)
 {
     static char str[256];
     char mer[3],hour;
@@ -577,64 +505,6 @@ char *timestr(time_t *intime)
 	return(str);
 }
 
-
-/****************************************************************************/
-/* Converts when_t.zone into ASCII format									*/
-/****************************************************************************/
-char *zonestr(short zone)
-{
-	static char str[32];
-
-	switch((ushort)zone) {
-		case 0: 	return("UTC");
-		case AST:	return("AST");
-		case EST:	return("EST");
-		case CST:	return("CST");
-		case MST:	return("MST");
-		case PST:	return("PST");
-		case YST:	return("YST");
-		case HST:	return("HST");
-		case BST:	return("BST");
-		case ADT:	return("ADT");
-		case EDT:	return("EDT");
-		case CDT:	return("CDT");
-		case MDT:	return("MDT");
-		case PDT:	return("PDT");
-		case YDT:	return("YDT");
-		case HDT:	return("HDT");
-		case BDT:	return("BDT");
-		case MID:	return("MID");
-		case VAN:	return("VAN");
-		case EDM:	return("EDM");
-		case WIN:	return("WIN");
-		case BOG:	return("BOG");
-		case CAR:	return("CAR");
-		case RIO:	return("RIO");
-		case FER:	return("FER");
-		case AZO:	return("AZO");
-		case LON:	return("LON");
-		case BER:	return("BER");
-		case ATH:	return("ATH");
-		case MOS:	return("MOS");
-		case DUB:	return("DUB");
-		case KAB:	return("KAB");
-		case KAR:	return("KAR");
-		case BOM:	return("BOM");
-		case KAT:	return("KAT");
-		case DHA:	return("DHA");
-		case BAN:	return("BAN");
-		case HON:	return("HON");
-		case TOK:	return("TOK");
-		case SYD:	return("SYD");
-		case NOU:	return("NOU");
-		case WEL:	return("WEL");
-		}
-
-	sprintf(str,"%02d:%02u",zone/60,zone<0 ? (-zone)%60 : zone%60);
-	return(str);
-}
-			 
-
 /****************************************************************************/
 /* Displays message header information										*/
 /****************************************************************************/
@@ -663,10 +533,10 @@ void viewmsgs(ulong start, ulong count)
 			break; }
 
 		sprintf(when_written,"%.24s %s"
-			,timestr((time_t*)&msg.hdr.when_written.time)
+			,my_timestr((time_t*)&msg.hdr.when_written.time)
 			,zonestr(msg.hdr.when_written.zone));
 		sprintf(when_imported,"%.24s %s"
-			,timestr((time_t*)&msg.hdr.when_imported.time)
+			,my_timestr((time_t*)&msg.hdr.when_imported.time)
 			,zonestr(msg.hdr.when_imported.zone));
 
 		printf( "%-20.20s %s\n"
@@ -764,21 +634,21 @@ void viewmsgs(ulong start, ulong count)
 				   "from_net.addr        %s\n"
 				,msg.from_net.type
 				,msg.from_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.from_net.addr) : (char*)msg.from_net.addr);
+				? faddrtoa((fidoaddr_t *)msg.from_net.addr,NULL) : (char*)msg.from_net.addr);
 
 		if(msg.to_net.type)
 			printf("to_net.type          %02Xh\n"
 				   "to_net.addr          %s\n"
 				,msg.to_net.type
 				,msg.to_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : (char*)msg.to_net.addr);
+				? faddrtoa((fidoaddr_t *)msg.to_net.addr,NULL) : (char*)msg.to_net.addr);
 
 		if(msg.replyto_net.type)
 			printf("replyto_net.type     %02Xh\n"
 				   "replyto_net.addr     %s\n"
 				,msg.replyto_net.type
 				,msg.replyto_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.replyto_net.addr)
+				? faddrtoa((fidoaddr_t *)msg.replyto_net.addr,NULL)
 					: (char*)msg.replyto_net.addr);
 
 		printf("from_agent           %02Xh\n"
@@ -1216,10 +1086,7 @@ void packmsgs(ulong packable)
 		msg.idx.number=msg.hdr.number;
 		msg.idx.attr=msg.hdr.attr;
 		msg.idx.time=msg.hdr.when_imported.time;
-		SAFECOPY(str,msg.subj);
-		strlwr(str);
-		remove_re(str);
-		msg.idx.subj=crc16(str);
+		msg.idx.subj=subject_crc(msg.subj);
 		if(smb.status.attr&SMB_EMAIL) {
 			if(msg.to_ext)
 				msg.idx.to=atoi(msg.to_ext);
@@ -1334,14 +1201,14 @@ void readmsgs(ulong start)
 			printf("To   : %s",msg.to);
 			if(msg.to_net.type)
 				printf(" (%s)",msg.to_net.type==NET_FIDO
-					? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : (char*)msg.to_net.addr);
+					? faddrtoa((fidoaddr_t *)msg.to_net.addr,NULL) : (char*)msg.to_net.addr);
 			printf("\nFrom : %s",msg.from);
 			if(msg.from_net.type)
 				printf(" (%s)",msg.from_net.type==NET_FIDO
-					? faddrtoa(*(fidoaddr_t *)msg.from_net.addr)
+					? faddrtoa((fidoaddr_t *)msg.from_net.addr,NULL)
 						: (char*)msg.from_net.addr);
 			printf("\nDate : %.24s %s"
-				,timestr((time_t*)&msg.hdr.when_written.time)
+				,my_timestr((time_t*)&msg.hdr.when_written.time)
 				,zonestr(msg.hdr.when_written.zone));
 
 			printf("\n\n");
-- 
GitLab