From 9bb09521ff825713aba959807f648beffeea70d1 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 19 Nov 2005 03:24:00 +0000
Subject: [PATCH] Allow ciolib mode to be specified (as string) argument to
 uifc.init(), need to complete the list of supported modes here. "stdio" uses
 uifcx interface.

---
 src/sbbs3/js_uifc.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/sbbs3/js_uifc.c b/src/sbbs3/js_uifc.c
index 60d55bef0b..afc5b5ab36 100644
--- a/src/sbbs3/js_uifc.c
+++ b/src/sbbs3/js_uifc.c
@@ -235,6 +235,7 @@ js_uifc_init(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	int		ciolib_mode=CIOLIB_MODE_AUTO;
 	char*	title="Synchronet";
+	char*	mode;
 	uifcapi_t* uifc;
 
 	*rval = JSVAL_FALSE;
@@ -245,11 +246,29 @@ js_uifc_init(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	if(argc && (title=js_ValueToStringBytes(cx, argv[0], NULL))==NULL)
 		return(JS_FALSE);
 
-	if(initciolib(ciolib_mode))
-		return(JS_TRUE);
+	if(argc>1 && (mode=js_ValueToStringBytes(cx, argv[1], NULL))!=NULL) {
+		if(!stricmp(mode,"STDIO"))
+			ciolib_mode=-1;
+		else if(!stricmp(mode,"AUTO"))
+			ciolib_mode=CIOLIB_MODE_AUTO;
+		else if(!stricmp(mode,"X"))
+			ciolib_mode=CIOLIB_MODE_X;
+		else if(!stricmp(mode,"ANSI"))
+			ciolib_mode=CIOLIB_MODE_ANSI;
+		else if(!stricmp(mode,"CONIO"))
+			ciolib_mode=CIOLIB_MODE_CONIO;
+	}
 
-    if(uifcini32(uifc))
-		return(JS_TRUE);
+	if(ciolib_mode==-1) {
+		if(uifcinix(uifc))
+			return(JS_TRUE);
+	} else {
+		if(initciolib(ciolib_mode))
+			return(JS_TRUE);
+
+		if(uifcini32(uifc))
+			return(JS_TRUE);
+	}
 
 	*rval = JSVAL_TRUE;
 	uifc->scrn(title);
@@ -427,7 +446,7 @@ js_finalize(JSContext *cx, JSObject *obj)
 {
 	uifcapi_t* p;
 
-	if((p=get_uifc(cx,obj))==NULL)
+	if((p=(uifcapi_t*)JS_GetPrivate(cx,obj))==NULL)
 		return;
 	
 	free(p);
-- 
GitLab