Clazz.declarePackage ("JU"); Clazz.load (null, "JU.CommandHistory", ["JU.Lst"], function () { c$ = Clazz.decorateAsClass (function () { this.commandList = null; this.maxSize = 100; this.nextCommand = 0; this.cursorPos = 0; this.isOn = true; this.lstStates = null; Clazz.instantialize (this, arguments); }, JU, "CommandHistory"); Clazz.makeConstructor (c$, function () { this.reset (100); }); Clazz.defineMethod (c$, "clear", function () { this.reset (this.maxSize); }); Clazz.defineMethod (c$, "reset", function (maxSize) { this.maxSize = maxSize; this.commandList = new JU.Lst (); this.nextCommand = 0; this.commandList.addLast (""); this.cursorPos = 0; }, "~N"); Clazz.defineMethod (c$, "setMaxSize", function (maxSize) { if (maxSize == this.maxSize) return; if (maxSize < 2) maxSize = 2; while (this.nextCommand > maxSize) { this.commandList.removeItemAt (0); this.nextCommand--; } if (this.nextCommand > maxSize) this.nextCommand = maxSize - 1; this.cursorPos = this.nextCommand; this.maxSize = maxSize; }, "~N"); Clazz.defineMethod (c$, "getCommandUp", function () { if (this.cursorPos <= 0) return null; this.cursorPos--; var str = this.getCommand (); if (str.endsWith ("#??")) this.removeCommand (this.cursorPos--); if (this.cursorPos < 0) this.cursorPos = 0; return str; }); Clazz.defineMethod (c$, "getCommandDown", function () { if (this.cursorPos >= this.nextCommand) return null; this.cursorPos++; return this.getCommand (); }); Clazz.defineMethod (c$, "getCommand", function () { return this.commandList.get (this.cursorPos); }); Clazz.defineMethod (c$, "addCommand", function (strCommand) { if (!this.isOn && !strCommand.endsWith ("#??")) return; if (strCommand.endsWith ("#----")) return; var i; while ((i = strCommand.indexOf ("\n")) >= 0) { var str = strCommand.substring (0, i); if (str.length > 0) this.addCommandLine (str); strCommand = strCommand.substring (i + 1); } if (strCommand.length > 0) this.addCommandLine (strCommand); }, "~S"); Clazz.defineMethod (c$, "getSetHistory", function (n) { this.isOn = (n == -2 ? this.isOn : true); switch (n) { case 0: this.isOn = false; this.clear (); return ""; case -2147483648: case -2: this.clear (); return ""; case -1: return this.getCommandUp (); case 1: return this.getCommandDown (); default: if (n < 0) { this.setMaxSize (-2 - n); return ""; }n = Math.max (this.nextCommand - n, 0); } var str = ""; for (var i = n; i < this.nextCommand; i++) if (!this.commandList.get (i).toUpperCase ().startsWith ("WRITE HISTORY")) str += this.commandList.get (i) + "\n"; return str; }, "~N"); Clazz.defineMethod (c$, "find", function (cmd, dir) { var cpos = this.cursorPos; var c = cmd; while (c != null) { c = this.getSetHistory (dir); if (c == null) break; if (c.startsWith (cmd)) return c; } this.cursorPos = cpos; return null; }, "~S,~N"); Clazz.defineMethod (c$, "removeCommand", function () { return this.removeCommand (this.nextCommand - 1); }); Clazz.defineMethod (c$, "removeCommand", function (n) { if (n < 0 || n >= this.nextCommand) return ""; var str = this.commandList.removeItemAt (n); this.nextCommand--; return str; }, "~N"); Clazz.defineMethod (c$, "addCommandLine", function (command) { if (command == null || command.length == 0) return; if (command.endsWith ("#--")) return; if (this.nextCommand >= this.maxSize) { this.commandList.removeItemAt (0); this.nextCommand = this.maxSize - 1; }this.commandList.add (this.nextCommand, command); this.nextCommand++; this.cursorPos = this.nextCommand; this.commandList.add (this.nextCommand, ""); }, "~S"); Clazz.defineMethod (c$, "pushState", function (stateInfo) { if (this.lstStates == null) this.lstStates = new JU.Lst (); this.lstStates.addLast (stateInfo); }, "~S"); Clazz.defineMethod (c$, "popState", function () { if (this.lstStates == null || this.lstStates.size () == 0) return null; var s = this.lstStates.removeItemAt (this.lstStates.size () - 1); return s; }); Clazz.defineStatics (c$, "ERROR_FLAG", "#??", "NOHISTORYLINE_FLAG", "#--", "NOHISTORYATALL_FLAG", "#----", "DEFAULT_MAX_SIZE", 100); });