function pgsh() {
this.prompt = 'pgs $ '
this.welcome = ''
this.commands = {
'about': {
'help': 'Author Information\nUsage: about',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Site by Weiyi Lou ' + new Date().getFullYear()
}
},
'clear': {
'help': 'Clears the screen\nUsage: clear',
'run' : function() { return 'clear' }
},
'version': {
'help': 'Shell Information\nUsage: version',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Parsley Gardens Shell (pgsh) 1.0.0. Built with Riot.js'
}
},
'git': {
'help': 'Link to Code Repository\nUsage: git',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Self-Hosted Code Repository at code.parsleygardens.net'
}
},
'hello': {
'help': 'Usage: hello [name]',
'run': function(args) {
address = args.join(' ').trim()
if (address.length == 0) {
return 'Hello to you too'
} else if (address == 'pgsh') {
return 'Hello human'
} else {
return 'My name is not "' + address + '"'
}
}
},
'magic': {
'help': 'Link to Artist\nUsage: magic',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Animation and Illustration at slightlymagic.com.au'
}
},
'su': {
'help': 'Substitute as root user for Phenomenal Cosmic Power\nUsage: su',
'run': function(args, context) {
if (args.length > 0) { return this.help }
var output = ''
if (!context.su) {
context.oldprompt = context.prompt
context.prompt = 'root % '
context.su = true
output = 'With Great Power comes Great'
}
return output
}
},
'exit': {
'help': 'Usage: exit',
'run': function(args, context) {
if (args.length > 0) { return this.help }
var output = 'Close browser window to exit'
if (context.su) {
context.prompt = context.oldprompt
context.su = false
output = ''
}
return output
}
},
'help': {
'help': 'List all commands or view information for a command\nUsage: help [command]',
'run': function(args, context) {
command = args.join(' ').trim()
if (command in context.commands) {
return context.commands[command].help
} else {
var output = (command) ? 'Command not found: ' + command + '\n' : ''
var commands = [];
for(var name in context.commands) {
if (name !== 'Parent') { commands.push(name) }
}
output += 'Available commands:\n' + commands.sort().join(' ')
return output
}
}
}
}
this.process = function(input) {
var parts = input.trim().split(' ')
// First word is the command, all others are arguments.
var command = parts.splice(0, 1)
var args = parts
var output = ''
if (command in this.commands) {
var shell = this
output += this.commands[command].run(args, shell)
}
return output
}
}