name = "list"; group = "files"; shortDescription = "List lines of a script"; longDescription = "list : : Lists lines around the given location."; longDescription += "\nlist : Lists lines in the current file."; argumentTypes = [ "script-filename" ]; listLineNumber = 1; listScriptId = -1; lastSessionId = -1; lastFrameIndex = -1; function execute() { state = 0; if (arguments.length > 0) { var arg = arguments[0]; var colonIndex = arg.lastIndexOf(':'); var fileName; var lineNumber; if (colonIndex == -1) { lineNumber = parseInt(arg); if (isNaN(lineNumber)) { fileName = arg; lineNumber = 1; } } else if (colonIndex == 0) { fileName = arg; lineNumber = 1; } else { fileName = arg.slice(0, colonIndex); lineNumber = parseInt(arg.slice(colonIndex+1)); } listLineNumber = Math.max(lineNumber, 1); if (fileName != undefined) { scheduleResolveScript(fileName); state = 1; } else { setCurrentLineNumber(listLineNumber); execute(); } } else { if ((getSessionId() != lastSessionId) || (getCurrentFrameIndex() != lastFrameIndex) || (listScriptId == -1)) { listScriptId = getCurrentScriptId(); listLineNumber = getCurrentLineNumber(); lastSessionId = getSessionId(); lastFrameIndex = getCurrentFrameIndex(); } scheduleGetScriptData(listScriptId); state = 2; } }; function handleResponse(resp) { if (state == 1) { var id = resp.result; if (id == -1) { message("That script isn't loaded."); state = 0; return; } listScriptId = id; scheduleGetScriptData(listScriptId); state = 2; } else if (state == 2) { var data = resp.result; if (data == undefined) { message("No script."); state = 0; return; } var base = data.baseLineNumber; var lines = data.contents.split('\n'); var start = Math.max(listLineNumber - 5, base); for (var i = start; i < start + 10; ++i) { var ln = lines[i - base]; var msg = String(i); if (ln != undefined) msg += "\t" + ln; message(msg); } listLineNumber += 10; state = 0; } }