From e3abc73c3cbf854b7d8200f2bccf299aca3df7ef Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Tue, 13 Jan 2009 07:16:04 +0000
Subject: [PATCH] Add sysop config support usnig the sysconfig parameter.

---
 xtrn/doorscan/doorscan.js | 235 +++++++++++++++++++++++++++++++++-----
 1 file changed, 206 insertions(+), 29 deletions(-)

diff --git a/xtrn/doorscan/doorscan.js b/xtrn/doorscan/doorscan.js
index 60eec2593b..609f65b152 100644
--- a/xtrn/doorscan/doorscan.js
+++ b/xtrn/doorscan/doorscan.js
@@ -218,6 +218,7 @@ function NewsDisplay()
 	this.ANSI=NewsDisplay_ANSI;
 	this.ASCII=NewsDisplay_ASCII;
 	this.ASC=NewsDisplay_ASC;
+	this.LORD=NewsDisplay_LORD;
 }
 
 function NewsDisplay_ANSI(filename, since)
@@ -235,6 +236,18 @@ function NewsDisplay_ASC(filename, since)
 	new Display().ASC(filename);
 }
 
+function NewsDisplay_LORD(filename, since)
+{
+	var now=new Date();
+
+	/*
+	 * TODO: Show yesterdays log...
+	 */
+	//if(now.getDate() != since.getDate()) {
+	//}
+	new Display().LORD(filename);
+}
+
 function DoorConfig(leaveopen)
 {
 	if(leaveopen==undefined)
@@ -439,7 +452,7 @@ function UserConfig_addxtrn(xtrn)
 	}
 }
 
-function UserConfig_configure(dcfg, sec)
+function UserConfig_configure()
 {
 	var door;
 	var index=new Array();
@@ -456,15 +469,15 @@ function UserConfig_configure(dcfg, sec)
 			index.push(sec);
 			console.uselect(index.length, "External Program Section", xtrn_area.sec[sec].name);
 		}
-		console.uselect(index.length, "External Program Section", "Global Settings");
+		console.uselect(index.length+1, "External Program Section", "Global Settings");
 		if(index.length==0)
 			return;
 		xsec=console.uselect();
-		if(xsec < 1 || xsec > index.length) {
+		if(xsec < 1 || xsec > index.length+1) {
 			this.save();
 			return;
 		}
-		if(xsec < index.length)
+		if(xsec <= index.length)
 			this.configureSec(dcfg, index[xsec-1]);
 		else
 			this.configureDefaults();
@@ -698,25 +711,189 @@ function LogParser_usersOfSince(xtrn, since)
 	return(ret);
 }
 
+//==============================
+
+function sysop_config_externs(dcfg)
+{
+	var door;
+	var index=new Array();
+	var n,s,r;
+	var xsec;
+
+	while(1) {
+		for(sec in xtrn_area.sec) {
+			index.push(sec);
+			console.uselect(index.length, "External Program Section", xtrn_area.sec[sec].name);
+		}
+		if(index.length==0)
+			return;
+		xsec=console.uselect();
+		if(xsec < 1 || xsec >= index.length)
+			return;
+		sysop_config_externs_sec(dcfg, index[xsec-1]);
+	}
+}
+
+function sysop_get_newstype(dflt)
+{
+	var i=0;
+	var news=new NewsDisplay();
+	var index=new Array();
+
+	for(var t in news) {
+		index.push(t);
+		console.uselect(index.length, "News File Type", t);
+	}
+	i=console.uselect();
+	if(i < 1 || i > index.length)
+		return(dflt);
+	return(index[i-1]);
+	
+}
+
+function sysop_get_scorestype(dflt)
+{
+	var i=0;
+	var news=new NewsDisplay();
+	var index=new Array();
+
+	for(var t in news) {
+		index.push(t);
+		console.uselect(index.length, "Scores File Type", t);
+	}
+	i=console.uselect();
+	if(i < 1 || i > index.length)
+		return(dflt);
+	return(index[i-1]);
+}
+
+function sysop_config_externs_sec(dcfg, sec)
+{
+	var door;
+	var index=new Array();
+	var n,s,r;
+	var xprog;
+
+	while(1) {
+		for(door in xtrn_area.prog) {
+			if(xtrn_area.prog[door].sec_code != sec)
+				continue;
+			index.push(door);
+			console.uselect(index.length, "External",xtrn_area.prog[door].name);
+		}
+		if(!index.length)
+			return;
+		xprog=console.uselect();
+		if(xprog < 1 || xprog > index.length)
+			return;
+		sysop_config_externs_prog(dcfg, index[xprog-1]);
+	}
+}
+
+function sysop_config_externs_prog(dcfg, door)
+{
+	var door;
+	var index=new Array();
+	var n,s,r;
+	var xprog;
+
+	while(1) {
+		console.uselect(1, door+" Scan Config", "Skip this door "+(dcfg.door[door].skip?"Yes":"No"));
+		console.uselect(2, door+" Scan Config", "Ad File: "+(dcfg.door[door].ad?dcfg.door[door].ad:''));
+		console.uselect(3, door+" Scan Config", "Ad Type: "+(dcfg.door[door].adType));
+		console.uselect(4, door+" Scan Config", "Score File: "+(dcfg.door[door].score?dcfg.door[door].score:''));
+		console.uselect(5, door+" Scan Config", "Score Type: "+(dcfg.door[door].scoreType));
+		console.uselect(6, door+" Scan Config", "News File: "+(dcfg.door[door].news?dcfg.door[door].news:''));
+		console.uselect(7, door+" Scan Config", "News Type: "+(dcfg.door[door].newsType));
+		switch(console.uselect()) {
+			case 1:
+				dcfg.door[door].skip=!dcfg.door[door].skip;
+				break;
+			case 2:
+				if(dcfg.door[door].ad==undefined)
+					dcfg.door[door].ad='';
+				dcfg.door[door].ad=console.getstr(dcfg.door[door].ad, K_EDIT);
+				if(dcfg.door[door].ad=='')
+					delete dcfg.door[door].ad;
+				break;
+			case 3:
+				dcfg.door[door].adType=sysop_get_scorestype(dcfg.door[door].adType==undefined?'ANSI':dcfg.door[door].adType);
+				break;
+			case 4:
+				if(dcfg.door[door].score==undefined)
+					dcfg.door[door].score='';
+				dcfg.door[door].score=console.getstr(dcfg.door[door].score, K_EDIT);
+				if(dcfg.door[door].score=='')
+					delete dcfg.door[door].score;
+				break;
+			case 5:
+				dcfg.door[door].scoreType=sysop_get_scorestype(dcfg.door[door].scoreType==undefined?'ANSI':dcfg.door[door].scoreType);
+				break;
+			case 6:
+				if(dcfg.door[door].news==undefined)
+					dcfg.door[door].news='';
+				dcfg.door[door].news=console.getstr(dcfg.door[door].news, K_EDIT);
+				if(dcfg.door[door].news=='')
+					delete dcfg.door[door].news;
+				break;
+			case 7:
+				dcfg.door[door].newsType=sysop_get_scorestype(dcfg.door[door].newsType==undefined?'ANSI':dcfg.door[door].newsType);
+				break;
+			default:
+				return;
+		}
+	}
+}
+
+//==============================
+
+
+function sysop_config_skip(dcfg)
+{
+	var door;
+	var index=new Array();
+	var n,s,r;
+	var xsec;
+
+	while(1) {
+		for(sec in xtrn_area.sec) {
+			index.push(sec);
+			console.uselect(index.length, "External Program Section", 
+					format("%-40s %s",xtrn_area.sec[sec].name
+					,(dcfg.skipSection[sec] != undefined && dcfg.skipSection[sec])?"Skip":"Include"));
+		}
+		if(index.length==0)
+			return;
+		xsec=console.uselect();
+		if(xsec < 1 || xsec > index.length)
+			return;
+		dcfg.skipSection[index[xsec-1]]=!dcfg.skipSection[index[xsec-1]];
+	}
+}
+
 function sysop_config()
 {
-	/*
-	 * Door Scan configuration
-	 * Per Door:
-	 *		ad					Path to ad file
-	 *		atType				Ad file type
-	 *		score				Path to score file
-	 *		scoreType			Score file type
-	 *		news				Path to News file
-	 *		newsType			News file type
-	 *		skip				Do not include this door in scans
-	 * Globals:
-	 * Top-level:
-	 *		skipSection			Object which contains bool properties
-	 *							If the bool property is true, the door with the
-	 *							same internal code as the property name will
-	 *							not be included in scans.
-	 */
+	var dcfg=new DoorConfig();
+
+	while(1) {
+		console.uselect(1, "DoorScan Setting", "Modify default scan settings");
+		console.uselect(2, "DoorScan Setting", "Mark sections to skip");
+		console.uselect(3, "DoorScan Setting", "Configure individual externals");
+		switch(console.uselect()) {
+			case 1:
+				new UserConfig().configure();
+				break;
+			case 2:
+				sysop_config_skip(dcfg);
+				break;
+			case 3:
+				sysop_config_externs(dcfg);
+				break;
+			default:
+				dcfg.save();
+				return;
+		}
+	}
 }
 
 function runXtrn(xtrn)
@@ -860,21 +1037,21 @@ function doScan()
 			}
 
 			if(!ucfg.door[door].skipScores) {
-				if(dcfg.door[door].scores != undefined) {
+				if(dcfg.door[door].score != undefined) {
 					/*
 					 * If the Scores file has not been updated, don't bother
 					 * Some doors only update the Scores during maintenance
 					 */
 					
-					if(new Date(file_date(dcfg.door[door].scores)*1000) >= scantime) {
+					if(new Date(file_date(dcfg.door[door].score)*1000) >= scantime) {
 						/* Assume ANSI */
-						if(dcfg.door[door].scoresType==undefined)
-							dsp.ANSI(dcfg.door[door].scores);
+						if(dcfg.door[door].scoreType==undefined)
+							dsp.ANSI(dcfg.door[door].score);
 						else {
-							if(dsp[dcfg.door[door].scoresType] == undefined)
-								log("doorscan WARNING Scores type "+dcfg.door[door].scoresType+" for door "+door+" does not have a display method.");
+							if(dsp[dcfg.door[door].scoreType] == undefined)
+								log("doorscan WARNING Scores type "+dcfg.door[door].scoreType+" for door "+door+" does not have a display method.");
 							else
-								dsp[dcfg.door[door].scoresType](dcfg.door[door].scores);
+								dsp[dcfg.door[door].scoreType](dcfg.door[door].score);
 						}
 					}
 				}
@@ -931,7 +1108,7 @@ for(i in argv) {
 			new UserConfig(user.number).configure();
 			break;
 		case 'sysconfig':
-			// TODO: Sysop configuration
+			sysop_config();
 			break;
 		case 'rank':
 			// TODO: Door popularity rankings
-- 
GitLab