diff --git a/exec/baja.js b/exec/baja.js new file mode 100644 index 0000000000000000000000000000000000000000..532f2169c71a59fa9533042ce7bd54b30993ffe3 --- /dev/null +++ b/exec/baja.js @@ -0,0 +1,243 @@ +/** BAJA to JavaScript translation library + +don't expect this to produce working scripts. +it is meant as a starting point and time-saver +for those who wish to convert a BAJA source file +to JavaScript. + +~mcmlxxix/echicken + +$id: $ **/ + +BAJA = new (function() { + +/* load baja command library */ +load("bajalib.js"); + +/* baja source file */ +var srcName = argv[0]; + +/* js output file */ +var destName = argv[1]; + +/* include directories */ +var locations = [ + js.exec_dir, + system.exec_dir, + system.mods_dir, + system.exec_dir + "load/", + system.mods_dir + "load/" +]; + +/* handle your shit */ +if(!srcName) + srcName = prompt("Enter BAJA source file name: "); +if(!destName) + destName = prompt("Enter JavaScript output file name: "); + +/* load BAJA file contents */ +function open(fName) { + for(var i=0;i<locations.length && !file_exists(fName);i++) { + fName = locations[i] + file_getname(fName); + } + if(!file_exists(fName)) + throw("file not found: " + fName); + var f = new File(fName); + log("loading source file: " + f.name); + if(!f.open('r',false)) + throw("error opening file: " + f.name); + var data = f.readAll(); + f.close(); + return data; +} + +/* main loop */ +function parse(data,script) { + if(!script) + script = [ + "const FALSE = NOT_EQUAL = 0, TRUE = EQUAL = (1<<0), LESS = (1<<1), GREATER = (1<<2);", + "system.baja = { logicState:TRUE, userInput:'', cmdKey:'', temp:'', errNo : 0, etx:'', dir:0 };" + ]; + + while(data.length > 0) { + var line = data.shift(); + + /* trim spaces */ + line = trim(line); + + try { + /* parse baja */ + if(!consume(script,line)) { + script.push("// PARSING ERROR: " + line); + } + } catch(e) { + log(e); + log(e.stack); + } + } + return script; +} + +/* trim leading and trailing spaces */ +function trim(str) { + return str.replace(/(^[\t\s]+|[\t\s]+$)/,''); +} + +/* parse a line of baja code */ +function consume(script, line) { + + /* handle blank lines */ + if(trim(line).length == 0) { + script.push(""); + return true; + } + + /* remove comments (and put on own line) */ + var comment = line.match(/[\t\s]*\#(.*)/); + if(comment) { + script.push("//" + comment[1]); + line = line.replace(/[\t\s]*\#.*/,''); + } + + /* if string is empty after comment is stripped, ignore */ + if(trim(line).length == 0) + return true; + + //log(line); + + /* set labels */ + if(line[0] == ":") { + script.push(line.substr(1) + ":"); + script.push(line.substr(1) + " = (function() {"); + return true; + } + + /* handle !includes */ + var inc = line.match(/^\!include[\t\s]+(.*)/i); + if(inc) { + if(line.match(/sbbsdefs/i)) + script.push("load(\"sbbsdefs.js\");"); + else if(line.match(/userdefs/i)) + script.push("load(\"userdefs.js\");"); + else if(line.match(/nodedefs/i)) + script.push("load(\"nodedefs.js\");"); + else { + var d = open(inc[1]); + script.push("/** BEGIN FILE IMPORT: " + inc[1] + " **/"); + parse(d,script); + script.push("/** END FILE IMPORT: " + inc[1] + " **/"); + } + return true; + } + + /* handle defs */ + var def = line.match(/^\!define[\t\s]+(.*)[\t\s]+(.*)/i); + if(def && def[1] && def[2]) { + var bit = def[2].match(/\.(\d+)/); + if(bit) + def[2] = "(1<<" + bit[1] + ")"; + script.push("var " + def[1] + " = " + def[2] + ";"); + return true; + } + + /* handle globals */ + var glob = line.match(/^\!global[\t\s]+(.*)/i); + if(glob && glob[1]) { + /* parse object path: _USERON.ALIAS */ + var path = glob[1].split("."); + var path_string = ""; + var global = globals; + + while(path.length > 0) { + /* object properties: _USERON, ALIAS */ + var prop = path.shift(); + path_string += prop; + + /* define the property if it's not already */ + if(!global[prop]) { + if(path.length > 0) { + script.push(path_string + " = {};"); + global[prop] = {}; + } + else { + script.push(path_string + " = undefined;"); + global[prop] = undefined; + } + } + + /* climb into the object */ + global = global[prop]; + path_string += "."; + } + return true; + } + + /* handle other shit */ + line = line.match(/([^\s"]+|"[^"]*")/g); + if(baja[line[0].toUpperCase()]) { + var cmd = line[0].toUpperCase(); + var args = line.slice(1); + var str = baja[cmd].apply({},args); + if(str != undefined) { + str = str.split(/\r\n/); + while(str.length > 0) + script.push(str.shift()); + } + return true; + } + + /* unhandled line */ + return false; +} + +/* format raw code */ +function form(array) { + var output = []; + var depth = 0; + + for(var l=0;l<array.length;l++) { + var line = array[l]; + + /* check for depth increment triggers */ + if(line.match(/^[^\}]*\{[^\}]*$|case[\t\s]+.*\:/)) { + output.push(tabs(depth) + line); + depth++; + } + + /* check for depth decrement triggers */ + else if(line.match(/^[^\{]*\}[^\{]*$|break\;/i)) { + depth--; + if(depth < 0) + depth = 0; + output.push(tabs(depth) + line); + } + + else { + output.push(tabs(depth) + line); + } + } + return output; +} + +/* get a string containing specified number of tabs */ +function tabs(num) { + return format("%*s",num,'').replace(/\s/g,'\t'); +} + +/* save javascript */ +function close(fName,data) { + var f = new File(fName); + log("saving javascript file: " + f.name); + if(!f.open('w',true)) + throw("error opening file: " + f.name); + f.writeAll(data); + f.close(); +} + +var data = open(srcName); +var script = parse(data); +var output = form(script); +close(destName,output); + +})(); + diff --git a/exec/load/bajalib.js b/exec/load/bajalib.js new file mode 100644 index 0000000000000000000000000000000000000000..af4386ed04cac7e2138cbd525839979f89ae7080 --- /dev/null +++ b/exec/load/bajalib.js @@ -0,0 +1,1539 @@ +// [6.1] - Quick Function Reference +var baja = {}; +var globals = {}; +var functions = {}; +var variables = {}; +var labels = []; +var labelCount = 0; +var ifLevel = false; + +// String Manipulation Functions +// ----------------------------- +// STR <str_var> [str_var] [...] +baja["STR"] = function() { + var line = "var " + arguments[0]; + variables[arguments[0]] = "STR"; + for(var a=1;a<arguments.length;a++) { + line += ", " + arguments[a]; + variables[arguments[a]] = "STR"; + } + return line + ";"; +} +// GLOBAL_STR <str_var> [str_var] [...] +baja["GLOBAL_STR"] = function() { + var line = ""; + for(var a=0;a<arguments.length;a++) { + line += arguments[a] + " = "; + variables[arguments[a]] = "STR"; + } + return line + "undefined;"; +} +// SET <str_var> <"cstr"> +// SET <int_var> <#> +baja["SET"] = function(var1, var2) { + if(variables[var1] == "STR") + return var1 + " = " + var2 + ";"; + if(variables[var1] == "INT") + return var1 + " = Number(" + var2 + ");"; +} +// COPY <str_var> <any_var> +baja["COPY"] = baja["SET"]; +// SWAP <str_var> <any_var> +baja["SWAP"] = function(var1,var2) { + var line = "system.baja.temp = " + var1 + ";\r\n"; + line += var1 + " = " + var2 + ";\r\n"; + line += var2 + " = system.baja.temp;"; + return line; +} +// STRCAT <str_var> <str_var or "cstr"> +baja["STRCAT"] = function() { + var line = arguments[0] + " = " + arguments[0]; + for(var a=1;a<arguments.length;a++) + line += " + " + arguments[a]; + return line + ";"; +} +// SPRINTF <str_var> <"cstr"> <any_var> [any_var] [...] +baja["SPRINTF"] = function() { + line = arguments[0] + " = " + "format(" + arguments[1]; + for(var a=2;a<arguments.length;a++) + line += ", " + arguments[a]; + return line + ");"; +} +// TIME_STR <str_var> <int_var> +baja["TIME_STR"] = function(var1,var2) { + return var1 + " = system.timestr(" + var2 + ");"; +} +// DATE_STR <str_var> <int_var> +baja["DATE_STR"] = function(var1,var2) { + return var1 + " = system.datestr(" + var2 + ");"; +} +// SECOND_STR <str_var> <int_var> +baja["SECOND_STR"] = function(var1,var2) { + return var1 + " = system.secondstr(" + var2 + ");"; +} +// FTIME_STR <str_var> <"cstr"> <int_var> +baja["FTIME_STR"] = function(var1,var2,var3) { + return format("%s = strftime(%s,%s);",var1,var2,var3); +} +// SHIFT_STR [str_var] <#> +baja["SHIFT_STR"] = function(var1,var2) { + if(!var2) + return "bbs.command_str = bbs.command_str.substr(" + var1 + ");"; + return var1 + " = " + var1 + ".substr(" + var2 + ");"; +} +// STRIP_CTRL [str_var] +baja["STRIP_CTRL"] = function(var1) { return "strip_ctrl(" + var1 + ");"; } +// TRUNCSP [str_var] +baja["TRUNCSP"] = function(var1) { return "truncsp(" + var1 + ");"; } +// STRUPR [str_var] +baja["STRUPR"] = function(var1) { return var1 + ".toUpperCase();"; } +// STRLWR [str_var] +baja["STRLWR"] = function(var1) { return var1 + ".toLowerCase();"; } +// SETSTR <"cstr"> +baja["SETSTR"] = function(var1) { return "bbs.command_str = " + var1 + ";"; } +// REPLACE_TEXT <#> <"cstr"> +baja["REPLACE_TEXT"] = function(var1,var2) { return format("bbs.replace_text(%s,%s);",var1,var2); } +// LOAD_TEXT <"str"> +baja["LOAD_TEXT"] = function(var1) { return format("bbs.load_text(%s);",var1); } +// REVERT_TEXT <# or ALL> +baja["REVERT_TEXT"] = function(var1) { return format("bbs.revert_text(%s);",var1); } + +// Integer Manipulation Functions +// ------------------------------ +// INT <int_var> [int_var] [...] +baja["INT"] = function() { + var line = "var " + arguments[0]; + variables[arguments[0]] = "INT"; + for(var a=1;a<arguments.length;a++) { + line += ", " + arguments[a]; + variables[arguments[a]] = "INT"; + } + return line + ";"; +} +// GLOBAL_INT <int_var> [int_var] [...] +baja["GLOBAL_INT"] = function() { + var line = ""; + for(var a=0;a<arguments.length;a++) { + line += arguments[a] + " = "; + variables[arguments[a]] = "INT"; + } + return line + "undefined;"; +} +// ADD <int_var> <any_var or #> +baja["ADD"] = function(num1,num2) { return num1 + " += " + num2 + ";"; } +// SUB <int_var> <any_var or #> +baja["SUB"] = function(num1,num2) { return num1 + " -= " + num2 + ";"; } +// MUL <int_var> <any_var or #> +baja["MUL"] = function(num1,num2) { return num1 + " *= " + num2 + ";"; } +// DIV <int_var> <any_var or #> +baja["DIV"] = function(num1,num2) { return num1 + " /= " + num2 + ";"; } +// MOD <int_var> <any_var or #> +baja["MOD"] = function(num1,num2) { return num1 + " %= " + num2 + ";"; } +// AND <int_var> <any_var or #> +baja["AND"] = function(num1,num2) { return num1 + " &= " + num2 + ";"; } +// OR <int_var> <any_var or #> +baja["OR"] = function(num1,num2) { return num1 + " |= " + num2 + ";"; } +// NOT <int_var> <any_var or #> +baja["NOT"] = function(num1,num2) { return num1 + " &= ~" + num2 + ";"; } +// XOR <int_var> <any_var or #> +baja["XOR"] = function(num1,num2) { return num1 + " ^= " + num2 + ";"; } +// COPY <int_var> <any_var> +baja["COPY"] = function(var1, var2) { return 'var1 = var2.toString();'; } +// SWAP <int_var> <any_var> +baja["SWAP"] = function(var1, var2) { return 'var2 = [var1, var1 = var2][0];' }; +// RANDOM <int_var> <#> +baja["RANDOM"] = function(var1,num1) { return var1 + " = Math.random() * " + num1 + ";"; } +// TIME <int_var> +baja["TIME"] = function(var1) { return var1 + " = time();"; } +// STRLEN <int_var> <str_var> +baja["STRLEN"] = function(var1,var2) { return var1 + " = console.strlen(" + var2 + ");"; } +// DATE_INT <int_var> <str_var> +baja["DATE_INT"] = function(var1,var2) { + var line = var1 + " = new Date("; + var2 = var2.replace(/(\d{2})\/(\d{2})\/(\d{2})/,"$1/$2/20$3"); + return line + var2 + ");"; +} +// CRC16 <int_var> <str_var> +baja["CRC16"] = function(var1,var2) { return var1 + " = crc16_calc(" + var2 + ");"; } +// CRC32 <int_var> <str_var> +baja["CRC32"] = function(var1,var2) { return var1 + " = crc32_calc" + var2 + ");"; } +// CHKSUM <int_var> <str_var> +baja["CHKSUM"] = function(var1,var2) { return var1 + " = chksum_calc" + var2 + ");"; } +// CHARVAL <int_var> <str_var> +baja["CHARVAL"] = function(var1,var2) { return var1 + " = " + var2 + ".charCodeAt(0);"; } + +// Logic/Control Flow Functions +// ---------------------------- +// GOTO <txt> +baja["GOTO"] = function(label) { return "continue " + label + ";"; } +// CALL <txt> +baja["CALL"] = function(label) { return label + "();"; } +// RETURN +baja["RETURN"] = function() { return "return;\r\n})();"; } +// SETLOGIC <TRUE or FALSE or GREATER or LESS> +baja["SETLOGIC"] = function(var1) { return "system.baja.logicState = " + var1.toUpperCase() + ";"; } +// COMPARE <any_var> <any_var or "cstr" or #> +baja["COMPARE"] = function(var1,var2) { + var line = ""; + if(!functions["compare"]) { + functions["compare"] = true; + line += "system.baja.compare = " + compare.toSource() + "\r\n"; + } + return line + "system.baja.compare(" + var1 + "," + var2 + ");"; +} +// IF_EQUAL +baja["IF_EQUAL"] = function() { + ifLevel = true; + return "if(system.baja.logicState == TRUE) {"; +} +// IF_TRUE +baja["IF_TRUE"] = baja["IF_EQUAL"]; +// IF_NOT_EQUAL +baja["IF_NOT_EQUAL"] = function() { + ifLevel = true; + return "if(system.baja.logicState == FALSE) {"; +} +// IF_FALSE +baja["IF_FALSE"] = baja["IF_NOT_EQUAL"]; +// IF_GREATER +baja["IF_GREATER"] = function() { + ifLevel = true; + return "if(system.baja.logicState == GREATER) {"; +} +// IF_GREATER_OR_EQUAL +baja["IF_GREATER_OR_EQUAL"] = function() { + ifLevel = true; + return "if(system.baja.logicState == GREATER || system.baja.logicState == TRUE) {"; +} +// IF_LESS +baja["IF_LESS"] = function() { + ifLevel = true; + return "if(system.baja.logicState == LESS) {"; +} +// IF_LESS_OR_EQUAL +baja["IF_LESS_OR_EQUAL"] = function() { + ifLevel = true; + return "if(system.baja.logicState == LESS || system.baja.logicState == EQUAL) {"; +} +// ELSE +baja["ELSE"] = function() { return "}\r\nelse {"; } +// END_IF +baja["END_IF"] = function() { + ifLevel = false; + return "}"; +} +baja["ENDIF"] = baja["END_IF"]; +// SWITCH <int_var> +baja["SWITCH"] = function(var1) { return "switch(" + var1 + ") {"; } +// CASE <#> +baja["CASE"] = function(var1) { return "case " + var1 + ":"; } +// DEFAULT +baja["DEFAULT"] = function() { return "default:"; } +// END_CASE +baja["END_CASE"] = function() { return "break;"; } +// END_SWITCH +baja["END_SWITCH"] = function() { return "}"; } +// CMD_HOME +baja["CMD_HOME"] = function() { + var newLabel = "label" + labelCount++; + labels.push(newLabel); + var line = newLabel + ":\r\n"; + return line + "while(!js.terminated) {"; +} +// CMDKEY <key> +baja["CMDKEY"] = function(var1) { + ifLevel = false; + if(var1.toUpperCase() == "DIGIT") + return "if(system.baja.cmdKey.match(/\d/)) {"; + if(var1.toUpperCase() == "EDIGIT") + return "if(system.baja.cmdKey.match(/\/\d/)) {"; + if(var1.match(/'[^']*/)) + return "if(\"" + var1 + "\" == system.baja.cmdKey) {"; + if(var1.match(/\^*/)) + return "if(ctrl(\"" + var1[1] + "\") == system.baja.cmdKey) {"; + return "if(\"" + var1.toUpperCase() + "\" == system.baja.cmdKey.toUpperCase()) {"; +} +// CMDKEYS <keylist> +baja["CMDKEYS"] = function(var1) { + ifLevel = false; + return "if(\"" + var1 + "\".indexOf(system.baja.cmdKey) >= 0) {"; +} +// CMDSTR <"cstr"> +baja["CMDSTR"] = function(var1) { + ifLevel = false; + return "if(\"" + var1 + "\".toUpperCase() == bbs.command_str.toUpperCase()) {"; +} +// END_CMD +baja["END_CMD"] = function() { + if(!labels.length) + return "}"; + var line = "continue " + labels[labels.length-1] + ";"; + if(!ifLevel) + line += "\r\n}"; + return line; +} +// CMD_POP +baja["CMD_POP"] = function() { + labels.pop(); + return "}"; +} +// COMPARE_KEY <key> +baja["COMPARE_KEY"] = function(var1) { + return "system.baja.logicState = (" + var1 + " == system.baja.cmdKey?TRUE:FALSE);"; +} +// COMPARE_KEYS <keylist> +baja["COMPARE_KEYS"] = function(var1) { + return "system.baja.logicState = (" + var1 + ".indexOf(system.baja.cmdKey) >= 0?TRUE:FALSE);"; +} +// COMPARE_STR <"cstr"> +baja["COMPARE_STR"] = function(var1) { + return "system.baja.logicState = (" + var1 + + ".toUpperCase() == bbs.command_str.toUpperCase()?TRUE:FALSE);"; +} +// COMPARE_WORD <"cstr"> +baja["COMPARE_WORD"] = function(var1) { + return "system.baja.logicState = (bbs.command_str.toUpperCase().indexOf(" + + var1 + ".toUpperCase()) == 0?TRUE:FALSE);"; +} +// COMPARE_ARS <ars> +baja["COMPARE_ARS"] = function(var1) { + return "system.baja.logicState = (user.compare_ars(" + var1 + ")?TRUE:FALSE);"; +} +// COMPARE_STRN <#> <str_var> <str_var or "cstr"> +baja["COMPARE_STRN"] = function(var1,var2,var3) { + return format("system.baja.logicState = (%s.substr(0,%s).toUpperCase() == %s.substr(0,%s).toUpperCase()?TRUE:FALSE);", + var2,var1,var3,var1); +} +// COMPARE_SUBSTR <str_var> <str_var or "cstr"> +baja["COMPARE_SUBSTR"] = function(var1,var2) { + return "system.baja.logicState = (" + var1 + ".indexOf(" + + var2 + ") >= 0?TRUE:FALSE);"; +} + +// Display Functions +// ----------------- +// PRINT <"cstr" or any_var> +baja["PRINT"] = function(var1) { return "console.print(" + var1 + ");"; } +// PRINTF <"cstr"> <any_var> [any_var] [...] +baja["PRINTF"] = function() { + var line = "printf(" + arguments[0]; + for(var a=1;a<arguments.length;a++) + line += ", " + arguments[a]; + return line + ");"; +} +// PRINT_LOCAL <"cstr"> +baja["PRINT_LOCAL"] = function(var1) { return "log(" + var1 + ");"; } +// PRINT_REMOTE <"cstr"> +baja["PRINT_REMOTE"] = baja["PRINT"]; +// PRINTSTR +baja["PRINTSTR"] = function(var1) { return "console.print(bbs.command_str);"; } +// PRINTKEY +baja["PRINTKEY"] = function(var1) { return "console.print(system.baja.cmdKey);"; } +// MNEMONICS <"cstr"> +baja["MNEMONICS"] = function(var1) { return "console.mnemonics(" + var1 + ");"; } +// CLS +baja["CLS"] = function() { return "console.clear();"; } +// CRLF +baja["CRLF"] = function() { return "console.crlf();"; } +// PRINTFILE <"str" or str_var> [#] +baja["PRINTFILE"] = function(var1, var2) { + return format("console.printfile(%s,%s);",var1,var2); +} +// PRINTTAIL <str_var> <#> <#> +baja["PRINTTAIL"] = function(var1,var2,var3) { + return format("console.printtail(%s,%s,%s);",var1,var3,var2); +} +// PRINTFILE_STR +baja["PRINTFILE_STR"] = function(var1) { + return "console.printfile(bbs.command_str);"; +} +// PRINTFILE_LOCAL <"str"> +baja["PRINTFILE_LOCAL"] = baja["PRINTFILE"]; +// PRINTFILE_REMOTE <"str"> +baja["PRINTFILE_REMOTE"] = baja["PRINTFILE"]; +// LIST_TEXT_FILE +baja["LIST_TEXT_FILE"] = function(var1, var2) { + var line = "if(bbs.check_syspass()) {\r\n"; + return line + ("console.printfile(%s,%s);\r\n}",var1,var2); +} +// EDIT_TEXT_FILE +baja["EDIT_TEXT_FILE"] = function(var1, var2) { + var line = "if(bbs.check_syspass()) {\r\n"; + return line + ("console.editfile(%s,%s);\r\n}",var1,var2); +} +// PAUSE +baja["PAUSE"] = function() { return "console.pause();"; } +// MENU <"str"> +baja["MENU"] = function(var1) { return "bbs.menu(" + var1 + ");"; } +// NODELIST_ALL +baja["NODELIST_ALL"] = function() { return "bbs.list_nodes();"; } +// NODELIST_USERS +baja["NODELIST_USERS"] = function() { return "bbs.whos_online();"; } +// USERLIST_SUB +baja["USERLIST_SUB"] = function() { return "bbs.list_users(2);"; } +// USERLIST_DIR +baja["USERLIST_DIR"] = function() { return "bbs.list_users(1);"; } +// USERLIST_ALL +baja["USERLIST_ALL"] = function() { return "bbs.list_users(0);"; } +// USERLIST_LOGONS +baja["USERLIST_LOGONS"] = function() { return "bbs.list_logons();"; } +// YES_NO <"cstr"> +baja["YES_NO"] = function(var1) { + return "system.baja.logicState = (console.yesno(" + var1 + ")?TRUE:FALSE);"; +} +// NO_YES <"cstr"> +baja["NO_YES"] = function(var1) { + return "system.baja.logicState = (console.noyes(" + var1 + ")?TRUE:FALSE);"; +} +// READ_SIF <"str"> +baja["READ_SIF"] = function(var1) { + var line = ''; + if(!functions["SIF"]) { + functions["SIF"] = true; + line += 'load("siflib.js");\r\n'; + } + return line + 'SIF.read(' + var1 + '.sif,bbs.command_str);'; +} +// SAVELINE +baja["SAVELINE"] = function() { return "console.saveline();"; } +// RESTORELINE +baja["RESTORELINE"] = function() { return "console.restoreline();"; } + +// Input Functions +// --------------- +// INKEY +baja["INKEY"] = function() { + return + 'system.baja.temp = console.inkey();\r\n' + + 'if(system.baja.temp != "") {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'system.baja.cmdKey = system.baja.temp;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = FALSE;\r\n' + + '}'; +} +// GETKEY +baja["GETKEY"] = function() { return 'system.baja.cmdKey = console.getkey().toUpperCase();'; } +// GETKEYE +baja["GETKEYE"] = function() { + return + 'system.baja.temp = console.getkey().toUpperCase();\r\n' + + 'if(system.baja.temp == "/")\r\n' + + 'system.baja.cmdKey = "/" + console.getkey().toUpperCase();\r\n' + + 'else\r\n' + + 'system.baja.cmdKey = system.baja.temp;'; +} +// GETCMD <"cstr"> +baja["GETCMD"] = function(var1) { + return 'system.baja.cmdKey = console.getkeys(\"' + var1 + '\").toUpperCase();'; +} +// GETSTR [str_var] [#] [#] +baja["GETSTR"] = function(var1,var2,var3) { + var str = var1; + var len = var2; + var mode = var3; + /* an argument is missing! */ + if(!var3) { + if(!isNaN(var1)) { + len = var1; + str = "bbs.command_str"; + mode = var2; + } + else if(var1.indexOf('K_') >= 0) { + len = 128; + str = "bbs.command_str"; + mode = var1; + } + else if(var1) { + len = 128; + mode = var2; + } + } + return str + " = console.getstr(" + len + "," + mode + ");"; +} +// GETLINE [str_var] [#] +baja["GETLINE"] = function(var1,var2) { + var str = var1; + var len = var2; + /* an argument is missing! */ + if(!var2) { + if(!isNaN(var1)) { + len = var1; + str = "bbs.command_str"; + } + else if(var1) { + len = 128; + } + } + return str + " = console.getstr(" + len + ",K_LINE);"; +} +// GETSTRUPR [str_var] [#] +baja["GETSTRUPR"] = function(var1,var2) { + var str = var1; + var len = var2; + /* an argument is missing! */ + if(!var2) { + if(!isNaN(var1)) { + len = var1; + str = "bbs.command_str"; + } + else if(var1) { + len = 128; + } + } + return str + " = console.getstr(" + len + ",K_UPPER);"; +} +// GETNAME [str_var] [#] +baja["GETNAME"] = function(var1,var2) { + var str = var1; + var len = var2; + /* an argument is missing! */ + if(!var2) { + if(!isNaN(var1)) { + len = var1; + str = "bbs.command_str"; + } + else if(var1) { + len = 128; + } + } + return str + " = console.getstr(" + len + ",K_UPRLWR);"; +} +// GETFILESPEC +baja["GETFILESPEC"] = function() { + return + 'system.baja.temp = bbs.get_filespec();\r\n' + + 'if(system.baja.temp = "") {\r\n' + + 'system.baja.logicState = FALSE;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'bbs.command_str = system.baja.temp;\r\n' + + '}'; +} +// GETLINES +baja["GETLINES"] = function() { return "console.getlines();"; } +// GETNUM [any_var] <#> +baja["GETNUM"] = function(var1,var2) { return var1 + " = console.getnum(" + var2 + ");"; } +// GET_TEMPLATE <"str"> +baja["GET_TEMPLATE"] = function(var1) { + return "bbs.command_str = console.gettemplate(" + var1 + ");"; +} +// CHKSYSPASS +baja["CHKSYSPASS"] = function() { return 'system.baja.logicState = bbs.check_syspass();'; } +// CREATE_SIF <"str"> +baja["CREATE_SIF"] = function(var1) { + var line = ''; + if(!functions["SIF"]) { + functions["SIF"] = true; + line += 'load("siflib.js");\r\n'; + } + return line + 'SIF.create(' + var1 + '.sif,bbs.command_str);'; +} + +// Miscellaneous Functions +// ----------------------- +// ONLINE +baja["ONLINE"] = function() { return "bbs.online = (2);"; } +// OFFLINE +baja["OFFLINE"] = function() { return "bbs.online = (1);"; } +// LOGIN <"cstr"> +baja["LOGIN"] = function(var1) { return "bbs.login(bbs.command_str," + var1 + ");"; } +// LOGON +baja["LOGON"] = function() { return "bbs.logon();"; } +// LOGOFF +baja["LOGOFF"] = function() { return "bbs.logoff();"; } +// LOGOFF_FAST +baja["LOGOFF_FAST"] = function() { return "bbs.nodesync();\r\nbbs.hangup();"; } +// LOGOUT +baja["LOGOUT"] = function() { return "bbs.logout();"; } +// NEWUSER +baja["NEWUSER"] = function() { return "bbs.newuser();"; } +// SET_MENU_DIR <"str"> +baja["SET_MENU_DIR"] = function(var1) { return "bbs.menu_dir = " + var1 + ";"; } +// SET_MENU_FILE <"str"> +baja["SET_MENU_FILE"] = function(var1) { return "bbs.menu_file = " + var1 + ";"; } +// SYNC +baja["SYNC"] = function(var1) { return "bbs.nodesync();"; } +// ASYNC +baja["ASYNC"] = baja["SYNC"]; +// RIOSYNC +baja["RIOSYNC"] = baja["SYNC"]; +// PUT_NODE +baja["PUT_NODE"] = baja["SYNC"]; +// PAUSE_RESET +baja["PAUSE_RESET"] = function() { return "console.line_counter = 0;"; } +// CLEAR_ABORT +baja["CLEAR_ABORT"] = function() { return "console.aborted = false;"; } +// UNGETKEY +baja["UNGETKEY"] = function() { return "console.ungetstr(system.baja.cmdKey);"; } +// UNGETSTR +baja["UNGETSTR"] = function() { return "console.ungetstr(bbs.command_str);"; } +// HANGUP +baja["HANGUP"] = function() { return "bbs.hangup();"; } +// EXEC <"str"> +baja["EXEC"] = function(var1) { return "bbs.exec(" + var1 + ");"; } +// EXEC_INT <"str"> +baja["EXEC_INT"] = function(var1) { return "bbs.exec(" + var1 + ",(1<<1));"; } +// EXEC_BIN <"str"> +baja["EXEC_BIN"] = function(var1) { return "bbs.exec(\"*" + var1.replace(/\"/g,'') + "\");"; } +// EXEC_XTRN <"str"> +baja["EXEC_XTRN"] = function(var1) { + var line = 'if(typeof xtrn_area.prog[' + var1 + '] != "undefined" &&'; + line += 'user.compare_ars(xtrn_area.prog[' + var1 + '].ars)) {\r\n'; + line += 'bbs.exec_xtrn(' + var1 + ');\r\n'; + line += '}'; + return line; +} +// LOG <"cstr"> +baja["LOG"] = function(var1) { return "log(" + var1 + ");"; } +// LOGSTR +baja["LOGSTR"] = function(var1) { return "bbs.log_str(bbs.command_str);"; } +// LOGKEY +baja["LOGKEY"] = function(var1) { return "bbs.log_key(system.baja.cmdKey);"; } +// LOGKEY_COMMA +baja["LOGKEY_COMMA"] = function(var1) { return "bbs.log_key(system.baja.cmdKey,true);"; } +// NODE_STATUS <#> +baja["NODE_STATUS"] = function(var1) { + return "system.node_list[bbs.node_num-1].status = " + var1 + ";"; +} +// NODE_ACTION <#> +baja["NODE_ACTION"] = function(var1) { return "bbs.node_action = " + var1 + ";"; } +// INC_MAIN_CMDS +baja["INC_MAIN_CMDS"] = function(var1) { return "bbs.main_cmds++;"; } +// INC_FILE_CMDS +baja["INC_FILE_CMDS"] = function(var1) { return "bbs.file_cmds++;"; } +// COMPARE_USER_MISC <#> +baja["COMPARE_USER_MISC"] = function(var1) { + return format("system.baja.logicState = (user.settings&(%s) == %s)?TRUE:FALSE;",var1,var1); +} +// COMPARE_USER_CHAT <#> +baja["COMPARE_USER_CHAT"] = function(var1) { + return format("system.baja.logicState = (user.chat_settings&(%s) == %s)?TRUE:FALSE;",var1,var1); +} +// COMPARE_USER_QWK <#> +baja["COMPARE_USER_QWK"] = function(var1) { + return format("system.baja.logicState = (user.qwk_settings&(%s) == %s)?TRUE:FALSE;",var1,var1); +} +// COMPARE_NODE_MISC <#> +baja["COMPARE_NODE_MISC"] = function(var1) { + return format("system.baja.logicState = (system.node_list[bbs.node_num].misc&(%s) == %s)?TRUE:FALSE;",var1,var1); +} +// TOGGLE_USER_MISC <#> +baja["TOGGLE_USER_MISC"] = function(var1) { return format("user.settings ^= (%s);",var1); } +// TOGGLE_USER_CHAT <#> +baja["TOGGLE_USER_CHAT"] = function(var1) { return format("user.chat_settings ^= (%s);",var1); } +// TOGGLE_USER_QWK <#> +baja["TOGGLE_USER_QWK"] = function(var1) { return format("user.qwk_settings ^= (%s);",var1); } +// TOGGLE_NODE_MISC <#> +baja["TOGGLE_NODE_MISC"] = function(var1) { + return format("system.node_list[bbs.node_num].misc ^= (%s);",var1); +} +// TOGGLE_USER_FLAG <char> <char> +baja["TOGGLE_USER_FLAG"] = function(var1,var2) { + return "user.security.flags" + var1 + " ^= (" + var2 + ");"; +} +// ADJUST_USER_CREDITS <#> +baja["ADJUST_USER_CREDITS"] = function(var1) { + return "user.security.credits += " + var1 + ";"; +} +// ADJUST_USER_MINUTES <#> +baja["ADJUST_USER_MINUTES"] = function(var1) { + return "user.security.minutes += " + var1 + ";"; +} +// SET_USER_LEVEL <#> +baja["SET_USER_LEVEL"] = function(var1) { + return "user.security.level = " + var1 + ";"; +} +// SET_USER_STRING <#> +baja["SET_USER_STRING"] = function(var1) { + // !define USER_STRING_ALIAS 0 + // !define USER_STRING_REALNAME 1 + // !define USER_STRING_HANDLE 2 + // !define USER_STRING_COMPUTER 3 + // !define USER_STRING_NOTE 4 + // !define USER_STRING_ADDRESS 5 + // !define USER_STRING_LOCATION 6 + // !define USER_STRING_ZIPCODE 7 + // !define USER_STRING_PASSWORD 8 + // !define USER_STRING_BIRTHDAY 9 + // !define USER_STRING_PHONE 10 + // !define USER_STRING_MODEM 11 + // !define USER_STRING_COMMENT 12 + // !define USER_STRING_NETMAIL 13 # Requires v3 (03/02/00) or later + var uStrings = [ + "alias","name","handle","computer", + "note","address","location","zipcode", + "security.password","birthdate","phone", + "modem","comment","netmail" + ]; + return "user." + uStrings[var1] + " = bbs.command_str;"; +} +// USER_EVENT <#> +baja["USER_EVENT"] = function(var1) { + return "bbs.user_event(" + var1 + ");"; +} +// AUTO_MESSAGE +baja["AUTO_MESSAGE"] = function() { + var line = "if(!(user.security.restrictions&UFLAG_W)) {\r\n"; + line += "bbs.auto_msg();\r\n"; + line += "}"; + return line; +} +// USER_DEFAULTS +baja["USER_DEFAULTS"] = function() { + var line = "if(!(user.security.restrictions&UFLAG_G)) {\r\n"; + line += "bbs.user_config();\r\n"; + line += "}"; + return line; +} +// USER_EDIT +baja["USER_EDIT"] = function() { + var line = "if(user.compare_ars(\"SYSOP\") || (bbs.sys_status&SS_TMPSYSOP)) {\r\n"; + line += "bbs.edit_user();\r\n"; + line += "}"; + return line; +} +// TEXT_FILE_SECTION +baja["TEXT_FILE_SECTION"] = function() { + return "bbs.text_sec();"; +} +// XTRN_EXEC +baja["XTRN_EXEC"] = function() { + var line = 'if(typeof xtrn_area.prog[bbs.command_str] != "undefined" &&'; + line += 'user.compare_ars(xtrn_area.prog[bbs.command_str].ars)) {\r\n'; + line += 'bbs.exec_xtrn(bbs.command_str);\r\n'; + line += '}'; + return line; +} +// XTRN_SECTION +baja["XTRN_SECTION"] = function() { + return "bbs.xtrn_sec();"; +} +// MINUTE_BANK +baja["MINUTE_BANK"] = function() { + return "bbs.time_bank();"; +} +// CHANGE_USER +baja["CHANGE_USER"] = function() { + var line = "if(user.compare_ars(\"SYSOP\") || (bbs.sys_status&SS_TMPSYSOP)) {\r\n"; + line += "bbs.change_user();\r\n"; + line += "}"; + return line; +} +// ANSI_CAPTURE (v2 only) *NOT SUPPORTED* +// FINDUSER +baja["FINDUSER"] = function() { + return "system.baja.logicState = (bbs.finduser(" + bbs.command_str + ")?TRUE:FALSE);"; +} +// SELECT_SHELL +baja["SELECT_SHELL"] = function() { + return "system.baja.logicState = (bbs.select_shell()?TRUE:FALSE);"; +} +// SET_SHELL +baja["SET_SHELL"] = function() { + var line = "user.command_shell = bbs.command_str;\r\n"; + line += "system.baja.logicState = (user.command_shell == bbs.command_str?TRUE:FALSE);"; + return line; +} +// SELECT_EDITOR +baja["SELECT_EDITOR"] = function() { + return "system.baja.logicState = (bbs.select_editor()?TRUE:FALSE);"; +} +// SET_EDITOR +baja["SET_EDITOR"] = function() { + var line = "user.editor = bbs.command_str;\r\n"; + line += "system.baja.logicState = (user.editor == bbs.command_str?TRUE:FALSE);\r\n"; + return line; +} +// TRASHCAN <"str"> +baja["TRASHCAN"] = function(var1) { + var line = "system.baja.logicState = (system.trashcan(system.text_dir" + var1 + ",bbs.command_str)?TRUE:FALSE);"; + line += "if(system.baja.logicState == TRUE && file_exists(system.text_dir + \"bad" + var1 + ".msg\") {\r\n"; + line += "console.printfile(system.text_dir + \"bad" + var1 + ".msg\");\r\n"; + line += "}"; + return line; +} +// GETTIMELEFT +baja["GETTIMELEFT"] = function() { + var line = "if(bbs.time_left() == 0) {\r\n"; + line += "console.print(\"Out of time\");\r\n"; + line += "bbs.hangup();\r\n"; + line += "}"; +} +// MSWAIT <#> +baja["MSWAIT"] = function(num1) { return "mswait(" + num1 + ");"; } +// SEND_FILE_VIA <char> <"str" or str_var> +baja["SEND_FILE_VIA"] = function(var1,var2) { + return format("bbs.send_file(%s,%s);",var2,var1); +} +// RECEIVE_FILE_VIA <char> <"str" or str_var> +baja["RECEIVE_FILE_VIA"] = function(var1,var2) { + return format("bbs.receive_file(%s,%s);",var2,var1); +} + +// Mail Functions +// -------------- +// MAIL_READ +baja["MAIL_READ"] = function() { + return 'bbs.read_mail(MAIL_YOUR);'; +} +// MAIL_READ_SENT +baja["MAIL_READ_SENT"] = function() { + return 'bbs.read_mail(MAIL_SENT);'; +} +// MAIL_READ_ALL +baja["MAIL_READ_ALL"] = function() { + return 'if(bbs.check_syspass()) bbs.read_mail(MAIL_ALL);'; +} +// MAIL_SEND +baja["MAIL_SEND"] = function() { + return 'bbs.email(bbs.command_str);'; +} +// MAIL_SEND_FILE +baja["MAIL_SEND_FILE"] = function() { + return 'bbs.email(bbs.command_str, WM_EMAIL|WM_FILE);'; +} +// MAIL_SEND_BULK +baja["MAIL_SEND_BULK"] = function() { + return 'bbs.bulk_mail();'; +} +// MAIL_SEND_FEEDBACK +baja["MAIL_SEND_FEEDBACK"] = function() { + return + 'var u = new User(1);\r\n' + + 'bbs.email(u.alias, subject="Re: Feedback");'; +} +// MAIL_SEND_NETMAIL +baja["MAIL_SEND_NETMAIL"] = function() { + return + 'system.baja.userInput = console.getstr("", mode=K_LINE);\r\n' + + 'bbs.netmail(system.baja.userInput);'; +} +// MAIL_SEND_NETFILE +baja["MAIL_SEND_NETFILE"] = function() { + return + 'system.baja.userInput = console.getstr("", mode=K_LINE);\r\n' + + 'bbs.netmail(system.baja.userInput, mode=WM_NETMAIL|WM_FILE);' +} + +// Message Base Functions +// ---------------------- +// MSG_SET_AREA +baja["MSG_SET_AREA"] = function() { + return + 'if(typeof msg_area.sub[bbs.command_str] == "undefined" || !user.compare_ars(msg_area.sub[bbs.command_str].ars)) {\r\n' + + 'system.baja.logicState = FALSE;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'bbs.cursub = msg_area.sub[bbs.command_str].number;\r\n' + + 'bbs.cursub_code = bbs.command_str;\r\n' + + '}'; +} +// MSG_SET_GROUP +baja["MSG_SET_GROUP"] = function() { + return + 'if(typeof msg_area.grp[bbs.command_str] == "undefined" || !user.compare_ars(msg_area.grp[bbs.command_str].ars)) {\r\n' + + 'system.baja.logicState = FALSE;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'bbs.curgrp = msg_area.grp[bbs.command_str].number;\r\n' + + '}'; +} +// MSG_SELECT_AREA +baja["MSG_SELECT_AREA"] = function() { + return + 'system.baja.logicState = FALSE;' + + 'for(var g = 0; g < msg_area.grp_list.length; g++) {\r\n' + + 'console.uselect(g + 1, "Message Group", msg_area.grp_list[g].description);\r\n' + + '}\r\n' + + 'var grp = console.uselect();\r\n' + + 'if(grp > 0 && grp <= msg_area.grp_list.length) {\r\n' + + 'for(var s = 0; s < msg_area.grp_list[grp - 1].sub_list.length; s++) {\r\n' + + 'console.uselect(s + 1, "Message Area", msg_area.grp_list[grp - 1].sub_list[s].description);\r\n' + + '}\r\n' + + 'var sub = console.uselect();' + + 'if(sub > 0 && sub <= msg_area.grp_list[grp - 1].sub_list.length) {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'bbs.curgrp = msg_area.grp_list[grp - 1].number;\r\n' + + 'bbs.cursub = msg_area.grp_list[grp - 1].sub_list[sub - 1].number;\r\n' + + 'bbs.cursub_code = msg_area.grp_list[grp - 1].sub_list[sub - 1]. code;\r\n' + + '}\r\n' + + '}'; +} +// MSG_SHOW_GROUPS +// This is fairly close to the output of the Baja function, but not exact. +// If I can determine which string from text.dat Baja is using, I will update this later. -ec +baja["MSG_SHOW_GROUPS"] = function() { + return + 'console.putmsg(bbs.text(127));' + + 'for(var g = 0; g < msg_area.grp_list.length; g++) {\r\n' + + 'console.putmsg(format(bbs.text(128), g + 1, msg_area.grp_list[g].description, "", msg_area.grp_list[g].sub_list.length));\r\n' + + '}'; +} +// MSG_SHOW_SUBBOARDS +// Same issue as MSG_SHOW_GROUPS - probably needs to be revised later. +baja["MSG_SHOW_SUBBOARDS"] = function() { + return + 'for(var g in msg_area.grp_list) {\r\n' + + 'if(msg_area.grp_list[g].number != bbs.curgrp)\r\n' + + 'continue;\r\n' + + 'console.putmsg(format(bbs.text(125), msg_area.grp_list[g].description));\r\n' + + 'for(var s = 0; s < msg_area.grp_list[g].sub_list.length; s++) {\r\n' + + 'var mb = new MsgBase(msg_area.grp_list[g].sub_list[s].code);\r\n' + + 'mb.open();\r\n' + + 'var tm = mb.total_msgs;\r\n' + + 'mb.close();\r\n' + + 'console.putmsg(format(bbs.text(126), s + 1, msg_area.grp_list[g].sub_list[s].description, "", tm));\r\n' + + '}\r\n' + + 'break;' + + '}'; +} +// MSG_GROUP_UP +baja["MSG_GROUP_UP"] = function() { + return + 'var cg = bbs.curgrp;\r\n' + + 'bbs.curgrp++;\r\n' + + 'if(cg == bbs.curgrp) bbs.curgrp = 0;\r\n'; +} +// MSG_GROUP_DOWN +baja["MSG_GROUP_DOWN"] = function() { + return + 'var cg = bbs.curgrp;\r\n' + + 'bbs.curgrp--;\r\n' + + 'if(cg == bbs.curgrp) bbs.curgrp = msg_area.grp_list.length - 1;'; +} +// MSG_SUBBOARD_UP +baja["MSG_SUBBOARD_UP"] = function() { + return + 'var cs = bbs.cursub;\r\n' + + 'bbs.cursub++;\r\n' + + 'if(cs == bbs.cursub) bbs.cursub = 0;\r\n'; +} +// MSG_SUBBOARD_DOWN +baja["MSG_SUBBOARD_DOWN"] = function() { + return + 'var cs = bbs.cursub;\r\n' + + 'bbs.cursub--;\r\n' + + 'if(cs == bbs.cursub)\r\n' + + 'bbs.cursub = msg_area.grp_list[bbs.curgrp].sub_list.length - 1;'; +} +// MSG_GET_SUB_NUM +// bbs.cursub starts at zero, but Baja's msg sub & group lists start at 1, so we'll adjust for that. +baja["MSG_GET_SUB_NUM"] = function() { + return 'bbs.cursub = console.getnum(msg_area.grp_list[bbs.curgrp].sub_list.length, bbs.cursub) - 1;'; +} +// MSG_GET_GRP_NUM +baja["MSG_GET_GRP_NUM"] = function() { + return 'bbs.curgrp = console.getnum(msg_area.grp_list.length, bbs.curgrp) - 1;'; +} +// MSG_READ +baja["MSG_READ"] = function() { + return 'bbs.scan_msgs(bbs.cursub_code, SCAN_READ);'; +} +// MSG_POST +baja["MSG_POST"] = function() { + return 'system.baja.logicState = bbs.post_msg();'; +} +// MSG_QWK +baja["MSG_QWK"] = function() { + return 'bbs.qwk_sec();'; +} +// MSG_PTRS_CFG +baja["MSG_PTRS_CFG"] = function() { + return 'bbs.cfg_msg_ptrs();'; +} +// MSG_PTRS_REINIT +baja["MSG_PTRS_REINIT"] = function() { + return 'bbs.reinit_msg_ptrs();'; +} +// MSG_NEW_SCAN_CFG +baja["MSG_NEW_SCAN_CFG"] = function() { + return 'bbs.cfg_msg_scan(SCAN_CFG_NEW);'; +} +// MSG_NEW_SCAN +baja["MSG_NEW_SCAN"] = function() { + return 'bbs.scan_subs();'; +} +// MSG_NEW_SCAN_ALL +baja["MSG_NEW_SCAN_ALL"] = function() { + return 'bbs.scan_subs(SCAN_NEW, true);'; +} +// MSG_NEW_SCAN_SUB +baja["MSG_NEW_SCAN_SUB"] = function() { + return 'system.baja.logicState = bbs.scan_msgs(bbs.cursub_code, SCAN_NEW);'; +} +// MSG_CONT_SCAN +baja["MSG_CONT_SCAN"] = function() { + return 'bbs.scan_subs(SCAN_CONST);'; +} +// MSG_CONT_SCAN_ALL +baja["MSG_CONT_SCAN_ALL"] = function() { + return 'bbs.scan_subs(SCAN_CONST, true);'; +} +// MSG_BROWSE_SCAN +baja["MSG_BROWSE_SCAN"] = function() { + return 'bbs.scan_subs(SCAN_BACK);'; +} +// MSG_BROWSE_SCAN_ALL +baja["MSG_BROWSE_SCAN_ALL"] = function() { + return 'bbs.scan_subs(SCAN_BACK, true);'; +} +// MSG_FIND_TEXT +baja["MSG_FIND_TEXT"] = function() { + return 'bbs.scan_subs(SCAN_FIND);'; +} +// MSG_FIND_TEXT_ALL +baja["MSG_FIND_TEXT_ALL"] = function() { + return 'bbs.scan_subs(SCAN_FIND, true);'; +} +// MSG_YOUR_SCAN_CFG +baja["MSG_YOUR_SCAN_CFG"] = function() { + return 'bbs.cfg_msg_scan(SCAN_CFG_TOYOU);'; +} +// MSG_YOUR_SCAN +baja["MSG_YOUR_SCAN"] = function() { + return 'bbs.scan_subs(SCAN_NEW|SCAN_TOYOU);'; +} +// MSG_YOUR_SCAN_ALL +baja["MSG_YOUR_SCAN_ALL"] = function() { + return 'bbs.scan_subs(SCAN_NEW|SCAN_TOYOU, true);'; +} + +// File Base Functions +// ------------------- +// FILE_SET_AREA +baja["FILE_SET_AREA"] = function() { + return + 'if(typeof file_area.dir[bbs.command_str.toLowerCase()] != "undefined" && bbs.compare_ars(file_area.dir[bbs.command_str.toLowerCase()].ars)) {\r\n' + + 'bbs.curdir = file_area.dir[bbs.command_str.toLowerCase()].number;\r\n' + + 'bbs.curdir_code = file_area.dir[bbs.command_str.toLowerCase()].code;\r\n' + + 'system.baja.logicState = true;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = false;\r\n' + + '}'; +} +// FILE_SET_LIBRARY +baja["FILE_SET_LIBRARY"] = function() { + return + 'if(typeof file_area.lib[bbs.command_str.toLowerCase()] != "undefined" && bbs.compare_ars(file_area.lib[bbs.command_str.toLowerCase()].ars)) {\r\n' + + 'bbs.curlib = file_area.lib[bbs.command_str.toLowerCase()].number;\r\n' + + 'system.baja.logicState = true;\r\n' + + '} else {\r\n' + + 'system.baja.logicState = false;\r\n' + + '}'; +} +// FILE_SELECT_AREA +baja["FILE_SELECT_AREA"] = function() { + return + baja["FILE_SHOW_LIBRARIES"]() + + "\r\n" + + "bbs.curlib = console.getnum(file_area.lib_list.length, bbs.curdir + 1) - 1;\r\n" + + baja["FILE_SHOW_DIRECTORIES"]() + + "bbs.curdir = console.getnum(file_area.lib_list[bbs.curlib].dir_list.length, 1) - 1;\r\n"; +} +// FILE_SHOW_LIBRARIES +baja["FILE_SHOW_LIBRARIES"] = function() { + return + 'console.putmsg(bbs.text(181));\r\n' + + 'for(var l = 0; l < file_area.lib_list.length; l++) {\r\n' + + 'console.putmsg(format(bbs.text(182), l + 1, file_area.lib_list[l].description, "",file_area.lib_list[l].dir_list.length));\r\n' + + '}'; +} +// FILE_SHOW_DIRECTORIES +baja["FILE_SHOW_DIRECTORIES"] = function() { + return 'console.putmsg(format(bbs.text(179), file_area.lib_list[bbs.curlib].description));' + + 'for(var d = 0; d < file_area.lib_list[bbs.curlib].dir_list.length; d++) {\r\n' + + 'console.putmsg(format(bbs.text(180), d, ' + + 'file_area.lib_list[bbs.curlib].dir_list[d].description, "",' + + 'directory(file_area.lib_list[bbs.curlib].dir_list[d].path + "*.*").length));\r\n' + + '}'; +} +// FILE_LIBRARY_UP +baja["FILE_LIBRARY_UP"] = function() { + return + 'var cl = bbs.curlib;\r\n' + + 'bbs.curlib++;\r\n' + + 'if(cl == bbs.curlib) bbs.curlib = 0;\r\n'; +} +// FILE_LIBRARY_DOWN +baja["FILE_LIBRARY_DOWN"] = function() { + return + 'var cl = bbs.curlib;\r\n' + + 'bbs.curlib--;\r\n' + + 'if(cl == bbs.curlib) bbs.curlib = file_area.lib_list.length - 1;'; +} +// FILE_DIRECTORY_UP +baja["FILE_DIRECTORY_UP"] = function() { + return + 'var cd = bbs.curdir;\r\n' + + 'bbs.curdir++;\r\n' + + 'if(cd == bbs.curdir) bbs.curdir = 0;\r\n'; +} +// FILE_DIRECTORY_DOWN +baja["FILE_DIRECTORY_DOWN"] = function() { + return + 'var cd = bbs.curdir;\r\n' + + 'bbs.curdir--;\r\n' + + 'if(cd == bbs.curdir)\r\n' + + 'bbs.curdir = file_area.lib_list[bbs.curlib].dir_list.length - 1;'; +} +// FILE_GET_DIR_NUM +baja["FILE_GET_DIR_NUM"] = function() { + return 'bbs.curdir = console.getnum(file_area.lib_list[bbs.curlib].dir_list.length, bbs.curdir) - 1;'; +} +// FILE_GET_LIB_NUM +baja["FILE_GET_LIB_NUM"] = function() { + return 'bbs.curlib = console.getnum(file_area.lib_list.length, bbs.curlib) - 1;'; +} +// FILE_LIST +baja["FILE_LIST"] = function() { + return + 'var res = bbs.list_files(bbs.curdir_code, bbs.command_str);' + + 'system.baja.logicState = (res < 0) ? FALSE : TRUE;'; +} +// FILE_LIST_EXTENDED +baja["FILE_LIST_EXTENDED"] = function() { +// Baja docs do not state that this function affects the logic state. +// This will need to be verified, the commented code here used instead if so. +// var line = 'var res = bbs.list_file_info(bbs.curdir_code, bbs.command_str);'; +// line += 'system.baja.logicState = (res < 0) ? FALSE : TRUE;'; +// return line; + return 'bbs.list_file_info(bbs.curdir_code, bbs.command_str);'; +} +// FILE_VIEW +baja["FILE_VIEW"] = function() { + return 'bbs.list_files(bbs.curdir_code, bbs.command_str, FL_VIEW);'; +} +// FILE_UPLOAD +baja["FILE_UPLOAD"] = function() { + return 'system.baja.logicState = bbs.upload_file();'; +} +// FILE_UPLOAD_USER +baja["FILE_UPLOAD_USER"] = function() { + return 'system.baja.logicState = bbs.upload_file("USER");'; +} +// FILE_UPLOAD_SYSOP +baja["FILE_UPLOAD_SYSOP"] = function() { + return 'system.baja.logicState = bbs.upload_file("SYSOP");'; +} +// FILE_DOWNLOAD +baja["FILE_DOWNLOAD"] = function() { + return 'if(bbs.check_syspass()) bbs.send_file(bbs.command_str);'; +} +// FILE_DOWNLOAD_USER +baja["FILE_DOWNLOAD_USER"] = function() { + return 'system.baja.logicState = bbs.list_files("USER", mode=FI_USERXFER);'; +} +// FILE_DOWNLOAD_BATCH +baja["FILE_DOWNLOAD_BATCH"] = function() { return 'system.baja.logicState = (bbs.batch_download()) ? TRUE : FALSE;'; } +// FILE_REMOVE +baja["FILE_REMOVE"] = function() { return 'bbs.list_file_info(bbs.curdir_code, bbs.command_str, FI_REMOVE);'; } +// FILE_BATCH_ADD +baja["FILE_BATCH_ADD"] = function() { + return + 'var fn = format("%s/user/%04d.batch", system.data_dir, user.number);\r\n' + + 'var f = new File(fn);\r\n' + + 'f.open("w");\r\n' + + 'f.write(bbs.command_str);\r\n' + + 'f.close();\r\n' + + 'bbs.batch_add_list(fn);'; +} +// FILE_BATCH_ADD_LIST +baja["FILE_BATCH_ADD_LIST"] = function() { return 'bbs.batch_add_list(bbs.command_str);'; } +// FILE_BATCH_CLEAR +baja["FILE_BATCH_CLEAR"] = function() { return 'bbs.batch_dnload_total = 0;'; } +// FILE_BATCH_SECTION +baja["FILE_BATCH_SECTION"] = function() { return 'bbs.batch_menu();'; } +// FILE_TEMP_SECTION +baja["FILE_TEMP_SECTION"] = function() { return 'bbs.temp_xfer();'; } +// FILE_NEW_SCAN +baja["FILE_NEW_SCAN"] = function() { return 'bbs.scan_dirs();'; } +// FILE_NEW_SCAN_ALL +baja["FILE_NEW_SCAN_ALL"] = function() { return 'bbs.scan_dirs(FL_NONE, true);'; } +// FILE_FIND_TEXT +baja["FILE_FIND_TEXT"] = function() { return 'bbs.scan_dirs(FL_FINDDESC);'; } +// FILE_FIND_TEXT_ALL +baja["FILE_FIND_TEXT_ALL"] = function() { return 'bbs.scan_dirs(FL_FINDDESC, true);'; } +// FILE_FIND_NAME +baja["FILE_FIND_NAME"] = function() { return 'bbs.list_files(bbs.curdir_code, bbs.get_filespec());'; } +// FILE_FIND_NAME_ALL +baja["FILE_FIND_NAME_ALL"] = function() { + return + 'system.baja.temp = bbs.get_filespec();\r\n' + + 'for(var d in file_area.dir) {\r\n' + + 'if(!file_area.dir[d].can_download) continue;\r\n' + + 'bbs.list_files(file_area.dir[d].code, system.baja.temp);\r\n' + + '}'; +} +// FILE_PTRS_CFG +baja["FILE_PTRS_CFG"] = function() { + return 'system.baja.logicState = (bbs.last_new_file_time == bbs.get_newscantime()) ? FALSE : TRUE;'; +} +// FILE_SET_ALT_PATH +baja["FILE_SET_ALT_PATH"] = function() { return 'if(bbs.check_syspass()) bbs.alt_ul_dir = bbs.command_str;'; } +// FILE_RESORT_DIRECTORY +baja["FILE_RESORT_DIRECTORY"] = function() { + return + 'if(bbs.command_str == "ALL") {\r\n' + + 'for(var d in file_area.dir)\r\n' + + 'bbs.resort_dir(file_area.dir[d].code);\r\n' + + '} else if(bbs.command_str == "LIB") {\r\n' + + 'for(var d in file_area.lib_list[bbs.curlib].dir_list)\r\n' + + 'bbs.resort_dir(file_area.lib_list[bbs.curlib].dir_list[d].code);\r\n' + + '} else {\r\n' + + 'bbs.resort_dir(bbs.curdir_code);\r\n' + + '}'; +} +// FILE_SEND +baja["FILE_SEND"] = function() { + return 'bbs.send_file(bbs.command_str);'; +} +// FILE_GET +baja["FILE_GET"] = function() { + return 'if(bbs.check_syspass()) bbs.send_file(bbs.command_str);'; +} +// FILE_PUT +baja["FILE_PUT"] = function() { + return 'if(bbs.check_syspass()) bbs.receive_file(bbs.command_str);'; +} +// FILE_UPLOAD_BULK +baja["FILE_UPLOAD_BULK"] = function() { + return + 'if(bbs.command_str == "ALL") {\r\n' + + 'for(var d in file_area.dir)\r\n' + + 'bbs.bulk_upload(file_area.dir[d].code);\r\n' + + '} else if(bbs.command_str == "LIB") {\r\n' + + 'for(var d in file_area.lib_list[bbs.curlib].dir_list)\r\n' + + 'bbs.bulk_upload(file_area.lib_list[bbs.curlib].dir_list[d].code);\r\n' + + '} else {\r\n' + + 'bbs.bulk_upload(bbs.curdir_code);\r\n' + + '}'; +} +// FILE_FIND_OLD +baja["FILE_FIND_OLD"] = function() { + return 'if(bbs.check_syspass()) bbs.list_file_info(bbs.command_str, mode=FI_OLD);'; +} +// FILE_FIND_OPEN +baja["FILE_FIND_OPEN"] = function() { return 'bbs.list_file_info(bbs.command_str, mode=FI_CLOSE);'; } +// FILE_FIND_OFFLINE +baja["FILE_FIND_OFFLINE"] = function() { return 'bbs.list_file_info(bbs.command_str, mode=FI_OFFLINE);'; } +// FILE_FIND_OLD_UPLOADS +baja["FILE_FIND_OLD_UPLOADS"] = function() { + return 'if(bbs.check_syspass()) bbs.list_file_info(bbs.command_str, mode=FI_OLDUL);'; +} + +// Chat Functions +// -------------- +// PAGE_SYSOP +baja["PAGE_SYSOP"] = function() { return 'bbs.page_sysop();'; } +// PAGE_GURU +baja["PAGE_GURU"] = function() { return 'bbs.page_guru(bbs.command_str);'; } +// PRIVATE_CHAT +baja["PRIVATE_CHAT"] = function() { return 'bbs.private_chat();'; } +// PRIVATE_MESSAGE +baja["PRIVATE_MESSAGE"] = function() { return 'bbs.private_message();'; } +// CHAT_SECTION +baja["CHAT_SECTION"] = function() { return 'load("chat_sec.js");'; } + +// Information Functions +// --------------------- +// INFO_SYSTEM +baja["INFO_SYSTEM"] = function() { return 'bbs.sys_info();'; } +// INFO_SUBBOARD +baja["INFO_SUBBOARD"] = function() { return 'bbs.sub_info();'; } +// INFO_DIRECTORY +baja["INFO_DIRECTORY"] = function() { return 'bbs.dir_info();'; } +// INFO_USER +baja["INFO_USER"] = function() { return 'bbs.user_info();'; } +// INFO_VERSION +baja["INFO_VERSION"] = function() { return 'bbs.ver();'; } +// INFO_XFER_POLICY +baja["INFO_XFER_POLICY"] = function() { return 'bbs.xfer_policy();'; } +// GURU_LOG +baja["GURU_LOG"] = function() { + var line = ""; + if(!functions["gurulog"]) { + line += "system.baja.gurulog = " + gurulog.toSource() + ";\r\n"; + functions["gurulog"] = true; + } + return line + "gurulog(\"guru.log\");"; +} +// ERROR_LOG +baja["ERROR_LOG"] = function() { + var line = ""; + if(!functions["errlog"]) { + line += "system.baja.errlog = " + errlog.toSource() + ";\r\n"; + functions["errlog"] = true; + } + return line + "system.baja.errlog(\"error.log\");"; +} +// SYSTEM_LOG +baja["SYSTEM_LOG"] = function() { + var line = ""; + if(!functions["syslog"]) { + line += "system.baja.syslog = " + syslog.toSource() + ";\r\n"; + functions["syslog"] = true; + } + return line + "system.baja.syslog(strftime(\"logs/%m%d%y.log\",time()));"; +} +// SYSTEM_YLOG +baja["SYSTEM_YLOG"] = function() { + var line = ""; + if(!functions["syslog"]) { + line += "system.baja.syslog = " + syslog.toSource() + ";\r\n"; + functions["syslog"] = true; + } + return line + "system.baja.syslog(strftime(\"logs/%m%d%y.log\",time()-24*60*60));"; +} +// SYSTEM_STATS +baja["SYSTEM_STATS"] = function() { return 'bbs.sys_stats();'; } +// NODE_STATS +baja["NODE_STATS"] = function() { return 'bbs.node_stats();'; } +// SHOW_MEM + +// File I/O Functions +// ------------------ +// FOPEN <int_var> <#> <"str" or str_var> +baja["FOPEN"] = function(var1,var2,var3) { + var line = var1 + " = new File(" + var3 + ");\r\n"; + var2 = var2.toUpperCase().replace(/O_/ig,'').split('|'); + var share = 'false'; + var mode = ''; + // O_RDONLY Read Only + // O_WRONLY Write Only + // O_RDWR Read and write + // O_CREAT Create (create if doesn't exist) + // O_APPEND Append (writes to end of file) + // O_TRUNC Truncate (truncates file to 0 bytes automatically) + // O_EXCL Exclusive (only open/create if file doesn't exist) + // O_DENYNONE Deny None (shareable, for use with record locking) + var o = {}; + for(var i=0;i<var2.length;i++) + o[var2[i]] = true; + if(o.DENYNONE) + share = "true"; +// r open for reading; if the file does not exist or cannot be found, the open call fails + if(o.RDONLY && !o.CREATE) + mode = 'r'; +// w open an empty file for writing; if the given file exists, its contents are destroyed + else if(o.WRONLY && o.CREATE && o.TRUNC) + mode = 'w'; +// a open for writing at the end of the file (appending); creates the file first if it doesn’t exist + else if(o.APPEND && !o.RDONLY && o.CREAT) + mode = 'a'; +// r+ open for both reading and writing (the file must exist) + else if(o.RDWR && !o.CREAT && !o.TRUNC) + mode = 'r+'; +// w+ open an empty file for both reading and writing; if the given file exists, its contents are destroyed + else if(o.RDWR && (o.CREAT || o.TRUNC)) + mode = 'r+'; +// a+ open for reading and appending + else if(o.APPEND && o.RDONLY) + mode = 'a'; +// b open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed (e.g. r+b) +// e open a non-shareable file (that must not already exist) for exclusive access (introduced in + else if(o.EXCL) + mode = 'e'; + var line = "if(system.baja.etx) " + var1 + ".etx = system.baja.etx;"; + return line + "system.baja.logicState = (" + var1 + ".open('" + mode + "'," + share + ")?TRUE:FALSE);"; +} +// FCLOSE <int_var> +baja["FCLOSE"] = function(var1) { return var1 + ".close();"; } +// FREAD <int_var> <any_var> [int_var or #] +/* needs to check the length of the variable if the passed var2 is +a string. if that string is 0 length, then 128 bytes are read */ +baja["FREAD"] = function(var1,var2,var3) { + if(variables[var2] == "STR") { + if(var3) + return var2 + " = " + var1 + ".read(" + var3 + ");"; + else + return var2 + " = " + var1 + ".read(" + var2 + ".length?" + var2 + ".length:128);"; + } + if(variables[var2] == "INT") { + return var2 + " = " + var1 + ".readBin(" + var3 + ");"; + } +} +// FWRITE <int_var> <any_var> [int_var or #] +baja["FWRITE"] = function(var1,var2,var3) { + if(variables[var2] == "STR") { + return var1 + ".write(" + var2 + ", " + (var3?var3:var2+".length") + ");"; + } + if(variables[var2] == "INT") { + return var1 + ".writeBin(" + var2 + ", " + (var3?var3:"4") + ");"; + } +} +// FFLUSH <int_var> +baja["FFLUSH"] = function(var1) { return var1 + ".flush();"; } +// FGET_LENGTH <int_var> <int_var> +baja["FGET_LENGTH"] = function(var1,var2) { return var2 + " = " + var1 + ".length;"; } +// FSET_LENGTH <int_var> <int_var or #> +baja["FSET_LENGTH"] = function(var1,var2) { return var1 + ".length = " + var2 + ";"; } +// FGET_TIME <int_var> <int_var> +baja["FGET_TIME"] = function(var1,var2) { return var2 + " = " + var1 + ".date;"; } +// FSET_TIME <int_var> <int_var> +/* not sure if the baja method uses time_t or UTC (time_t * 1000) */ +baja["FSET_TIME"] = function(var1,var2) { return var1 + ".date = " + (var2*1000) + ";"; } +// FEOF <int_var> +baja["FEOF"] = function(var1) { return "system.baja.logicState = (" + var1 + ".eof?TRUE:FALSE);"; } +// FGET_POS <int_var> <int_var> +baja["FGET_POS"] = function(var1,var2) { return var2 + " = " + var1 + ".position;"; } +// FSET_POS <int_var> <int_var or #> [#] +baja["FSET_POS"] = function(var1,var2) { return var1 + ".position = " + var2 + ";"; } +// FLOCK <int_var> <int_var or #> +baja["FLOCK"] = function(var1,var2) { return var1 + ".lock(" + var1 + ".position, " + var2 + ");"; } +// FUNLOCK <int_var> <int_var or #> +baja["FUNLOCK"] = function(var1,var2) { return var1 + ".unlock(" + var1 + ".position, " + var2 + ");"; } +// FPRINTF <int_var> <"cstr"> [any_var] [...] +baja["FPRINTF"] = function() { + var line = var1 + ".printf(" + var2; + for(var i=2;i<arguments.length;i++) + line += ", " + arguments[i]; + return line + ");"; +} +// FREAD_LINE <int_var> <any_var> +baja["FREAD_LINE"] = function(var1, var2) { return var2 + " = " + var1 + ".readln();"; } +// FSET_ETX <#> +/* i dont know what to do with this, really */ +baja["FSET_ETX"] = function(var1) { return "system.baja.etx = " + var1 + ";"; } + +// File System Functions +// --------------------- +// CHKFILE <"str" or str_var> +baja["CHKFILE"] = function(var1) { + return 'system.baja.logicState = file_exists(' + var1 + ');'; +} +// REMOVE_FILE <str_var> +baja["REMOVE_FILE"] = function(var1) { + return 'system.baja.logicState = file_removecase(' + var1 + ');'; +} +// RENAME_FILE <str_var> <str_var> +baja["RENAME_FILE"] = function(var1, var2) { + return 'system.baja.logicState = file_rename(' + var1 +',' + var2 + ');'; +} +// COPY_FILE <str_var> <str_var> +baja["COPY_FILE"] = function(var1, var2) { + return 'system.baja.logicState = file_copy(' + var1 +',' + var2 + ');'; +} +// MOVE_FILE <str_var> <str_var> +baja["MOVE_FILE"] = baja["RENAME_FILE"]; +// GET_FILE_ATTRIB <int_var> <str_var> +baja["GET_FILE_ATTRIB"] = function(var1, var2) { + return var1 + ' = file_attrib(' + var2 + ');'; +} +// SET_FILE_ATTRIB <int_var> <str_var> +// Not sure if this is sufficient ... needs testing. +baja["SET_FILE_ATTRIB"] = function(var1, var2) { + return + 'if(file_exists(var2)) {\r\n' + + 'system.baja.temp = new File(var2);\r\n' + + 'system.baja.temp.attributes = var1;\r\n' + + '}'; +} +// GET_FILE_TIME <int_var> <str_var> +baja["GET_FILE_TIME"] = function(var1, var2) { + return var1 + ' = file_date(' + var2 + ');'; +} +// GET_FILE_LENGTH <int_var> <str_var> +baja["GET_FILE_LENGTH"] = function(var1, var2) { + return var1 + ' = file_size(' + var2 + ');'; +} + +// Directory System Functions +// -------------------------- +// MAKE_DIR <str_var> +baja["MAKE_DIR"] = function(var1) { + return + 'system.baja.logicState = (mkdir(' + var1 + ')) ? TRUE : FALSE;\r\n' + + 'if(!system.baja.logicState) system.baja.errNo = errno;'; +} +// CHANGE_DIR <str_var> +baja["CHANGE_DIR"] = function(var1) { + return + 'if(!file_exists(' + var1 + ') || file_isdir(' + var1 + ')) {\r\n' + + 'system.baja.logicState = FALSE;\r\n' + + 'system.baja.errNo = 3;\r\n' + // Path not found. Kthnx? + '} else {\r\n' + + 'system.baja.logicState = TRUE;\r\n' + + 'js.exec_dir = ' + var1 + ';\r\n' + + '}'; +} +// REMOVE_DIR <str_var> +baja["REMOVE_DIR"] = function(var1) { + return + 'system.baja.logicState = (rmdir(' + var1 + ')) ? TRUE : FALSE;\r\n' + + 'if(!system.baja.logicState) system.baja.errNo = errno;'; +} +// OPEN_DIR <int_var> <str_var> +baja["OPEN_DIR"] = function(var1,var2) { + var line = "system.baja.logicState = (file_isdir(" + var2 + ")?TRUE:FALSE);\r\n"; + line += var1 + " = directory(" + var2 + ");"; + return line; +} +// READ_DIR <int_var> <str_var> +baja["READ_DIR"] = function(var1,var2) { + var line = "system.baja.logicState = (" + var1 + ".length > 0?TRUE:FALSE);\r\n"; + return var2 + " = " + var1 + "[++system.baja.dir];"; +} +// REWIND_DIR <int_var> +baja["REWIND_DIR"] = function(var1) { + return "system.baja.dir = 0;"; +} +// CLOSE_DIR <int_var> + +/***************************** SUPPORT FUNCTIONS **************************/ +function compare(var1,var2) { + system.baja.logicState = 0; + if(var1 == var2) + system.baja.logicState |= EQUAL; + else if(var1 > var2) + system.baja.logicState = GREATER; + else if(var1 < var2) + system.baja.logicState = EQUAL; +} + +function errlog() { + if((user.compare_ars("SYSOP") || (bbs.sys_status&SS_TMPSYSOP)) && bbs.check_syspass()) { + var errlog=system.logs_dir+"error.log"; + if(file_exists(errlog)) { + write(bbs.text(ErrorLogHdr)); + console.printfile(errlog); + if(!console.noyes(bbs.text(DeleteErrorLogQ))) + file_remove(errlog); + } + else { + write(format(bbs.text(FileDoesNotExist),errlog)); + } + var i = 0; + for(;i<system.nodes;i++) { + if(system.node_list[i].errors) + break; + } + if(i<system.nodes) { + if(!console.noyes(bbs.text(ClearErrCounter))) { + for(i=0;i<system.nodes;i++) { + system.node_list[i].errors=0; + } + } + } + } +} + +function syslog(file) { + if((user.compare_ars("SYSOP") || (bbs.sys_status&SS_TMPSYSOP)) && bbs.check_syspass()) { + var str=system.logs_dir+file; + console.printfile(str); + } +} + +function gurulog() { + if((user.compare_ars("SYSOP") || (bbs.sys_status&SS_TMPSYSOP)) && bbs.check_syspass()) { + if(file_exists(system.logs_dir+"guru.log")) { + console.printfile(system.logs_dir+"guru.log"); + console.crlf(); + if(!console.noyes(bbs.text(DeleteGuruLogQ))) + file_remove(system.logs_dir+"guru.log"); + } + } +} + +