From d7e382bb197f2611192a1912bac31b734aeb82af Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 10 Nov 2001 17:30:48 +0000
Subject: [PATCH] Added global log method. Moved "C" functions above JS
 functions.

---
 src/sbbs3/main.cpp | 329 ++++++++++++++++++++++++---------------------
 1 file changed, 177 insertions(+), 152 deletions(-)

diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 25d0708fa6..3b66b6a98f 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -84,9 +84,185 @@ static	char *	text[TOTAL_TEXT];
 static	WORD	first_node;
 static	WORD	last_node;
 
+extern "C" {
+
+static bbs_startup_t* startup=NULL;
+
+static void status(char* str)
+{
+	if(startup!=NULL && startup->status!=NULL)
+	    startup->status(str);
+}
+
+static void update_clients()
+{
+	if(startup!=NULL && startup->clients!=NULL)
+		startup->clients(node_threads_running);
+}
+
+void client_on(SOCKET sock, client_t* client)
+{
+	if(startup!=NULL && startup->client_on!=NULL)
+		startup->client_on(TRUE,sock,client);
+}
+
+static void client_off(SOCKET sock)
+{
+	if(startup!=NULL && startup->client_on!=NULL)
+		startup->client_on(FALSE,sock,NULL);
+}
+
+static void thread_up()
+{
+	if(startup!=NULL && startup->thread_up!=NULL)
+		startup->thread_up(TRUE);
+}
+
+static void thread_down()
+{
+	if(startup!=NULL && startup->thread_up!=NULL)
+		startup->thread_up(FALSE);
+}
+
+int lputs(char* str)
+{
+	if(startup==NULL || startup->lputs==NULL)
+    	return(0);
+    return(startup->lputs(str));
+}
+
+int lprintf(char *fmt, ...)
+{
+	va_list argptr;
+	char sbuf[1024];
+
+    if(startup==NULL || startup->lputs==NULL)
+        return(0);
+
+    va_start(argptr,fmt);
+    vsprintf(sbuf,fmt,argptr);
+    va_end(argptr);
+    return(startup->lputs(sbuf));
+}
+
+int eprintf(char *fmt, ...)
+{
+	va_list argptr;
+	char sbuf[1024];
+
+    if(startup==NULL || startup->event_log==NULL)
+        return(0);
+
+    va_start(argptr,fmt);
+    vsprintf(sbuf,fmt,argptr);
+    va_end(argptr);
+    return(startup->event_log(sbuf));
+}
+
+SOCKET open_socket(int type)
+{
+	SOCKET sock;
+
+	sock=socket(AF_INET, type, IPPROTO_IP);
+	if(sock!=INVALID_SOCKET && startup!=NULL && startup->socket_open!=NULL) 
+		startup->socket_open(TRUE);
+	return(sock);
+}
+
+int close_socket(SOCKET sock)
+{
+	int		result;
+
+	if(sock==INVALID_SOCKET || sock==0)
+		return(0);
+
+	shutdown(sock,SHUT_RDWR);	/* required on Unix */
+	result=closesocket(sock);
+	if(result==0 && startup!=NULL && startup->socket_open!=NULL) 
+		startup->socket_open(FALSE);
+	if(result!=0 && ERROR_VALUE!=ENOTSOCK)
+		lprintf("!ERROR %d closing socket %d",ERROR_VALUE,sock);
+	return(result);
+}
+
+/* Return true if connected, optionally sets *rd_p to true if read data available */
+BOOL socket_check(SOCKET sock, BOOL* rd_p)
+{
+	char	ch;
+	int		i,rd;
+	fd_set	socket_set;
+	struct	timeval tv;
+
+	if(rd_p!=NULL)
+		*rd_p=FALSE;
+
+	FD_ZERO(&socket_set);
+	FD_SET(sock,&socket_set);
+
+	tv.tv_sec=0;
+	tv.tv_usec=0;
+
+	i=select(sock+1,&socket_set,NULL,NULL,&tv);
+	if(i==SOCKET_ERROR)
+		return(FALSE);
+
+	if(i==0) 
+		return(TRUE);
+
+	rd=recv(sock,&ch,1,MSG_PEEK);
+	if(rd==1) {
+		if(rd_p!=NULL)
+			*rd_p=TRUE;
+		return(TRUE);
+	}
+
+	return(FALSE);
+}
+
+u_long resolve_ip(char *addr)
+{
+	HOSTENT*	host;
+	char*		p;
+
+	for(p=addr;*p;p++)
+		if(*p!='.' && !isdigit(*p))
+			break;
+	if(!(*p))
+		return(inet_addr(addr));
+	if ((host=gethostbyname(addr))==NULL) 
+		return(0);
+	return(*((ulong*)host->h_addr_list[0]));
+}
+
+} /* extern "C" */
+
 #ifdef JAVASCRIPT
 JSRuntime* js_runtime=NULL;
 
+static JSBool
+js_log(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+    uintN		i;
+    JSString *	str;
+	sbbs_t*		sbbs;
+
+	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
+		return(JS_FALSE);
+
+    for (i = 0; i < argc; i++) {
+		if((str=JS_ValueToString(cx, argv[i]))==NULL)
+		    return(JS_FALSE);
+		if(sbbs->online==ON_LOCAL) {
+			if(startup!=NULL && startup->event_log!=NULL)
+				startup->event_log(JS_GetStringBytes(str));
+		} else
+			lputs(JS_GetStringBytes(str));
+		}
+
+	*rval = JSVAL_VOID;
+    return(JS_TRUE);
+}
+
 static JSBool
 js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
@@ -224,6 +400,7 @@ js_prompt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 }
 
 static JSFunctionSpec js_global_functions[] = {
+	{"log",				js_log,				1},		/* Log a string */
     {"print",           js_print,           0},		/* Print a string, auto-crlf */
     {"printf",          js_printf,          1},		/* Print a formatted string */
 	{"alert",			js_alert,			1},		/* alert (ala client-side) */
@@ -395,158 +572,6 @@ static BOOL winsock_startup(void)
 
 #endif
 
-extern "C" {
-
-static bbs_startup_t* startup=NULL;
-
-static void status(char* str)
-{
-	if(startup!=NULL && startup->status!=NULL)
-	    startup->status(str);
-}
-
-static void update_clients()
-{
-	if(startup!=NULL && startup->clients!=NULL)
-		startup->clients(node_threads_running);
-}
-
-void client_on(SOCKET sock, client_t* client)
-{
-	if(startup!=NULL && startup->client_on!=NULL)
-		startup->client_on(TRUE,sock,client);
-}
-
-static void client_off(SOCKET sock)
-{
-	if(startup!=NULL && startup->client_on!=NULL)
-		startup->client_on(FALSE,sock,NULL);
-}
-
-static void thread_up()
-{
-	if(startup!=NULL && startup->thread_up!=NULL)
-		startup->thread_up(TRUE);
-}
-
-static void thread_down()
-{
-	if(startup!=NULL && startup->thread_up!=NULL)
-		startup->thread_up(FALSE);
-}
-
-int lputs(char* str)
-{
-	if(startup==NULL || startup->lputs==NULL)
-    	return(0);
-    return(startup->lputs(str));
-}
-
-int lprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-
-    if(startup==NULL || startup->lputs==NULL)
-        return(0);
-
-    va_start(argptr,fmt);
-    vsprintf(sbuf,fmt,argptr);
-    va_end(argptr);
-    return(startup->lputs(sbuf));
-}
-
-int eprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-
-    if(startup==NULL || startup->event_log==NULL)
-        return(0);
-
-    va_start(argptr,fmt);
-    vsprintf(sbuf,fmt,argptr);
-    va_end(argptr);
-    return(startup->event_log(sbuf));
-}
-
-SOCKET open_socket(int type)
-{
-	SOCKET sock;
-
-	sock=socket(AF_INET, type, IPPROTO_IP);
-	if(sock!=INVALID_SOCKET && startup!=NULL && startup->socket_open!=NULL) 
-		startup->socket_open(TRUE);
-	return(sock);
-}
-
-int close_socket(SOCKET sock)
-{
-	int		result;
-
-	if(sock==INVALID_SOCKET || sock==0)
-		return(0);
-
-	shutdown(sock,SHUT_RDWR);	/* required on Unix */
-	result=closesocket(sock);
-	if(result==0 && startup!=NULL && startup->socket_open!=NULL) 
-		startup->socket_open(FALSE);
-	if(result!=0 && ERROR_VALUE!=ENOTSOCK)
-		lprintf("!ERROR %d closing socket %d",ERROR_VALUE,sock);
-	return(result);
-}
-
-/* Return true if connected, optionally sets *rd_p to true if read data available */
-BOOL socket_check(SOCKET sock, BOOL* rd_p)
-{
-	char	ch;
-	int		i,rd;
-	fd_set	socket_set;
-	struct	timeval tv;
-
-	if(rd_p!=NULL)
-		*rd_p=FALSE;
-
-	FD_ZERO(&socket_set);
-	FD_SET(sock,&socket_set);
-
-	tv.tv_sec=0;
-	tv.tv_usec=0;
-
-	i=select(sock+1,&socket_set,NULL,NULL,&tv);
-	if(i==SOCKET_ERROR)
-		return(FALSE);
-
-	if(i==0) 
-		return(TRUE);
-
-	rd=recv(sock,&ch,1,MSG_PEEK);
-	if(rd==1) {
-		if(rd_p!=NULL)
-			*rd_p=TRUE;
-		return(TRUE);
-	}
-
-	return(FALSE);
-}
-
-u_long resolve_ip(char *addr)
-{
-	HOSTENT*	host;
-	char*		p;
-
-	for(p=addr;*p;p++)
-		if(*p!='.' && !isdigit(*p))
-			break;
-	if(!(*p))
-		return(inet_addr(addr));
-	if ((host=gethostbyname(addr))==NULL) 
-		return(0);
-	return(*((ulong*)host->h_addr_list[0]));
-}
-
-} /* extern "C" */
-
 
 BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen,
   									BYTE* outbuf, int& outlen)
-- 
GitLab