     """
     Ctrl-D is EOF.
 
+    Lost? Try typing 'list_demos' to see what you can do.
+
     Java-related commands:
-      javac <source file>    -- Compile Java source.
+      javac <source file>    -- Invoke the Java 4 compiler.
       java <class> [args...] -- Run with command-line arguments.
       javap <class>          -- Display disassembly.
       time                   -- Measure how long it takes to run a command.
 
     File management:
-      load_demos             -- Load all demos.
       cat <file>             -- Display a file in the console.
       edit <file>            -- Edit a file.
       ls                     -- List all files.

    if args[0] == '*' then localStorage.clear()
    else DoppioFile.delete args[0]
    true
  load_demos: ->
    demos = ['special/DiffPrint.class', 'special/Chatterbot.java', 'special/Lzw.java',
      'special/RegexTestHarness.java', 'special/FileRead.java', 'special/foo',
      'special/bar']
    for demo in demos
      $.ajax "test/#{demo}", {
        type: 'GET'
        dataType: 'text'
        async: false
        beforeSend: (jqXHR) -> jqXHR.overrideMimeType('text/plain; charset=x-user-defined')
        success: (data) ->
          fname = _.last(demo.split '/')
          (new DoppioFile fname).write(data).save()
          controller.message "Loaded '#{fname}'.\n", 'success', true
        error: ->
          fname = _.last(demo.split '/')
          controller.message "Could not load '#{fname}'.\n", 'error', true
      }
    controller.message """
      All files should have been loaded.

      After compiling them, you may wish to try the following commands:
        java Chatterbot
        java DiffPrint foo bar
        java RegexTestHarness
        java FileRead
        java Lzw c foo foo_lzw (use 'cat' or 'edit' to see the result)
        java Lzw d foo_lzw foo

      After running these programs, use 'list_cache' to see the Java Class
      Library files that they depended upon.
    """
  emacs: -> "Try 'vim'."
  vim: -> "Try 'emacs'."

  error: (jqXHR, textStatus, errorThrown) ->
    console.error errorThrown
}

demo_files = ['special/DiffPrint.class', 'special/Chatterbot.java',
  'special/Chatterbot.class', 'special/Lzw.java', 'special/Lzw.class',
  'special/RegexTestHarness.java', 'special/RegexTestHarness.class',
  'special/FileRead.java', 'special/Fib.java', 'special/foo', 'special/bar']
for demo in demo_files
  $.ajax "test/#{demo}", {
    type: 'GET'
    dataType: 'text'
    async: false
    beforeSend: (jqXHR) -> jqXHR.overrideMimeType('text/plain; charset=x-user-defined')
    success: (data) ->
      fname = _.last(demo.split '/')
      (new DoppioFile fname).write(data).save()
    error: ->
      fname = _.last(demo.split '/')
      controller.message "Could not load '#{fname}'.\n", 'error', true
  }

if RELEASE?
  $.ajax "third_party/classes/sun/tools/javac/Main.class", {
