Hex Artifact Content

Artifact d5a4940aef56b7c55402cbd9d25cb1962cd64585:


0000: 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  /* =============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 20 2d 2a 2d 20 43 2b 2b 20 2d  ====== -*- C++ -
0040: 2a 2d 0a 20 2a 20 74 63 6c 2e 6a 73 20 22 41 20  *-. * tcl.js "A 
0050: 54 63 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  Tcl implementati
0060: 6f 6e 20 69 6e 20 4a 61 76 61 73 63 72 69 70 74  on in Javascript
0070: 22 0a 20 2a 0a 20 2a 20 52 65 6c 65 61 73 65 64  ". *. * Released
0080: 20 75 6e 64 65 72 20 74 68 65 20 73 61 6d 65 20   under the same 
0090: 74 65 72 6d 73 20 61 73 20 54 63 6c 20 69 74 73  terms as Tcl its
00a0: 65 6c 66 2e 0a 20 2a 20 28 42 53 44 20 6c 69 63  elf.. * (BSD lic
00b0: 65 6e 73 65 20 66 6f 75 6e 64 20 61 74 20 3c 68  ense found at <h
00c0: 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b  ttp://www.tcl.tk
00d0: 2f 73 6f 66 74 77 61 72 65 2f 74 63 6c 74 6b 2f  /software/tcltk/
00e0: 6c 69 63 65 6e 73 65 2e 68 74 6d 6c 3e 29 0a 20  license.html>). 
00f0: 2a 0a 20 2a 20 42 61 73 65 64 20 6f 6e 20 50 69  *. * Based on Pi
0100: 63 6f 6c 20 62 79 20 53 61 6c 76 61 74 6f 72 65  col by Salvatore
0110: 20 53 61 6e 66 69 6c 69 70 70 6f 20 28 3c 68 74   Sanfilippo (<ht
0120: 74 70 3a 2f 2f 61 6e 74 69 72 65 7a 2e 63 6f 6d  tp://antirez.com
0130: 2f 70 61 67 65 2f 70 69 63 6f 6c 3e 29 0a 20 2a  /page/picol>). *
0140: 20 28 63 29 20 53 74 c3 a9 70 68 61 6e 65 20 41   (c) St..phane A
0150: 72 6e 6f 6c 64 20 32 30 30 37 0a 20 2a 20 52 69  rnold 2007. * Ri
0160: 63 68 61 72 64 20 53 75 63 68 65 6e 77 69 72 74  chard Suchenwirt
0170: 68 20 32 30 30 37 2c 20 32 30 31 33 3a 20 63 6c  h 2007, 2013: cl
0180: 65 61 6e 75 70 2c 20 61 64 64 69 74 69 6f 6e 73  eanup, additions
0190: 0a 20 2a 20 76 69 6d 3a 20 73 79 6e 74 61 78 3d  . * vim: syntax=
01a0: 6a 61 76 61 73 63 72 69 70 74 20 61 75 74 6f 69  javascript autoi
01b0: 6e 64 65 6e 74 20 73 6f 66 74 74 61 62 77 69 64  ndent softtabwid
01c0: 74 68 3d 34 0a 20 2a 2f 0a 2f 2f 20 27 75 73 65  th=4. */.// 'use
01d0: 20 73 74 72 69 63 74 27 3b 20 2f 2f 20 62 72 65   strict'; // bre
01e0: 61 6b 73 20 73 6f 6d 65 20 74 65 73 74 73 2c 20  aks some tests, 
01f0: 6c 69 6b 65 20 65 78 70 72 20 30 33 37 36 2c 20  like expr 0376, 
0200: 66 6f 72 20 6c 6f 6f 70 0a 76 61 72 20 5f 73 74  for loop.var _st
0210: 65 70 20 3d 20 30 3b 20 2f 2f 20 73 65 74 20 74  ep = 0; // set t
0220: 6f 20 31 20 66 6f 72 20 64 65 62 75 67 67 69 6e  o 1 for debuggin
0230: 67 0a 69 66 28 70 72 6f 63 65 73 73 2e 65 6e 76  g.if(process.env
0240: 5b 22 44 45 42 55 47 22 5d 20 3d 3d 20 31 29 20  ["DEBUG"] == 1) 
0250: 5f 73 74 65 70 20 3d 20 31 3b 0a 76 61 72 20 66  _step = 1;.var f
0260: 73 20 20 20 20 3d 20 72 65 71 75 69 72 65 28 27  s    = require('
0270: 66 73 27 29 3b 0a 76 61 72 20 70 75 74 73 20 20  fs');.var puts  
0280: 3d 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 3b 20 2f  = console.log; /
0290: 2f 20 73 61 76 65 73 20 61 20 6c 6f 74 20 6f 66  / saves a lot of
02a0: 20 74 79 70 69 6e 67 2e 2e 2e 20 3b 5e 29 0a 0a   typing... ;^)..
02b0: 66 75 6e 63 74 69 6f 6e 20 54 63 6c 49 6e 74 65  function TclInte
02c0: 72 70 20 28 29 20 7b 0a 20 20 20 20 74 68 69 73  rp () {.    this
02d0: 2e 70 61 74 63 68 6c 65 76 65 6c 20 3d 20 22 30  .patchlevel = "0
02e0: 2e 35 2e 33 22 3b 0a 20 20 20 20 74 68 69 73 2e  .5.3";.    this.
02f0: 63 61 6c 6c 66 72 61 6d 65 20 20 3d 20 5b 7b 7d  callframe  = [{}
0300: 5d 3b 0a 20 20 20 20 74 68 69 73 2e 6c 65 76 65  ];.    this.leve
0310: 6c 20 20 20 20 20 20 3d 20 30 3b 0a 20 20 20 20  l      = 0;.    
0320: 74 68 69 73 2e 6c 65 76 65 6c 63 61 6c 6c 20 20  this.levelcall  
0330: 3d 20 5b 5d 3b 0a 20 20 20 20 74 68 69 73 2e 63  = [];.    this.c
0340: 6f 6d 6d 61 6e 64 73 20 20 20 3d 20 7b 7d 3b 0a  ommands   = {};.
0350: 20 20 20 20 74 68 69 73 2e 70 72 6f 63 73 20 20      this.procs  
0360: 20 20 20 20 3d 20 5b 5d 3b 0a 20 20 20 20 74 68      = [];.    th
0370: 69 73 2e 73 63 72 69 70 74 20 20 20 20 20 3d 20  is.script     = 
0380: 22 22 3b 0a 20 20 20 20 74 68 69 73 2e 67 65 74  "";.    this.get
0390: 73 69 6e 67 20 20 20 20 3d 20 30 3b 0a 20 20 20  sing    = 0;.   
03a0: 20 74 68 69 73 2e 4f 4b 20 20 3d 20 30 3b 0a 20   this.OK  = 0;. 
03b0: 20 20 20 74 68 69 73 2e 52 45 54 20 3d 20 31 3b     this.RET = 1;
03c0: 0a 20 20 20 20 74 68 69 73 2e 42 52 4b 20 3d 20  .    this.BRK = 
03d0: 32 3b 0a 20 20 20 20 74 68 69 73 2e 43 4e 54 20  2;.    this.CNT 
03e0: 3d 20 33 3b 0a 20 20 20 20 74 68 69 73 2e 67 65  = 3;.    this.ge
03f0: 74 56 61 72 20 3d 20 66 75 6e 63 74 69 6f 6e 28  tVar = function(
0400: 6e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 20 20  name) {.        
0410: 76 61 72 20 6e 6d 20 20 3d 20 6e 61 6d 65 2e 74  var nm  = name.t
0420: 6f 53 74 72 69 6e 67 28 29 3b 0a 09 2f 2f 20 6e  oString();..// n
0430: 6f 20 61 72 72 61 79 73 20 73 75 70 70 6f 72 74  o arrays support
0440: 65 64 20 79 65 74 2c 20 62 75 74 20 61 20 72 65  ed yet, but a re
0450: 61 64 2d 6f 6e 6c 79 20 65 78 63 65 70 74 69 6f  ad-only exceptio
0460: 6e 20 66 6f 72 20 3a 3a 65 6e 76 28 29 0a 20 20  n for ::env().  
0470: 20 20 20 20 20 20 69 66 20 28 6e 6d 2e 6d 61 74        if (nm.mat
0480: 63 68 28 22 5e 3a 3a 65 6e 76 5b 28 5d 22 29 29  ch("^::env[(]"))
0490: 20 6e 6d 20 3d 20 6e 6d 2e 73 75 62 73 74 72 28   nm = nm.substr(
04a0: 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  2);.        if (
04b0: 6e 6d 2e 6d 61 74 63 68 28 22 5e 65 6e 76 5b 28  nm.match("^env[(
04c0: 5d 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ]")) {.         
04d0: 20 20 20 76 61 72 20 6b 65 79 20 3d 20 6e 6d 2e     var key = nm.
04e0: 73 75 62 73 74 72 28 34 2c 6e 6d 2e 6c 65 6e 67  substr(4,nm.leng
04f0: 74 68 2d 35 29 3b 0a 20 20 20 20 20 20 20 20 20  th-5);.         
0500: 20 20 20 76 61 72 20 76 61 6c 20 3d 20 70 72 6f     var val = pro
0510: 63 65 73 73 2e 65 6e 76 5b 6b 65 79 5d 3b 0a 20  cess.env[key];. 
0520: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
0530: 20 28 6e 6d 2e 6d 61 74 63 68 28 22 5e 3a 3a 22   (nm.match("^::"
0540: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
0550: 20 76 61 72 20 76 61 6c 20 3d 20 74 68 69 73 2e   var val = this.
0560: 63 61 6c 6c 66 72 61 6d 65 5b 30 5d 5b 6e 6d 2e  callframe[0][nm.
0570: 73 75 62 73 74 72 28 32 29 5d 3b 20 2f 2f 20 67  substr(2)]; // g
0580: 6c 6f 62 61 6c 0a 20 20 20 20 20 20 20 20 7d 20  lobal.        } 
0590: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
05a0: 20 20 20 76 61 72 20 76 61 6c 20 3d 20 74 68 69     var val = thi
05b0: 73 2e 63 61 6c 6c 66 72 61 6d 65 5b 74 68 69 73  s.callframe[this
05c0: 2e 6c 65 76 65 6c 5d 5b 6e 61 6d 65 5d 3b 0a 20  .level][name];. 
05d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
05e0: 20 69 66 20 28 76 61 6c 20 3d 3d 20 6e 75 6c 6c   if (val == null
05f0: 29 20 74 68 72 6f 77 20 27 63 61 6e 5c 27 74 20  ) throw 'can\'t 
0600: 72 65 61 64 20 22 27 2b 6e 61 6d 65 2b 27 22 3a  read "'+name+'":
0610: 20 6e 6f 20 73 75 63 68 20 76 61 72 69 61 62 6c   no such variabl
0620: 65 27 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  e';.        retu
0630: 72 6e 20 76 61 6c 3b 0a 20 20 20 20 7d 0a 20 20  rn val;.    }.  
0640: 20 20 74 68 69 73 2e 73 65 74 56 61 72 20 3d 20    this.setVar = 
0650: 66 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 2c 20 76  function(name, v
0660: 61 6c 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20  al) {.      var 
0670: 6e 6d 20 20 3d 20 6e 61 6d 65 2e 74 6f 53 74 72  nm  = name.toStr
0680: 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 69 66 20  ing();.      if 
0690: 28 76 61 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20  (val != null && 
06a0: 76 61 6c 2e 74 6f 53 74 72 69 6e 67 28 29 2e 6d  val.toString().m
06b0: 61 74 63 68 28 2f 5c 5c 2f 29 29 0a 09 76 61 6c  atch(/\\/))..val
06c0: 20 3d 20 65 76 61 6c 28 22 27 22 2b 76 61 6c 2e   = eval("'"+val.
06d0: 74 6f 53 74 72 69 6e 67 28 29 2b 22 27 22 29 3b  toString()+"'");
06e0: 0a 20 20 20 20 20 20 69 66 20 28 6e 6d 2e 6d 61  .      if (nm.ma
06f0: 74 63 68 28 22 5e 3a 3a 22 29 29 20 7b 0a 09 74  tch("^::")) {..t
0700: 68 69 73 2e 63 61 6c 6c 66 72 61 6d 65 5b 30 5d  his.callframe[0]
0710: 5b 6e 6d 2e 73 75 62 73 74 72 28 32 29 5d 20 3d  [nm.substr(2)] =
0720: 20 76 61 6c 3b 0a 20 20 20 20 20 20 7d 20 65 6c   val;.      } el
0730: 73 65 20 7b 74 68 69 73 2e 63 61 6c 6c 66 72 61  se {this.callfra
0740: 6d 65 5b 74 68 69 73 2e 6c 65 76 65 6c 5d 5b 6e  me[this.level][n
0750: 61 6d 65 5d 20 3d 20 76 61 6c 3b 7d 0a 20 20 20  ame] = val;}.   
0760: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 20     return val;. 
0770: 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e 73 65     }.    this.se
0780: 74 56 61 72 28 22 61 72 67 63 22 2c 20 20 70 72  tVar("argc",  pr
0790: 6f 63 65 73 73 2e 61 72 67 76 2e 6c 65 6e 67 74  ocess.argv.lengt
07a0: 68 2d 32 29 3b 0a 20 20 20 20 74 68 69 73 2e 73  h-2);.    this.s
07b0: 65 74 56 61 72 28 22 61 72 67 76 30 22 2c 20 70  etVar("argv0", p
07c0: 72 6f 63 65 73 73 2e 61 72 67 76 5b 31 5d 29 3b  rocess.argv[1]);
07d0: 0a 20 20 20 20 74 68 69 73 2e 73 65 74 56 61 72  .    this.setVar
07e0: 28 22 61 72 67 76 22 2c 20 20 70 72 6f 63 65 73  ("argv",  proces
07f0: 73 2e 61 72 67 76 2e 73 6c 69 63 65 28 32 29 29  s.argv.slice(2))
0800: 3b 0a 20 20 20 20 74 68 69 73 2e 73 65 74 56 61  ;.    this.setVa
0810: 72 28 22 65 72 72 6f 72 49 6e 66 6f 22 2c 20 22  r("errorInfo", "
0820: 22 29 3b 0a 0a 20 20 20 20 74 68 69 73 2e 69 6e  ");..    this.in
0830: 63 72 4c 65 76 65 6c 20 3d 20 66 75 6e 63 74 69  crLevel = functi
0840: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 74 68 69  on() {.      thi
0850: 73 2e 63 61 6c 6c 66 72 61 6d 65 5b 2b 2b 74 68  s.callframe[++th
0860: 69 73 2e 6c 65 76 65 6c 5d 20 3d 20 7b 7d 3b 0a  is.level] = {};.
0870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
0880: 73 2e 6c 65 76 65 6c 3b 0a 20 20 20 20 7d 0a 20  s.level;.    }. 
0890: 20 20 20 74 68 69 73 2e 64 65 63 72 4c 65 76 65     this.decrLeve
08a0: 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  l = function() {
08b0: 0a 20 20 20 20 20 20 74 68 69 73 2e 63 61 6c 6c  .      this.call
08c0: 66 72 61 6d 65 5b 74 68 69 73 2e 6c 65 76 65 6c  frame[this.level
08d0: 5d 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  ] = null;.      
08e0: 74 68 69 73 2e 6c 65 76 65 6c 2d 2d 3b 0a 20 20  this.level--;.  
08f0: 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 65 76      if (this.lev
0900: 65 6c 20 3c 20 30 29 20 74 68 69 73 2e 6c 65 76  el < 0) this.lev
0910: 65 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 74 68  el = 0;.      th
0920: 69 73 2e 72 65 73 75 6c 74 20 3d 20 6e 75 6c 6c  is.result = null
0930: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73  ;.    }.    this
0940: 2e 67 65 74 43 6f 6d 6d 61 6e 64 20 3d 20 66 75  .getCommand = fu
0950: 6e 63 74 69 6f 6e 28 6e 61 6d 65 29 20 7b 0a 20  nction(name) {. 
0960: 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20         try {.   
0970: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0980: 74 68 69 73 2e 63 6f 6d 6d 61 6e 64 73 5b 6e 61  this.commands[na
0990: 6d 65 5d 3b 0a 20 20 20 20 20 20 20 20 7d 20 63  me];.        } c
09a0: 61 74 63 68 20 28 65 29 20 7b 74 68 72 6f 77 20  atch (e) {throw 
09b0: 22 4e 6f 20 73 75 63 68 20 63 6f 6d 6d 61 6e 64  "No such command
09c0: 20 27 22 2b 6e 61 6d 65 2b 22 27 22 3b 7d 0a 20   '"+name+"'";}. 
09d0: 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e 72 65     }.    this.re
09e0: 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 20 3d 20  gisterCommand = 
09f0: 66 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 2c 20 66  function(name, f
0a00: 75 6e 63 2c 20 70 72 69 76 64 61 74 61 29 20 7b  unc, privdata) {
0a10: 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e  .        if (fun
0a20: 63 20 3d 3d 20 6e 75 6c 6c 29 20 74 68 72 6f 77  c == null) throw
0a30: 20 22 4e 6f 20 73 75 63 68 20 66 75 6e 63 74 69   "No such functi
0a40: 6f 6e 3a 20 22 2b 6e 61 6d 65 3b 0a 20 20 20 20  on: "+name;.    
0a50: 20 20 20 20 74 68 69 73 2e 63 6f 6d 6d 61 6e 64      this.command
0a60: 73 5b 6e 61 6d 65 5d 20 3d 20 6e 65 77 20 54 63  s[name] = new Tc
0a70: 6c 43 6f 6d 6d 61 6e 64 28 66 75 6e 63 2c 20 70  lCommand(func, p
0a80: 72 69 76 64 61 74 61 29 3b 0a 20 20 20 20 20 7d  rivdata);.     }
0a90: 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74  .    this.regist
0aa0: 65 72 53 75 62 43 6f 6d 6d 61 6e 64 20 3d 20 66  erSubCommand = f
0ab0: 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 2c 20 73 75  unction(name, su
0ac0: 62 63 6d 64 2c 20 66 75 6e 63 2c 20 70 72 69 76  bcmd, func, priv
0ad0: 64 61 74 61 29 20 7b 0a 20 20 20 20 20 20 69 66  data) {.      if
0ae0: 20 28 66 75 6e 63 20 3d 3d 20 6e 75 6c 6c 29 20   (func == null) 
0af0: 74 68 72 6f 77 20 22 4e 6f 20 73 75 63 68 20 73  throw "No such s
0b00: 75 62 63 6f 6d 6d 61 6e 64 3a 20 22 2b 20 6e 61  ubcommand: "+ na
0b10: 6d 65 20 2b 22 20 22 20 2b 20 73 75 62 63 6d 64  me +" " + subcmd
0b20: 3b 0a 20 20 20 20 20 20 76 61 72 20 70 61 74 68  ;.      var path
0b30: 20 3d 20 6e 61 6d 65 2e 73 70 6c 69 74 28 22 20   = name.split(" 
0b40: 22 29 3b 0a 20 20 20 20 20 20 76 61 72 20 65 6e  ");.      var en
0b50: 73 3b 0a 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  s;.      name = 
0b60: 70 61 74 68 2e 73 68 69 66 74 28 29 3b 0a 20 20  path.shift();.  
0b70: 20 20 20 20 76 61 72 20 63 6d 64 20 3d 20 74 68      var cmd = th
0b80: 69 73 2e 63 6f 6d 6d 61 6e 64 73 5b 6e 61 6d 65  is.commands[name
0b90: 5d 3b 0a 20 20 20 20 20 20 69 66 20 28 63 6d 64  ];.      if (cmd
0ba0: 20 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 65 6e 73   == null) {..ens
0bb0: 20 3d 20 7b 7d 3b 0a 09 74 68 69 73 2e 63 6f 6d   = {};..this.com
0bc0: 6d 61 6e 64 73 5b 6e 61 6d 65 5d 20 3d 20 6e 65  mands[name] = ne
0bd0: 77 20 54 63 6c 43 6f 6d 6d 61 6e 64 28 54 63 6c  w TclCommand(Tcl
0be0: 2e 45 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e 64  .EnsembleCommand
0bf0: 2c 20 6e 75 6c 6c 2c 20 65 6e 73 29 3b 0a 20 20  , null, ens);.  
0c00: 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6e 73 20      }.      ens 
0c10: 3d 20 74 68 69 73 2e 63 6f 6d 6d 61 6e 64 73 5b  = this.commands[
0c20: 6e 61 6d 65 5d 2e 65 6e 73 65 6d 62 6c 65 3b 0a  name].ensemble;.
0c30: 20 20 20 20 20 20 69 66 20 28 65 6e 73 20 3d 3d        if (ens ==
0c40: 20 6e 75 6c 6c 29 20 74 68 72 6f 77 20 22 4e 6f   null) throw "No
0c50: 74 20 61 6e 20 65 6e 73 65 6d 62 6c 65 20 63 6f  t an ensemble co
0c60: 6d 6d 61 6e 64 3a 20 27 22 2b 6e 61 6d 65 2b 22  mmand: '"+name+"
0c70: 27 22 3b 0a 20 20 20 20 20 20 2f 2f 20 77 61 6c  '";.      // wal
0c80: 6b 73 20 64 65 65 70 6c 79 20 69 6e 74 6f 20 74  ks deeply into t
0c90: 68 65 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 74  he subcommands t
0ca0: 72 65 65 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ree.      while 
0cb0: 28 70 61 74 68 2e 6c 65 6e 67 74 68 20 3e 20 30  (path.length > 0
0cc0: 29 20 7b 0a 09 6e 61 6d 65 20 3d 20 70 61 74 68  ) {..name = path
0cd0: 2e 73 68 69 66 74 28 29 3b 0a 09 63 6d 64 20 20  .shift();..cmd  
0ce0: 3d 20 65 6e 73 5b 6e 61 6d 65 5d 3b 0a 09 69 66  = ens[name];..if
0cf0: 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 29 20 7b   (cmd == null) {
0d00: 0a 09 20 20 63 6d 64 20 3d 20 6e 65 77 20 54 63  ..  cmd = new Tc
0d10: 6c 43 6f 6d 6d 61 6e 64 28 54 63 6c 2e 45 6e 73  lCommand(Tcl.Ens
0d20: 65 6d 62 6c 65 43 6f 6d 6d 61 6e 64 2c 20 6e 75  embleCommand, nu
0d30: 6c 6c 2c 20 7b 7d 29 3b 0a 09 20 20 65 6e 73 5b  ll, {});..  ens[
0d40: 6e 61 6d 65 5d 20 3d 20 63 6d 64 3b 0a 09 20 20  name] = cmd;..  
0d50: 65 6e 73 20 3d 20 63 6d 64 2e 65 6e 73 65 6d 62  ens = cmd.ensemb
0d60: 6c 65 3b 0a 09 7d 0a 20 20 20 20 20 20 7d 0a 20  le;..}.      }. 
0d70: 20 20 20 20 20 65 6e 73 5b 73 75 62 63 6d 64 5d       ens[subcmd]
0d80: 20 3d 20 6e 65 77 20 54 63 6c 43 6f 6d 6d 61 6e   = new TclComman
0d90: 64 28 66 75 6e 63 2c 20 70 72 69 76 64 61 74 61  d(func, privdata
0da0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69  );.    }.    thi
0db0: 73 2e 65 76 61 6c 20 3d 20 66 75 6e 63 74 69 6f  s.eval = functio
0dc0: 6e 20 28 63 6f 64 65 29 20 7b 0a 20 20 20 20 20  n (code) {.     
0dd0: 20 74 72 79 20 7b 0a 09 72 65 74 75 72 6e 20 74   try {..return t
0de0: 68 69 73 2e 65 76 61 6c 32 28 63 6f 64 65 29 3b  his.eval2(code);
0df0: 0a 20 20 20 20 20 20 7d 20 63 61 74 63 68 20 28  .      } catch (
0e00: 65 29 20 7b 0a 09 76 61 72 20 6d 73 67 20 3d 20  e) {..var msg = 
0e10: 63 6f 64 65 2e 73 75 62 73 74 72 28 30 2c 31 32  code.substr(0,12
0e20: 38 29 3b 0a 09 69 66 28 6d 73 67 2e 6c 65 6e 67  8);..if(msg.leng
0e30: 74 68 20 3e 3d 20 31 32 35 29 20 6d 73 67 20 2b  th >= 125) msg +
0e40: 3d 20 22 2e 2e 2e 22 3b 0a 09 76 61 72 20 6d 73  = "...";..var ms
0e50: 67 20 3d 20 65 2b 27 5c 6e 20 20 20 20 20 20 20  g = e+'\n       
0e60: 20 77 68 69 6c 65 20 65 78 65 63 75 74 69 6e 67   while executing
0e70: 5c 6e 22 27 2b 6d 73 67 2b 27 22 27 3b 0a 09 66  \n"'+msg+'"';..f
0e80: 6f 72 28 76 61 72 20 69 20 3d 20 74 68 69 73 2e  or(var i = this.
0e90: 6c 65 76 65 6c 3b 20 69 20 3e 20 30 3b 20 69 2d  level; i > 0; i-
0ea0: 2d 29 0a 09 20 20 6d 73 67 20 2b 3d 20 27 5c 6e  -)..  msg += '\n
0eb0: 20 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 20          invoked 
0ec0: 66 72 6f 6d 20 77 69 74 68 69 6e 5c 6e 22 27 2b  from within\n"'+
0ed0: 74 68 69 73 2e 6c 65 76 65 6c 63 61 6c 6c 5b 69  this.levelcall[i
0ee0: 5d 2b 27 22 27 0a 09 74 68 69 73 2e 73 65 74 56  ]+'"'..this.setV
0ef0: 61 72 28 22 3a 3a 65 72 72 6f 72 49 6e 66 6f 22  ar("::errorInfo"
0f00: 2c 20 6d 73 67 29 3b 0a 09 69 66 28 5f 73 74 65  , msg);..if(_ste
0f10: 70 29 20 70 75 74 73 28 22 65 3a 20 22 2b 65 29  p) puts("e: "+e)
0f20: 3b 0a 09 74 68 72 6f 77 20 65 3b 0a 20 20 20 20  ;..throw e;.    
0f30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 74 68    }.    }.    th
0f40: 69 73 2e 65 76 61 6c 32 20 3d 20 66 75 6e 63 74  is.eval2 = funct
0f50: 69 6f 6e 28 63 6f 64 65 29 20 7b 0a 20 20 20 20  ion(code) {.    
0f60: 20 20 74 68 69 73 2e 63 6f 64 65 20 20 3d 20 74    this.code  = t
0f70: 68 69 73 2e 4f 4b 3b 0a 20 20 20 20 20 20 76 61  his.OK;.      va
0f80: 72 20 70 61 72 73 65 72 20 3d 20 6e 65 77 20 54  r parser = new T
0f90: 63 6c 50 61 72 73 65 72 28 63 6f 64 65 29 3b 0a  clParser(code);.
0fa0: 20 20 20 20 20 20 76 61 72 20 61 72 67 73 20 20        var args  
0fb0: 20 3d 20 5b 5d 3b 0a 20 20 20 20 20 20 76 61 72   = [];.      var
0fc0: 20 66 69 72 73 74 20 20 3d 20 74 72 75 65 3b 0a   first  = true;.
0fd0: 20 20 20 20 20 20 76 61 72 20 74 65 78 74 2c 20        var text, 
0fe0: 70 72 65 76 74 79 70 65 2c 20 72 65 73 75 6c 74  prevtype, result
0ff0: 3b 0a 20 20 20 20 20 20 72 65 73 75 6c 74 20 20  ;.      result  
1000: 20 20 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 77     = "";.      w
1010: 68 69 6c 65 20 28 74 72 75 65 29 20 7b 0a 09 70  hile (true) {..p
1020: 72 65 76 74 79 70 65 20 3d 20 70 61 72 73 65 72  revtype = parser
1030: 2e 74 79 70 65 3b 0a 09 74 72 79 20 7b 0a 09 20  .type;..try {.. 
1040: 20 70 61 72 73 65 72 2e 67 65 74 54 6f 6b 65 6e   parser.getToken
1050: 28 29 3b 0a 09 7d 20 63 61 74 63 68 20 28 65 29  ();..} catch (e)
1060: 20 7b 62 72 65 61 6b 3b 7d 0a 09 69 66 20 28 70   {break;}..if (p
1070: 61 72 73 65 72 2e 74 79 70 65 20 3d 3d 20 28 70  arser.type == (p
1080: 61 72 73 65 72 2e 45 4f 46 29 29 20 62 72 65 61  arser.EOF)) brea
1090: 6b 3b 0a 09 74 65 78 74 20 3d 20 70 61 72 73 65  k;..text = parse
10a0: 72 2e 67 65 74 54 65 78 74 28 29 3b 0a 09 69 66  r.getText();..if
10b0: 20 28 70 61 72 73 65 72 2e 74 79 70 65 20 3d 3d   (parser.type ==
10c0: 20 28 70 61 72 73 65 72 2e 56 41 52 29 29 20 7b   (parser.VAR)) {
10d0: 0a 09 20 20 74 65 78 74 20 3d 20 74 68 69 73 2e  ..  text = this.
10e0: 67 65 74 56 61 72 28 74 65 78 74 29 3b 0a 09 7d  getVar(text);..}
10f0: 20 65 6c 73 65 20 69 66 20 28 70 61 72 73 65 72   else if (parser
1100: 2e 74 79 70 65 20 3d 3d 20 28 70 61 72 73 65 72  .type == (parser
1110: 2e 43 4d 44 29 29 20 7b 0a 09 20 20 74 72 79 20  .CMD)) {..  try 
1120: 7b 0a 09 20 20 20 20 74 65 78 74 20 3d 20 74 68  {..    text = th
1130: 69 73 2e 65 76 61 6c 32 28 74 65 78 74 29 3b 0a  is.eval2(text);.
1140: 09 20 20 7d 20 63 61 74 63 68 20 28 65 29 20 7b  .  } catch (e) {
1150: 74 68 72 6f 77 20 28 65 20 2b 20 22 5c 6e 77 68  throw (e + "\nwh
1160: 69 6c 65 20 70 61 72 73 69 6e 67 20 5c 22 22 20  ile parsing \"" 
1170: 2b 20 74 65 78 74 20 2b 20 22 5c 22 22 29 3b 7d  + text + "\"");}
1180: 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 70 61 72  ..} else if (par
1190: 73 65 72 2e 74 79 70 65 20 3d 3d 20 28 70 61 72  ser.type == (par
11a0: 73 65 72 2e 45 53 43 29 29 20 7b 0a 09 20 20 2f  ser.ESC)) {..  /
11b0: 2f 20 65 73 63 61 70 65 20 68 61 6e 64 6c 69 6e  / escape handlin
11c0: 67 20 6d 69 73 73 69 6e 67 21 0a 09 20 20 2f 2f  g missing!..  //
11d0: 20 70 75 74 73 28 22 65 73 63 61 70 65 20 68 61   puts("escape ha
11e0: 6e 64 6c 65 72 20 63 61 6c 6c 65 64 22 29 3b 0a  ndler called");.
11f0: 09 7d 20 65 6c 73 65 20 69 66 20 28 70 61 72 73  .} else if (pars
1200: 65 72 2e 74 79 70 65 20 3d 3d 20 28 70 61 72 73  er.type == (pars
1210: 65 72 2e 53 45 50 29 29 20 7b 0a 09 20 20 70 72  er.SEP)) {..  pr
1220: 65 76 74 79 70 65 20 3d 20 70 61 72 73 65 72 2e  evtype = parser.
1230: 74 79 70 65 3b 0a 09 20 20 63 6f 6e 74 69 6e 75  type;..  continu
1240: 65 3b 0a 09 7d 0a 09 74 65 78 74 20 3d 20 74 68  e;..}..text = th
1250: 69 73 2e 6f 62 6a 65 63 74 69 66 79 28 74 65 78  is.objectify(tex
1260: 74 29 3b 0a 09 69 66 20 28 70 61 72 73 65 72 2e  t);..if (parser.
1270: 74 79 70 65 20 3d 3d 70 61 72 73 65 72 2e 45 4f  type ==parser.EO
1280: 4c 20 7c 7c 20 70 61 72 73 65 72 2e 74 79 70 65  L || parser.type
1290: 20 3d 3d 20 70 61 72 73 65 72 2e 45 4f 46 29 20   == parser.EOF) 
12a0: 7b 0a 09 20 20 70 72 65 76 74 79 70 65 20 3d 20  {..  prevtype = 
12b0: 70 61 72 73 65 72 2e 74 79 70 65 3b 0a 09 20 20  parser.type;..  
12c0: 69 66 20 28 61 72 67 73 2e 6c 65 6e 67 74 68 20  if (args.length 
12d0: 3e 20 30 29 20 7b 0a 09 20 20 20 20 74 72 79 20  > 0) {..    try 
12e0: 7b 0a 09 20 20 20 20 20 20 72 65 73 75 6c 74 20  {..      result 
12f0: 3d 20 74 68 69 73 2e 63 61 6c 6c 28 61 72 67 73  = this.call(args
1300: 29 3b 0a 09 20 20 20 20 7d 20 63 61 74 63 68 28  );..    } catch(
1310: 65 29 20 7b 0a 09 20 20 20 20 20 20 69 66 28 5f  e) {..      if(_
1320: 73 74 65 70 29 20 70 75 74 73 28 22 6c 65 76 65  step) puts("leve
1330: 6c 3a 20 22 2b 74 68 69 73 2e 6c 65 76 65 6c 2b  l: "+this.level+
1340: 22 20 61 72 67 73 3a 20 22 2b 61 72 67 73 2b 22  " args: "+args+"
1350: 20 65 78 63 65 70 74 69 6f 6e 3a 20 22 2b 65 29   exception: "+e)
1360: 3b 0a 09 20 20 20 20 20 20 76 61 72 20 63 6d 64  ;..      var cmd
1370: 20 3d 20 74 68 69 73 2e 67 65 74 43 6f 6d 6d 61   = this.getComma
1380: 6e 64 28 61 72 67 73 5b 30 5d 29 3b 0a 09 20 20  nd(args[0]);..  
1390: 20 20 20 20 69 66 20 28 63 6d 64 20 3d 3d 20 6e      if (cmd == n
13a0: 75 6c 6c 29 20 7b 0a 09 09 69 66 28 61 72 67 73  ull) {...if(args
13b0: 2e 6c 65 6e 67 74 68 3d 3d 31 20 26 26 20 28 61  .length==1 && (a
13c0: 72 67 73 5b 30 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[0].toString(
13d0: 29 2e 6d 61 74 63 68 28 2f 20 2f 29 29 29 20 7b  ).match(/ /))) {
13e0: 0a 09 09 20 20 74 68 72 6f 77 20 65 3b 0a 09 09  ...  throw e;...
13f0: 7d 0a 09 09 74 68 72 6f 77 20 27 69 6e 76 61 6c  }...throw 'inval
1400: 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20  id command name 
1410: 22 27 2b 61 72 67 73 5b 30 5d 2b 27 22 27 3b 0a  "'+args[0]+'"';.
1420: 09 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20  .      }..      
1430: 69 66 20 28 63 6d 64 2e 65 6e 73 65 6d 62 6c 65  if (cmd.ensemble
1440: 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09 09 74 68   != null) {...th
1450: 72 6f 77 20 27 77 72 6f 6e 67 20 23 20 61 72 67  row 'wrong # arg
1460: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 27 2b  s: should be "'+
1470: 61 72 67 73 5b 30 5d 0a 09 09 20 20 2b 27 20 73  args[0]...  +' s
1480: 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 75 6d  ubcommand ?argum
1490: 65 6e 74 20 2e 2e 2e 3f 22 27 3b 0a 09 20 20 20  ent ...?"';..   
14a0: 20 20 20 7d 0a 09 20 20 20 20 20 20 74 68 72 6f     }..      thro
14b0: 77 20 65 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20  w e;..    }..   
14c0: 20 69 66 20 28 74 68 69 73 2e 63 6f 64 65 20 21   if (this.code !
14d0: 3d 20 74 68 69 73 2e 4f 4b 29 20 72 65 74 75 72  = this.OK) retur
14e0: 6e 20 74 68 69 73 2e 6f 62 6a 65 63 74 69 66 79  n this.objectify
14f0: 28 72 65 73 75 6c 74 29 3b 0a 09 20 20 7d 0a 09  (result);..  }..
1500: 20 20 61 72 67 73 20 3d 20 5b 5d 3b 0a 09 20 20    args = [];..  
1510: 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d 0a 09 69 66  continue;..}..if
1520: 20 28 70 72 65 76 74 79 70 65 20 3d 3d 20 70 61   (prevtype == pa
1530: 72 73 65 72 2e 53 45 50 20 7c 7c 20 70 72 65 76  rser.SEP || prev
1540: 74 79 70 65 20 3d 3d 20 70 61 72 73 65 72 2e 45  type == parser.E
1550: 4f 4c 29 20 7b 0a 09 20 20 61 72 67 73 2e 70 75  OL) {..  args.pu
1560: 73 68 28 74 65 78 74 29 3b 0a 09 7d 20 65 6c 73  sh(text);..} els
1570: 65 20 7b 0a 09 20 20 61 72 67 73 5b 61 72 67 73  e {..  args[args
1580: 2e 6c 65 6e 67 74 68 2d 31 5d 20 3d 20 61 72 67  .length-1] = arg
1590: 73 5b 61 72 67 73 2e 6c 65 6e 67 74 68 2d 31 5d  s[args.length-1]
15a0: 2e 74 6f 53 74 72 69 6e 67 28 29 20 2b 20 74 65  .toString() + te
15b0: 78 74 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09  xt.toString();..
15c0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
15d0: 69 66 20 28 61 72 67 73 2e 6c 65 6e 67 74 68 20  if (args.length 
15e0: 3e 20 30 29 20 72 65 73 75 6c 74 20 3d 20 74 68  > 0) result = th
15f0: 69 73 2e 63 61 6c 6c 28 61 72 67 73 29 3b 0a 20  is.call(args);. 
1600: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
1610: 2e 6f 62 6a 65 63 74 69 66 79 28 72 65 73 75 6c  .objectify(resul
1620: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2f  t);.    }.    //
1630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1650: 2d 2d 20 43 6f 6d 6d 61 6e 64 73 20 69 6e 20 61  -- Commands in a
1660: 6c 70 68 61 62 65 74 69 63 61 6c 20 6f 72 64 65  lphabetical orde
1670: 72 0a 20 20 20 20 2f 2a 74 68 69 73 2e 72 65 67  r.    /*this.reg
1680: 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 61 66  isterCommand("af
1690: 74 65 72 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ter", function (
16a0: 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a  interp, args) {.
16b0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 69          this.ari
16c0: 74 79 28 61 72 67 73 2c 20 33 29 3b 0a 09 76 61  ty(args, 3);..va
16d0: 72 20 63 6f 64 65 20 3d 20 61 72 67 73 5b 32 5d  r code = args[2]
16e0: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09 73 65  .toString();..se
16f0: 74 54 69 6d 65 6f 75 74 28 61 72 67 73 5b 31 5d  tTimeout(args[1]
1700: 2c 20 66 75 6e 63 74 69 6f 6e 28 63 6f 64 65 29  , function(code)
1710: 20 7b 69 6e 74 65 72 70 2e 65 76 61 6c 28 63 6f   {interp.eval(co
1720: 64 65 29 7d 29 3b 0a 09 7d 29 3b 2a 2f 0a 20 20  de)});..});*/.  
1730: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43    this.registerC
1740: 6f 6d 6d 61 6e 64 28 22 61 70 70 65 6e 64 22 2c  ommand("append",
1750: 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72   function (inter
1760: 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20  p, args) {.     
1770: 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72     this.arity(ar
1780: 67 73 2c 20 32 2c 20 49 6e 66 69 6e 69 74 79 29  gs, 2, Infinity)
1790: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 76 6e  ;.        var vn
17a0: 61 6d 65 20 3d 20 61 72 67 73 5b 31 5d 2e 74 6f  ame = args[1].to
17b0: 53 74 72 69 6e 67 28 29 3b 0a 09 74 72 79 20 7b  String();..try {
17c0: 76 61 72 20 73 74 72 20 3d 20 69 6e 74 65 72 70  var str = interp
17d0: 2e 67 65 74 56 61 72 28 76 6e 61 6d 65 29 3b 7d  .getVar(vname);}
17e0: 20 63 61 74 63 68 28 65 29 20 7b 76 61 72 20 73   catch(e) {var s
17f0: 74 72 20 3d 20 22 22 3b 7d 0a 09 66 6f 72 20 28  tr = "";}..for (
1800: 76 61 72 20 69 20 3d 20 32 3b 20 69 20 3c 20 61  var i = 2; i < a
1810: 72 67 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  rgs.length; i++)
1820: 20 73 74 72 20 2b 3d 20 61 72 67 73 5b 69 5d 2e   str += args[i].
1830: 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  toString();.    
1840: 20 20 20 20 69 6e 74 65 72 70 2e 73 65 74 56 61      interp.setVa
1850: 72 28 76 6e 61 6d 65 2c 20 73 74 72 29 3b 0a 20  r(vname, str);. 
1860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 74         return st
1870: 72 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  r;.      });.   
1880: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f   this.registerCo
1890: 6d 6d 61 6e 64 28 22 62 72 65 61 6b 22 2c 20 66  mmand("break", f
18a0: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
18b0: 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20   args) {.       
18c0: 20 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d 20 69   interp.code = i
18d0: 6e 74 65 72 70 2e 42 52 4b 3b 0a 20 20 20 20 20  nterp.BRK;.     
18e0: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20     return;.     
18f0: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
1900: 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 63  gisterCommand("c
1910: 61 74 63 68 22 2c 20 66 75 6e 63 74 69 6f 6e 20  atch", function 
1920: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
1930: 0a 09 74 68 69 73 2e 61 72 69 74 79 28 61 72 67  ..this.arity(arg
1940: 73 2c 20 32 2c 20 33 29 3b 0a 09 76 61 72 20 63  s, 2, 3);..var c
1950: 6f 64 65 20 3d 20 61 72 67 73 5b 31 5d 2e 74 6f  ode = args[1].to
1960: 53 74 72 69 6e 67 28 29 3b 0a 09 76 61 72 20 72  String();..var r
1970: 65 73 3b 0a 09 76 61 72 20 72 63 20 20 20 3d 20  es;..var rc   = 
1980: 30 3b 0a 09 74 72 79 20 7b 72 65 73 20 3d 20 69  0;..try {res = i
1990: 6e 74 65 72 70 2e 65 76 61 6c 28 63 6f 64 65 29  nterp.eval(code)
19a0: 3b 7d 20 63 61 74 63 68 28 65 29 20 7b 72 65 73  ;} catch(e) {res
19b0: 20 3d 20 65 3b 20 72 63 20 3d 20 31 3b 7d 0a 09   = e; rc = 1;}..
19c0: 69 66 28 61 72 67 73 2e 6c 65 6e 67 74 68 20 3d  if(args.length =
19d0: 3d 20 33 29 20 69 6e 74 65 72 70 2e 73 65 74 56  = 3) interp.setV
19e0: 61 72 28 61 72 67 73 5b 32 5d 2c 20 72 65 73 29  ar(args[2], res)
19f0: 3b 0a 09 72 65 74 75 72 6e 20 72 63 3b 0a 20 20  ;..return rc;.  
1a00: 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73      });.    this
1a10: 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64  .registerCommand
1a20: 28 22 63 64 22 2c 20 66 75 6e 63 74 69 6f 6e 20  ("cd", function 
1a30: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
1a40: 0a 09 74 68 69 73 2e 61 72 69 74 79 28 61 72 67  ..this.arity(arg
1a50: 73 2c 20 31 2c 20 32 29 3b 0a 09 76 61 72 20 64  s, 1, 2);..var d
1a60: 69 72 20 3d 20 70 72 6f 63 65 73 73 2e 65 6e 76  ir = process.env
1a70: 2e 48 4f 4d 45 3b 0a 09 69 66 20 28 61 72 67 73  .HOME;..if (args
1a80: 2e 6c 65 6e 67 74 68 20 3d 3d 20 32 29 20 64 69  .length == 2) di
1a90: 72 20 3d 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74  r = args[1].toSt
1aa0: 72 69 6e 67 28 29 3b 0a 09 70 72 6f 63 65 73 73  ring();..process
1ab0: 2e 63 68 64 69 72 28 64 69 72 29 3b 0a 09 72 65  .chdir(dir);..re
1ac0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 29 3b 0a  turn;.      });.
1ad0: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65      this.registe
1ae0: 72 43 6f 6d 6d 61 6e 64 28 22 63 6f 6e 74 69 6e  rCommand("contin
1af0: 75 65 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69  ue", function (i
1b00: 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20  nterp, args) {. 
1b10: 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 63 6f         interp.co
1b20: 64 65 20 3d 20 69 6e 74 65 72 70 2e 43 4e 54 3b  de = interp.CNT;
1b30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
1b40: 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  .      });.    t
1b50: 68 69 73 2e 72 65 67 69 73 74 65 72 53 75 62 43  his.registerSubC
1b60: 6f 6d 6d 61 6e 64 28 22 63 6c 6f 63 6b 22 2c 20  ommand("clock", 
1b70: 22 66 6f 72 6d 61 74 22 2c 20 66 75 6e 63 74 69  "format", functi
1b80: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
1b90: 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 20  ) {.        var 
1ba0: 6e 6f 77 20 3d 20 6e 65 77 20 44 61 74 65 28 29  now = new Date()
1bb0: 3b 0a 20 20 20 20 20 20 20 20 6e 6f 77 2e 73 65  ;.        now.se
1bc0: 74 54 69 6d 65 28 61 72 67 73 5b 31 5d 2a 31 30  tTime(args[1]*10
1bd0: 30 30 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72  00);.        var
1be0: 20 74 73 20 3d 20 6e 6f 77 2e 74 6f 53 74 72 69   ts = now.toStri
1bf0: 6e 67 28 29 2e 73 70 6c 69 74 28 22 20 22 29 3b  ng().split(" ");
1c00: 0a 09 76 61 72 20 74 7a 20 3d 20 74 73 5b 36 5d  ..var tz = ts[6]
1c10: 2e 74 6f 53 74 72 69 6e 67 28 29 2e 72 65 70 6c  .toString().repl
1c20: 61 63 65 28 22 28 22 2c 22 22 29 2e 72 65 70 6c  ace("(","").repl
1c30: 61 63 65 28 22 29 22 2c 22 22 29 3b 0a 09 72 65  ace(")","");..re
1c40: 74 75 72 6e 20 74 73 5b 30 5d 2b 22 20 22 2b 74  turn ts[0]+" "+t
1c50: 73 5b 31 5d 2b 22 20 22 2b 74 73 5b 32 5d 2b 22  s[1]+" "+ts[2]+"
1c60: 20 22 2b 74 73 5b 34 5d 2b 22 20 22 2b 74 7a 2b   "+ts[4]+" "+tz+
1c70: 22 20 22 2b 74 73 5b 33 5d 3b 0a 20 20 20 20 20  " "+ts[3];.     
1c80: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
1c90: 67 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64  gisterSubCommand
1ca0: 28 22 63 6c 6f 63 6b 22 2c 20 22 6d 69 6c 6c 69  ("clock", "milli
1cb0: 73 65 63 6f 6e 64 73 22 2c 20 66 75 6e 63 74 69  seconds", functi
1cc0: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
1cd0: 29 20 7b 0a 09 76 61 72 20 74 20 3d 20 6e 65 77  ) {..var t = new
1ce0: 20 44 61 74 65 28 29 3b 0a 09 72 65 74 75 72 6e   Date();..return
1cf0: 20 74 2e 76 61 6c 75 65 4f 66 28 29 3b 0a 20 20   t.valueOf();.  
1d00: 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73      });.    this
1d10: 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d  .registerSubComm
1d20: 61 6e 64 28 22 63 6c 6f 63 6b 22 2c 20 22 73 63  and("clock", "sc
1d30: 61 6e 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69  an", function (i
1d40: 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20  nterp, args) {. 
1d50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
1d60: 74 65 2e 70 61 72 73 65 28 61 72 67 73 5b 31 5d  te.parse(args[1]
1d70: 29 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  );.      });.   
1d80: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53 75   this.registerSu
1d90: 62 43 6f 6d 6d 61 6e 64 28 22 63 6c 6f 63 6b 22  bCommand("clock"
1da0: 2c 20 22 73 65 63 6f 6e 64 73 22 2c 20 66 75 6e  , "seconds", fun
1db0: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
1dc0: 72 67 73 29 20 7b 0a 09 72 65 74 75 72 6e 20 4d  rgs) {..return M
1dd0: 61 74 68 2e 66 6c 6f 6f 72 28 28 6e 65 77 20 44  ath.floor((new D
1de0: 61 74 65 28 29 29 2e 76 61 6c 75 65 4f 66 28 29  ate()).valueOf()
1df0: 2f 31 30 30 30 29 3b 0a 20 20 20 20 20 20 7d 29  /1000);.      })
1e00: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
1e10: 74 65 72 43 6f 6d 6d 61 6e 64 28 22 63 6f 6e 63  terCommand("conc
1e20: 61 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69  at", function (i
1e30: 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20  nterp, args) {. 
1e40: 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 69 74         this.arit
1e50: 79 28 61 72 67 73 2c 20 31 2c 20 49 6e 66 69 6e  y(args, 1, Infin
1e60: 69 74 79 29 3b 0a 09 76 61 72 20 72 65 73 20 3d  ity);..var res =
1e70: 20 5b 5d 3b 0a 09 66 6f 72 28 76 61 72 20 69 20   [];..for(var i 
1e80: 3d 20 31 3b 20 69 20 3c 20 61 72 67 73 2e 6c 65  = 1; i < args.le
1e90: 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
1ea0: 72 65 73 20 3d 20 72 65 73 2e 63 6f 6e 63 61 74  res = res.concat
1eb0: 28 61 72 67 73 5b 69 5d 2e 74 6f 4c 69 73 74 28  (args[i].toList(
1ec0: 29 29 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 72  ));..}..return r
1ed0: 65 73 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20  es;.      });.  
1ee0: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53    this.registerS
1ef0: 75 62 43 6f 6d 6d 61 6e 64 28 22 64 69 63 74 22  ubCommand("dict"
1f00: 2c 20 22 63 72 65 61 74 65 22 2c 20 66 75 6e 63  , "create", func
1f10: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
1f20: 67 73 29 20 7b 0a 09 69 66 28 61 72 67 73 2e 6c  gs) {..if(args.l
1f30: 65 6e 67 74 68 20 25 20 32 20 3d 3d 20 30 29 20  ength % 2 == 0) 
1f40: 0a 09 20 20 74 68 72 6f 77 20 27 77 72 6f 6e 67  ..  throw 'wrong
1f50: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1f60: 62 65 20 22 64 69 63 74 20 63 72 65 61 74 65 20  be "dict create 
1f70: 3f 6b 65 79 20 76 61 6c 75 65 20 2e 2e 2e 3f 22  ?key value ...?"
1f80: 27 3b 0a 09 72 65 74 75 72 6e 20 6e 65 77 20 54  ';..return new T
1f90: 63 6c 4f 62 6a 65 63 74 28 61 72 67 73 2e 73 6c  clObject(args.sl
1fa0: 69 63 65 28 31 29 29 3b 0a 20 20 20 20 20 20 7d  ice(1));.      }
1fb0: 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69  );.    this.regi
1fc0: 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22  sterSubCommand("
1fd0: 64 69 63 74 22 2c 20 22 65 78 69 73 74 73 22 2c  dict", "exists",
1fe0: 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72   function (inter
1ff0: 70 2c 20 61 72 67 73 29 20 7b 0a 09 69 66 28 61  p, args) {..if(a
2000: 72 67 73 2e 6c 65 6e 67 74 68 20 3c 20 32 29 20  rgs.length < 2) 
2010: 0a 09 20 20 74 68 72 6f 77 20 27 77 72 6f 6e 67  ..  throw 'wrong
2020: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
2030: 62 65 20 22 64 69 63 74 20 65 78 69 73 74 73 20  be "dict exists 
2040: 64 69 63 74 69 6f 6e 61 72 79 20 3f 6b 65 79 20  dictionary ?key 
2050: 2e 2e 2e 3f 22 27 3b 0a 09 76 61 72 20 64 69 63  ...?"';..var dic
2060: 74 20 3d 20 61 72 67 73 5b 31 5d 2e 74 6f 4c 69  t = args[1].toLi
2070: 73 74 28 29 3b 0a 09 76 61 72 20 6b 65 79 20 20  st();..var key  
2080: 3d 20 61 72 67 73 5b 32 5d 2e 74 6f 53 74 72 69  = args[2].toStri
2090: 6e 67 28 29 3b 0a 09 66 6f 72 20 28 76 61 72 20  ng();..for (var 
20a0: 69 3d 30 3b 69 20 3c 20 64 69 63 74 2e 6c 65 6e  i=0;i < dict.len
20b0: 67 74 68 3b 69 2b 3d 32 29 20 7b 0a 09 20 20 69  gth;i+=2) {..  i
20c0: 66 28 64 69 63 74 5b 69 5d 2e 74 6f 53 74 72 69  f(dict[i].toStri
20d0: 6e 67 28 29 20 3d 3d 20 6b 65 79 29 20 72 65 74  ng() == key) ret
20e0: 75 72 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 75 72  urn 1;..}..retur
20f0: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20  n 0;.      });. 
2100: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
2110: 53 75 62 43 6f 6d 6d 61 6e 64 28 22 64 69 63 74  SubCommand("dict
2120: 22 2c 20 22 67 65 74 22 2c 20 66 75 6e 63 74 69  ", "get", functi
2130: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
2140: 29 20 7b 0a 09 69 66 28 61 72 67 73 2e 6c 65 6e  ) {..if(args.len
2150: 67 74 68 20 3c 20 32 29 20 0a 09 20 20 74 68 72  gth < 2) ..  thr
2160: 6f 77 20 27 77 72 6f 6e 67 20 23 20 61 72 67 73  ow 'wrong # args
2170: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 69 63  : should be "dic
2180: 74 20 67 65 74 20 64 69 63 74 69 6f 6e 61 72 79  t get dictionary
2190: 20 3f 6b 65 79 20 2e 2e 2e 3f 22 27 3b 0a 09 76   ?key ...?"';..v
21a0: 61 72 20 64 69 63 74 20 3d 20 61 72 67 73 5b 31  ar dict = args[1
21b0: 5d 2e 74 6f 4c 69 73 74 28 29 3b 0a 09 76 61 72  ].toList();..var
21c0: 20 6b 65 79 20 20 3d 20 61 72 67 73 5b 32 5d 2e   key  = args[2].
21d0: 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09 66 6f 72  toString();..for
21e0: 20 28 76 61 72 20 69 3d 30 3b 69 20 3c 20 64 69   (var i=0;i < di
21f0: 63 74 2e 6c 65 6e 67 74 68 3b 69 2b 3d 32 29 20  ct.length;i+=2) 
2200: 7b 0a 09 20 20 69 66 28 64 69 63 74 5b 69 5d 2e  {..  if(dict[i].
2210: 74 6f 53 74 72 69 6e 67 28 29 20 3d 3d 20 6b 65  toString() == ke
2220: 79 29 20 72 65 74 75 72 6e 20 64 69 63 74 5b 69  y) return dict[i
2230: 2b 31 5d 3b 0a 09 7d 0a 09 74 68 72 6f 77 20 27  +1];..}..throw '
2240: 6b 65 79 20 22 27 2b 6b 65 79 2b 27 22 20 6e 6f  key "'+key+'" no
2250: 74 20 6b 6e 6f 77 6e 20 69 6e 20 64 69 63 74 69  t known in dicti
2260: 6f 6e 61 72 79 27 3b 0a 20 20 20 20 20 20 7d 29  onary';.      })
2270: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
2280: 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 64  terSubCommand("d
2290: 69 63 74 22 2c 20 22 6b 65 79 73 22 2c 20 66 75  ict", "keys", fu
22a0: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
22b0: 61 72 67 73 29 20 7b 0a 09 69 66 28 61 72 67 73  args) {..if(args
22c0: 2e 6c 65 6e 67 74 68 20 3c 20 32 20 7c 7c 20 61  .length < 2 || a
22d0: 72 67 73 2e 6c 65 6e 67 74 68 20 3e 20 33 29 20  rgs.length > 3) 
22e0: 0a 09 20 20 74 68 72 6f 77 20 27 77 72 6f 6e 67  ..  throw 'wrong
22f0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
2300: 62 65 20 22 64 69 63 74 20 6b 65 79 73 20 64 69  be "dict keys di
2310: 63 74 69 6f 6e 61 72 79 20 3f 67 6c 6f 62 50 61  ctionary ?globPa
2320: 74 74 65 72 6e 3f 22 27 3b 0a 09 76 61 72 20 64  ttern?"';..var d
2330: 69 63 74 20 20 20 20 3d 20 61 72 67 73 5b 31 5d  ict    = args[1]
2340: 2e 74 6f 4c 69 73 74 28 29 3b 0a 09 76 61 72 20  .toList();..var 
2350: 70 61 74 74 65 72 6e 20 3d 20 22 2e 2a 22 3b 0a  pattern = ".*";.
2360: 09 69 66 28 61 72 67 73 2e 6c 65 6e 67 74 68 20  .if(args.length 
2370: 3d 3d 20 33 29 20 0a 09 20 20 70 61 74 74 65 72  == 3) ..  patter
2380: 6e 20 3d 20 22 5e 22 2b 61 72 67 73 5b 32 5d 2e  n = "^"+args[2].
2390: 74 6f 53 74 72 69 6e 67 28 29 2e 72 65 70 6c 61  toString().repla
23a0: 63 65 28 2f 5c 2a 2f 67 2c 22 2e 2a 22 29 3b 0a  ce(/\*/g,".*");.
23b0: 09 76 61 72 20 72 65 73 20 20 3d 20 5b 5d 3b 0a  .var res  = [];.
23c0: 09 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b  .for (var i = 0;
23d0: 20 69 20 3c 20 64 69 63 74 2e 6c 65 6e 67 74 68   i < dict.length
23e0: 3b 20 69 2b 3d 32 29 20 7b 0a 09 20 20 69 66 28  ; i+=2) {..  if(
23f0: 64 69 63 74 5b 69 5d 2e 74 6f 53 74 72 69 6e 67  dict[i].toString
2400: 28 29 2e 6d 61 74 63 68 28 70 61 74 74 65 72 6e  ().match(pattern
2410: 29 29 20 72 65 73 2e 70 75 73 68 28 64 69 63 74  )) res.push(dict
2420: 5b 69 5d 29 3b 0a 09 7d 0a 09 72 65 74 75 72 6e  [i]);..}..return
2430: 20 72 65 73 3b 0a 20 20 20 20 20 20 7d 29 3b 0a   res;.      });.
2440: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65      this.registe
2450: 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 64 69 63  rSubCommand("dic
2460: 74 22 2c 20 22 73 65 74 22 2c 20 66 75 6e 63 74  t", "set", funct
2470: 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67  ion (interp, arg
2480: 73 29 20 7b 0a 09 74 68 69 73 2e 61 72 69 74 79  s) {..this.arity
2490: 28 61 72 67 73 2c 20 34 29 3b 0a 09 76 61 72 20  (args, 4);..var 
24a0: 6e 61 6d 65 20 20 3d 20 61 72 67 73 5b 31 5d 3b  name  = args[1];
24b0: 0a 09 76 61 72 20 6b 65 79 20 20 20 3d 20 61 72  ..var key   = ar
24c0: 67 73 5b 32 5d 2e 74 6f 53 74 72 69 6e 67 28 29  gs[2].toString()
24d0: 3b 0a 09 76 61 72 20 76 61 6c 20 20 20 3d 20 61  ;..var val   = a
24e0: 72 67 73 5b 33 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[3].toString(
24f0: 29 3b 0a 09 76 61 72 20 64 69 63 74 20 20 3d 20  );..var dict  = 
2500: 5b 5d 3b 0a 09 74 72 79 20 7b 64 69 63 74 20 3d  [];..try {dict =
2510: 20 69 6e 74 65 72 70 2e 67 65 74 56 61 72 28 6e   interp.getVar(n
2520: 61 6d 65 29 3b 7d 20 63 61 74 63 68 28 65 29 20  ame);} catch(e) 
2530: 7b 64 69 63 74 20 3d 20 6e 65 77 20 54 63 6c 4f  {dict = new TclO
2540: 62 6a 65 63 74 28 5b 5d 29 7d 3b 0a 09 76 61 72  bject([])};..var
2550: 20 66 6f 75 6e 64 20 3d 20 66 61 6c 73 65 3b 0a   found = false;.
2560: 09 76 61 72 20 6c 69 73 74 20 20 3d 20 64 69 63  .var list  = dic
2570: 74 2e 74 6f 4c 69 73 74 28 29 3b 0a 09 66 6f 72  t.toList();..for
2580: 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
2590: 20 6c 69 73 74 2e 6c 65 6e 67 74 68 3b 20 69 20   list.length; i 
25a0: 2b 3d 20 32 29 20 7b 0a 09 20 20 69 66 28 6c 69  += 2) {..  if(li
25b0: 73 74 5b 69 5d 2e 74 6f 53 74 72 69 6e 67 28 29  st[i].toString()
25c0: 20 3d 3d 20 6b 65 79 29 20 7b 0a 09 20 20 20 20   == key) {..    
25d0: 6c 69 73 74 5b 69 2b 31 5d 20 3d 20 76 61 6c 3b  list[i+1] = val;
25e0: 0a 09 20 20 20 20 66 6f 75 6e 64 20 3d 20 74 72  ..    found = tr
25f0: 75 65 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a  ue;..    break;.
2600: 09 20 20 7d 0a 09 7d 0a 09 69 66 20 28 21 66 6f  .  }..}..if (!fo
2610: 75 6e 64 29 20 7b 0a 09 20 20 6c 69 73 74 2e 70  und) {..  list.p
2620: 75 73 68 28 69 6e 74 65 72 70 2e 6f 62 6a 65 63  ush(interp.objec
2630: 74 69 66 79 28 6b 65 79 29 29 3b 20 0a 09 20 20  tify(key)); ..  
2640: 6c 69 73 74 2e 70 75 73 68 28 69 6e 74 65 72 70  list.push(interp
2650: 2e 6f 62 6a 65 63 74 69 66 79 28 76 61 6c 29 29  .objectify(val))
2660: 3b 0a 09 7d 20 0a 09 69 6e 74 65 72 70 2e 73 65  ;..} ..interp.se
2670: 74 56 61 72 28 6e 61 6d 65 2c 20 64 69 63 74 29  tVar(name, dict)
2680: 3b 0a 09 72 65 74 75 72 6e 20 64 69 63 74 3b 0a  ;..return dict;.
2690: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68        });.    th
26a0: 69 73 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f  is.registerSubCo
26b0: 6d 6d 61 6e 64 28 22 64 69 63 74 22 2c 20 22 75  mmand("dict", "u
26c0: 6e 73 65 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20  nset", function 
26d0: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
26e0: 0a 09 74 68 69 73 2e 61 72 69 74 79 28 61 72 67  ..this.arity(arg
26f0: 73 2c 20 33 29 3b 0a 09 76 61 72 20 6e 61 6d 65  s, 3);..var name
2700: 20 20 3d 20 61 72 67 73 5b 31 5d 3b 0a 09 76 61    = args[1];..va
2710: 72 20 6b 65 79 20 20 20 3d 20 61 72 67 73 5b 32  r key   = args[2
2720: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09 76  ].toString();..v
2730: 61 72 20 64 69 63 74 20 20 3d 20 5b 5d 3b 0a 09  ar dict  = [];..
2740: 74 72 79 20 7b 64 69 63 74 20 3d 20 69 6e 74 65  try {dict = inte
2750: 72 70 2e 67 65 74 56 61 72 28 6e 61 6d 65 29 3b  rp.getVar(name);
2760: 7d 20 63 61 74 63 68 28 65 29 20 7b 64 69 63 74  } catch(e) {dict
2770: 20 3d 20 6e 65 77 20 54 63 6c 4f 62 6a 65 63 74   = new TclObject
2780: 28 5b 5d 29 7d 3b 0a 09 76 61 72 20 66 6f 75 6e  ([])};..var foun
2790: 64 20 3d 20 66 61 6c 73 65 3b 0a 09 76 61 72 20  d = false;..var 
27a0: 6c 69 73 74 20 20 3d 20 64 69 63 74 2e 74 6f 4c  list  = dict.toL
27b0: 69 73 74 28 29 3b 0a 09 66 6f 72 20 28 76 61 72  ist();..for (var
27c0: 20 69 20 3d 20 30 3b 20 69 20 3c 20 6c 69 73 74   i = 0; i < list
27d0: 2e 6c 65 6e 67 74 68 3b 20 69 20 2b 3d 20 32 29  .length; i += 2)
27e0: 20 7b 0a 09 20 20 69 66 28 6c 69 73 74 5b 69 5d   {..  if(list[i]
27f0: 2e 74 6f 53 74 72 69 6e 67 28 29 20 3d 3d 20 6b  .toString() == k
2800: 65 79 29 20 7b 0a 09 20 20 20 20 66 6f 75 6e 64  ey) {..    found
2810: 20 3d 20 74 72 75 65 3b 0a 09 20 20 20 20 62 72   = true;..    br
2820: 65 61 6b 3b 0a 09 20 20 7d 0a 09 7d 0a 09 69 66  eak;..  }..}..if
2830: 28 66 6f 75 6e 64 29 20 7b 0a 09 20 20 69 66 28  (found) {..  if(
2840: 69 20 3d 3d 20 6c 69 73 74 2e 6c 65 6e 67 74 68  i == list.length
2850: 29 20 69 20 2d 3d 20 32 3b 0a 09 20 20 20 20 6c  ) i -= 2;..    l
2860: 69 73 74 2e 73 70 6c 69 63 65 28 69 2c 20 32 29  ist.splice(i, 2)
2870: 3b 0a 09 20 20 20 20 69 6e 74 65 72 70 2e 73 65  ;..    interp.se
2880: 74 56 61 72 28 6e 61 6d 65 2c 20 64 69 63 74 29  tVar(name, dict)
2890: 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 64 69 63  ;..}..return dic
28a0: 74 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  t;.      });.   
28b0: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f   this.registerCo
28c0: 6d 6d 61 6e 64 28 22 65 76 61 6c 22 2c 66 75 6e  mmand("eval",fun
28d0: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
28e0: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74  rgs) {.        t
28f0: 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20  his.arity(args, 
2900: 32 2c 49 6e 66 69 6e 69 74 79 29 3b 0a 20 20 20  2,Infinity);.   
2910: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
2920: 3d 20 31 3b 20 69 20 3c 20 61 72 67 73 2e 6c 65  = 1; i < args.le
2930: 6e 67 74 68 3b 20 69 2b 2b 29 20 61 72 67 73 5b  ngth; i++) args[
2940: 69 5d 20 3d 20 61 72 67 73 5b 69 5d 2e 74 6f 53  i] = args[i].toS
2950: 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20  tring();.       
2960: 20 69 66 20 28 61 72 67 73 2e 6c 65 6e 67 74 68   if (args.length
2970: 20 3d 3d 20 32 29 20 76 61 72 20 63 6f 64 65 20   == 2) var code 
2980: 3d 20 61 72 67 73 5b 31 5d 3b 0a 20 20 20 20 20  = args[1];.     
2990: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
29a0: 20 20 20 20 20 20 20 20 20 76 61 72 20 63 6f 64           var cod
29b0: 65 20 3d 20 61 72 67 73 2e 73 6c 69 63 65 28 31  e = args.slice(1
29c0: 29 2e 6a 6f 69 6e 28 22 20 22 29 3b 0a 20 20 20  ).join(" ");.   
29d0: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 74 65       return inte
29e0: 72 70 2e 65 76 61 6c 28 63 6f 64 65 29 3b 0a 20  rp.eval(code);. 
29f0: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 2f 2a 0a       });.    /*.
2a00: 20 20 20 20 20 20 74 68 69 73 2e 72 65 67 69 73        this.regis
2a10: 74 65 72 43 6f 6d 6d 61 6e 64 28 22 65 78 65 63  terCommand("exec
2a20: 22 2c 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  ",function (inte
2a30: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20  rp, args) {.    
2a40: 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67    this.arity(arg
2a50: 73 2c 20 32 2c 20 49 6e 66 69 6e 69 74 79 29 3b  s, 2, Infinity);
2a60: 0a 20 20 20 20 20 20 76 61 72 20 65 78 65 63 20  .      var exec 
2a70: 3d 20 72 65 71 75 69 72 65 28 27 63 68 69 6c 64  = require('child
2a80: 5f 70 72 6f 63 65 73 73 27 29 2e 65 78 65 63 2c  _process').exec,
2a90: 0a 20 20 20 20 20 20 63 68 69 6c 64 3b 0a 20 20  .      child;.  
2aa0: 20 20 20 20 70 75 74 73 28 22 65 78 65 63 20 22      puts("exec "
2ab0: 2b 61 72 67 73 2e 73 6c 69 63 65 28 31 29 2e 6a  +args.slice(1).j
2ac0: 6f 69 6e 28 22 20 22 29 29 3b 0a 20 20 20 20 20  oin(" "));.     
2ad0: 20 63 68 69 6c 64 20 3d 20 65 78 65 63 28 61 72   child = exec(ar
2ae0: 67 73 2e 73 6c 69 63 65 28 31 29 2e 6a 6f 69 6e  gs.slice(1).join
2af0: 28 22 20 22 29 2c 0a 20 20 20 20 20 20 66 75 6e  (" "),.      fun
2b00: 63 74 69 6f 6e 20 28 65 72 72 6f 72 2c 20 73 74  ction (error, st
2b10: 64 6f 75 74 2c 20 73 74 64 65 72 72 29 20 7b 0a  dout, stderr) {.
2b20: 20 20 20 20 20 20 76 61 72 20 72 65 73 20 3d 20        var res = 
2b30: 73 74 64 6f 75 74 2e 74 6f 53 74 72 69 6e 67 28  stdout.toString(
2b40: 29 3b 0a 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f  );.      //conso
2b50: 6c 65 2e 6c 6f 67 28 27 73 74 64 6f 75 74 3a 20  le.log('stdout: 
2b60: 27 20 2b 20 73 74 64 6f 75 74 2e 74 6f 53 74 72  ' + stdout.toStr
2b70: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 69 66  ing());.      if
2b80: 20 28 65 72 72 6f 72 20 21 3d 3d 20 6e 75 6c 6c   (error !== null
2b90: 29 20 7b 0a 20 20 20 20 20 20 74 68 72 6f 77 28  ) {.      throw(
2ba0: 27 65 78 65 63 20 65 72 72 6f 72 3a 20 27 20 2b  'exec error: ' +
2bb0: 20 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 7d   error);.      }
2bc0: 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 72   .      return r
2bd0: 65 73 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20  es;.      });.  
2be0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
2bf0: 65 78 65 63 72 65 73 3b 0a 20 20 20 20 20 20 7d  execres;.      }
2c00: 29 3b 0a 20 20 20 20 2a 2f 0a 20 20 20 20 74 68  );.    */.    th
2c10: 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61  is.registerComma
2c20: 6e 64 28 22 65 78 69 74 22 2c 66 75 6e 63 74 69  nd("exit",functi
2c30: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
2c40: 29 20 7b 0a 09 74 68 69 73 2e 61 72 69 74 79 28  ) {..this.arity(
2c50: 61 72 67 73 2c 20 31 2c 32 29 3b 0a 09 76 61 72  args, 1,2);..var
2c60: 20 72 63 20 3d 20 30 3b 0a 09 69 66 20 28 61 72   rc = 0;..if (ar
2c70: 67 73 2e 6c 65 6e 67 74 68 20 3d 3d 20 32 29 20  gs.length == 2) 
2c80: 72 63 20 3d 20 61 72 67 73 5b 31 5d 3b 0a 09 70  rc = args[1];..p
2c90: 72 6f 63 65 73 73 2e 65 78 69 74 28 72 63 29 3b  rocess.exit(rc);
2ca0: 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  .      });.    t
2cb0: 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d  his.registerComm
2cc0: 61 6e 64 28 22 65 78 70 72 22 2c 20 66 75 6e 63  and("expr", func
2cd0: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
2ce0: 67 73 29 20 7b 0a 09 76 61 72 20 65 78 70 72 65  gs) {..var expre
2cf0: 73 73 69 6f 6e 20 3d 20 61 72 67 73 2e 73 6c 69  ssion = args.sli
2d00: 63 65 28 31 29 2e 6a 6f 69 6e 28 22 20 22 29 3b  ce(1).join(" ");
2d10: 0a 09 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e  ..return interp.
2d20: 65 78 70 72 28 69 6e 74 65 72 70 2c 20 65 78 70  expr(interp, exp
2d30: 72 65 73 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20  ression);.      
2d40: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 65 78 70  });.    this.exp
2d50: 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e  r = function (in
2d60: 74 65 72 70 2c 20 65 78 70 72 65 73 73 69 6f 6e  terp, expression
2d70: 29 20 7b 20 2f 2f 20 61 6c 73 6f 20 75 73 65 64  ) { // also used
2d80: 20 69 6e 20 66 6f 72 2c 20 69 66 2c 20 77 68 69   in for, if, whi
2d90: 6c 65 0a 20 20 20 20 20 20 76 61 72 20 6d 78 3b  le.      var mx;
2da0: 0a 20 20 20 20 20 20 76 61 72 20 61 63 6f 73 20  .      var acos 
2db0: 3d 20 4d 61 74 68 2e 61 63 6f 73 3b 0a 20 20 20  = Math.acos;.   
2dc0: 20 20 20 76 61 72 20 65 78 70 20 20 3d 20 4d 61     var exp  = Ma
2dd0: 74 68 2e 65 78 70 3b 0a 20 20 20 20 20 20 76 61  th.exp;.      va
2de0: 72 20 73 71 72 74 20 3d 20 4d 61 74 68 2e 73 71  r sqrt = Math.sq
2df0: 72 74 3b 20 2f 2f 20 22 70 75 62 6c 69 73 68 22  rt; // "publish"
2e00: 20 6f 74 68 65 72 20 4d 61 74 68 2e 2a 20 66 75   other Math.* fu
2e10: 6e 63 74 69 6f 6e 73 20 61 73 20 6e 65 65 64 65  nctions as neede
2e20: 64 0a 20 20 20 20 20 20 74 72 79 20 7b 0a 09 6d  d.      try {..m
2e30: 78 20 3d 20 65 78 70 72 65 73 73 69 6f 6e 2e 6d  x = expression.m
2e40: 61 74 63 68 28 2f 28 5c 5b 2e 2a 5c 5d 29 2f 67  atch(/(\[.*\])/g
2e50: 29 3b 0a 09 66 6f 72 20 28 76 61 72 20 69 20 69  );..for (var i i
2e60: 6e 20 6d 78 29 0a 09 20 20 70 75 74 73 28 22 68  n mx)..  puts("h
2e70: 61 76 65 20 74 6f 20 64 65 61 6c 20 77 69 74 68  ave to deal with
2e80: 20 22 2b 6d 78 5b 69 5d 2e 74 6f 53 74 72 69 6e   "+mx[i].toStrin
2e90: 67 28 29 29 3b 0a 20 20 20 20 20 20 7d 20 63 61  g());.      } ca
2ea0: 74 63 68 28 65 29 20 7b 70 75 74 73 28 69 2b 22  tch(e) {puts(i+"
2eb0: 2e 20 65 78 63 65 70 74 69 6f 6e 3a 20 22 2b 65  . exception: "+e
2ec0: 29 3b 7d 0a 20 20 20 20 20 20 6d 78 20 3d 20 65  );}.      mx = e
2ed0: 78 70 72 65 73 73 69 6f 6e 2e 6d 61 74 63 68 28  xpression.match(
2ee0: 2f 28 5c 24 5b 41 2d 5a 61 2d 7a 30 2d 39 5f 3a  /(\$[A-Za-z0-9_:
2ef0: 5d 2b 29 2f 67 29 3b 0a 20 20 20 20 20 20 66 6f  ]+)/g);.      fo
2f00: 72 20 28 76 61 72 20 69 20 69 6e 20 6d 78 29 20  r (var i in mx) 
2f10: 7b 0a 09 76 61 72 20 76 61 6c 20 3d 20 69 6e 74  {..var val = int
2f20: 65 72 70 2e 67 65 74 56 61 72 28 6d 78 5b 69 5d  erp.getVar(mx[i]
2f30: 2e 73 6c 69 63 65 28 31 29 29 2e 74 6f 53 74 72  .slice(1)).toStr
2f40: 69 6e 67 28 29 3b 0a 09 69 66 28 69 73 4e 61 4e  ing();..if(isNaN
2f50: 28 76 61 6c 29 20 7c 7c 20 21 69 73 46 69 6e 69  (val) || !isFini
2f60: 74 65 28 76 61 6c 29 29 20 76 61 6c 20 3d 20 27  te(val)) val = '
2f70: 22 27 2b 76 61 6c 2b 27 22 27 3b 0a 09 65 76 61  "'+val+'"';..eva
2f80: 6c 28 22 76 61 72 20 22 2b 6d 78 5b 69 5d 2b 27  l("var "+mx[i]+'
2f90: 20 3d 20 27 2b 76 61 6c 29 3b 0a 20 20 20 20 20   = '+val);.     
2fa0: 20 7d 0a 20 20 20 20 20 20 76 61 72 20 72 65 73   }.      var res
2fb0: 20 3d 20 65 76 61 6c 28 65 78 70 72 65 73 73 69   = eval(expressi
2fc0: 6f 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 72 65  on);.      if(re
2fd0: 73 20 3d 3d 20 66 61 6c 73 65 29 20 72 65 73 20  s == false) res 
2fe0: 3d 20 30 3b 20 65 6c 73 65 20 69 66 28 72 65 73  = 0; else if(res
2ff0: 20 3d 3d 20 74 72 75 65 29 20 72 65 73 20 3d 20   == true) res = 
3000: 31 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  1;.      return 
3010: 72 65 73 3b 0a 20 20 20 20 7d 3b 0a 20 20 20 20  res;.    };.    
3020: 74 68 69 73 2e 72 65 67 69 73 74 65 72 53 75 62  this.registerSub
3030: 43 6f 6d 6d 61 6e 64 28 22 66 69 6c 65 22 2c 20  Command("file", 
3040: 22 61 74 69 6d 65 22 2c 20 66 75 6e 63 74 69 6f  "atime", functio
3050: 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29  n (interp, args)
3060: 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e   {.        this.
3070: 61 72 69 74 79 28 61 72 67 73 2c 20 32 29 3b 0a  arity(args, 2);.
3080: 09 76 61 72 20 73 74 61 74 20 3d 20 66 73 2e 73  .var stat = fs.s
3090: 74 61 74 53 79 6e 63 28 61 72 67 73 5b 31 5d 2e  tatSync(args[1].
30a0: 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a 09 72 65  toString());..re
30b0: 74 75 72 6e 20 73 74 61 74 2e 61 74 69 6d 65 2e  turn stat.atime.
30c0: 67 65 74 54 69 6d 65 28 29 2f 31 30 30 30 3b 0a  getTime()/1000;.
30d0: 20 20 20 20 20 20 7d 29 0a 20 20 20 20 74 68 69        }).    thi
30e0: 73 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f 6d  s.registerSubCom
30f0: 6d 61 6e 64 28 22 66 69 6c 65 22 2c 20 22 64 69  mand("file", "di
3100: 72 6e 61 6d 65 22 2c 20 66 75 6e 63 74 69 6f 6e  rname", function
3110: 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20   (interp, args) 
3120: 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 61  {.        this.a
3130: 72 69 74 79 28 61 72 67 73 2c 20 32 29 3b 0a 09  rity(args, 2);..
3140: 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e 64 69  return interp.di
3150: 72 6e 61 6d 65 28 61 72 67 73 5b 31 5d 2e 74 6f  rname(args[1].to
3160: 53 74 72 69 6e 67 28 29 29 3b 0a 20 20 20 20 20  String());.     
3170: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 64 69 72  });.    this.dir
3180: 6e 61 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28  name = function(
3190: 70 29 20 7b 20 2f 2f 20 61 6c 73 6f 20 75 73 65  p) { // also use
31a0: 64 20 69 6e 20 5b 67 6c 6f 62 5d 0a 20 20 20 20  d in [glob].    
31b0: 20 20 76 61 72 20 70 61 74 68 20 3d 20 72 65 71    var path = req
31c0: 75 69 72 65 28 22 70 61 74 68 22 29 3b 0a 20 20  uire("path");.  
31d0: 20 20 20 20 72 65 74 75 72 6e 20 70 61 74 68 2e      return path.
31e0: 64 69 72 6e 61 6d 65 28 70 2e 74 6f 53 74 72 69  dirname(p.toStri
31f0: 6e 67 28 29 29 3b 0a 20 20 20 20 7d 3b 0a 20 20  ng());.    };.  
3200: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53    this.registerS
3210: 75 62 43 6f 6d 6d 61 6e 64 28 22 66 69 6c 65 22  ubCommand("file"
3220: 2c 20 22 65 78 69 73 74 73 22 2c 20 66 75 6e 63  , "exists", func
3230: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
3240: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68  gs) {.        th
3250: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 32  is.arity(args, 2
3260: 29 3b 0a 09 76 61 72 20 66 69 6c 65 20 3d 20 61  );..var file = a
3270: 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[1].toString(
3280: 29 3b 0a 09 74 72 79 20 7b 76 61 72 20 66 64 20  );..try {var fd 
3290: 3d 20 66 73 2e 6f 70 65 6e 53 79 6e 63 28 66 69  = fs.openSync(fi
32a0: 6c 65 2c 22 72 22 29 3b 7d 20 63 61 74 63 68 28  le,"r");} catch(
32b0: 65 29 20 7b 72 65 74 75 72 6e 20 30 3b 7d 0a 09  e) {return 0;}..
32c0: 66 73 2e 63 6c 6f 73 65 53 79 6e 63 28 66 64 29  fs.closeSync(fd)
32d0: 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 20 20 20  ;..return 1;.   
32e0: 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72    });.    this.r
32f0: 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e  egisterSubComman
3300: 64 28 22 66 69 6c 65 22 2c 20 22 65 78 74 65 6e  d("file", "exten
3310: 73 69 6f 6e 22 2c 20 66 75 6e 63 74 69 6f 6e 20  sion", function 
3320: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
3330: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72  .        this.ar
3340: 69 74 79 28 61 72 67 73 2c 20 32 29 3b 0a 09 76  ity(args, 2);..v
3350: 61 72 20 66 6e 20 20 3d 20 61 72 67 73 5b 31 5d  ar fn  = args[1]
3360: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09 76 61  .toString();..va
3370: 72 20 72 65 73 20 3d 20 66 6e 2e 73 70 6c 69 74  r res = fn.split
3380: 28 22 2e 22 29 2e 70 6f 70 28 29 3b 0a 09 72 65  (".").pop();..re
3390: 73 20 3d 20 28 72 65 73 20 3d 3d 20 66 6e 29 3f  s = (res == fn)?
33a0: 20 22 22 20 3a 20 22 2e 22 2b 72 65 73 3b 0a 09   "" : "."+res;..
33b0: 72 65 74 75 72 6e 20 72 65 73 3b 0a 20 20 20 20  return res;.    
33c0: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
33d0: 67 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64  gisterSubCommand
33e0: 28 22 66 69 6c 65 22 2c 20 22 6a 6f 69 6e 22 2c  ("file", "join",
33f0: 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72   function (inter
3400: 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20  p, args) {.     
3410: 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72     this.arity(ar
3420: 67 73 2c 20 32 2c 20 49 6e 66 69 6e 69 74 79 29  gs, 2, Infinity)
3430: 3b 0a 09 61 72 67 73 2e 73 68 69 66 74 28 29 3b  ;..args.shift();
3440: 0a 09 76 61 72 20 72 65 73 20 3d 20 22 22 2c 20  ..var res = "", 
3450: 73 65 70 20 3d 20 22 22 3b 0a 09 66 6f 72 20 28  sep = "";..for (
3460: 76 61 72 20 61 72 67 20 69 6e 20 61 72 67 73 29  var arg in args)
3470: 20 7b 0a 09 20 20 76 61 72 20 70 61 72 74 20 3d   {..  var part =
3480: 20 61 72 67 73 5b 61 72 67 5d 2e 74 6f 53 74 72   args[arg].toStr
3490: 69 6e 67 28 29 3b 0a 09 20 20 69 66 28 70 61 72  ing();..  if(par
34a0: 74 2e 6d 61 74 63 68 28 22 5e 5b 2f 5d 22 29 29  t.match("^[/]"))
34b0: 20 0a 09 20 20 20 20 72 65 73 20 3d 20 70 61 72   ..    res = par
34c0: 74 3b 20 65 6c 73 65 20 72 65 73 20 3d 20 72 65  t; else res = re
34d0: 73 2b 73 65 70 2b 70 61 72 74 3b 0a 09 20 20 73  s+sep+part;..  s
34e0: 65 70 20 3d 20 22 2f 22 3b 0a 09 7d 0a 09 72 65  ep = "/";..}..re
34f0: 74 75 72 6e 20 72 65 73 3b 0a 20 20 20 20 20 20  turn res;.      
3500: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67  });.    this.reg
3510: 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28  isterSubCommand(
3520: 22 66 69 6c 65 22 2c 20 22 6d 74 69 6d 65 22 2c  "file", "mtime",
3530: 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72   function (inter
3540: 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20  p, args) {.     
3550: 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72     this.arity(ar
3560: 67 73 2c 20 32 29 3b 0a 09 76 61 72 20 73 74 61  gs, 2);..var sta
3570: 74 20 3d 20 66 73 2e 73 74 61 74 53 79 6e 63 28  t = fs.statSync(
3580: 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67  args[1].toString
3590: 28 29 29 3b 0a 09 72 65 74 75 72 6e 20 73 74 61  ());..return sta
35a0: 74 2e 6d 74 69 6d 65 2e 67 65 74 54 69 6d 65 28  t.mtime.getTime(
35b0: 29 2f 31 30 30 30 3b 0a 20 20 20 20 20 20 7d 29  )/1000;.      })
35c0: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
35d0: 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 66  terSubCommand("f
35e0: 69 6c 65 22 2c 20 22 73 69 7a 65 22 2c 20 66 75  ile", "size", fu
35f0: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
3600: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
3610: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
3620: 20 32 29 3b 0a 09 76 61 72 20 73 74 61 74 20 3d   2);..var stat =
3630: 20 66 73 2e 73 74 61 74 53 79 6e 63 28 61 72 67   fs.statSync(arg
3640: 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29  s[1].toString())
3650: 3b 0a 09 72 65 74 75 72 6e 20 73 74 61 74 2e 73  ;..return stat.s
3660: 69 7a 65 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20  ize;.      });. 
3670: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
3680: 53 75 62 43 6f 6d 6d 61 6e 64 28 22 66 69 6c 65  SubCommand("file
3690: 22 2c 20 22 73 70 6c 69 74 22 2c 20 66 75 6e 63  ", "split", func
36a0: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
36b0: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68  gs) {.        th
36c0: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 32  is.arity(args, 2
36d0: 29 3b 0a 09 76 61 72 20 70 61 74 68 20 3d 20 61  );..var path = a
36e0: 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[1].toString(
36f0: 29 2e 73 70 6c 69 74 28 22 2f 22 29 3b 0a 09 69  ).split("/");..i
3700: 66 28 70 61 74 68 5b 30 5d 20 3d 3d 20 22 22 29  f(path[0] == "")
3710: 20 70 61 74 68 5b 30 5d 20 3d 20 22 2f 22 3b 0a   path[0] = "/";.
3720: 09 72 65 74 75 72 6e 20 70 61 74 68 3b 0a 20 20  .return path;.  
3730: 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73      });.    this
3740: 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d  .registerSubComm
3750: 61 6e 64 28 22 66 69 6c 65 22 2c 20 22 74 61 69  and("file", "tai
3760: 6c 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e  l", function (in
3770: 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20  terp, args) {.  
3780: 20 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79        this.arity
3790: 28 61 72 67 73 2c 20 32 29 3b 0a 09 72 65 74 75  (args, 2);..retu
37a0: 72 6e 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72  rn args[1].toStr
37b0: 69 6e 67 28 29 2e 73 70 6c 69 74 28 22 2f 22 29  ing().split("/")
37c0: 2e 70 6f 70 28 29 3b 0a 20 20 20 20 20 20 7d 29  .pop();.      })
37d0: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
37e0: 74 65 72 43 6f 6d 6d 61 6e 64 28 22 66 6f 72 22  terCommand("for"
37f0: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  , function (inte
3800: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20  rp, args) {.    
3810: 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61      this.arity(a
3820: 72 67 73 2c 20 35 29 3b 0a 20 20 20 20 20 20 20  rgs, 5);.       
3830: 20 69 6e 74 65 72 70 2e 65 76 61 6c 28 61 72 67   interp.eval(arg
3840: 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29  s[1].toString())
3850: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 69 6e 74  ;.        if(int
3860: 65 72 70 2e 63 6f 64 65 20 21 3d 20 69 6e 74 65  erp.code != inte
3870: 72 70 2e 4f 4b 29 20 72 65 74 75 72 6e 3b 0a 20  rp.OK) return;. 
3880: 20 20 20 20 20 20 20 76 61 72 20 63 6f 6e 64 20         var cond 
3890: 3d 20 61 72 67 73 5b 32 5d 2e 74 6f 53 74 72 69  = args[2].toStri
38a0: 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 76 61  ng();.        va
38b0: 72 20 73 74 65 70 20 3d 20 61 72 67 73 5b 33 5d  r step = args[3]
38c0: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20  .toString();.   
38d0: 20 20 20 20 20 76 61 72 20 62 6f 64 79 20 3d 20       var body = 
38e0: 61 72 67 73 5b 34 5d 2e 74 6f 53 74 72 69 6e 67  args[4].toString
38f0: 28 29 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ();.        inte
3900: 72 70 2e 69 6e 4c 6f 6f 70 20 3d 20 74 72 75 65  rp.inLoop = true
3910: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70  ;.        interp
3920: 2e 63 6f 64 65 20 3d 20 69 6e 74 65 72 70 2e 4f  .code = interp.O
3930: 4b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  K;.        while
3940: 20 28 74 72 75 65 29 20 7b 0a 20 20 20 20 20 20   (true) {.      
3950: 20 20 20 20 20 20 74 65 73 74 20 3d 20 69 6e 74        test = int
3960: 65 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 69 6e  erp.objectify(in
3970: 74 65 72 70 2e 65 78 70 72 28 69 6e 74 65 72 70  terp.expr(interp
3980: 2c 20 63 6f 6e 64 29 29 3b 0a 20 20 20 20 20 20  , cond));.      
3990: 20 20 20 20 20 20 69 66 20 28 21 74 65 73 74 2e        if (!test.
39a0: 74 6f 42 6f 6f 6c 65 61 6e 28 29 29 20 62 72 65  toBoolean()) bre
39b0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ak;.            
39c0: 69 6e 74 65 72 70 2e 65 76 61 6c 28 62 6f 64 79  interp.eval(body
39d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  );.            v
39e0: 61 72 20 69 63 20 3d 20 69 6e 74 65 72 70 2e 63  ar ic = interp.c
39f0: 6f 64 65 3b 20 2f 2f 20 77 69 6c 6c 20 62 65 20  ode; // will be 
3a00: 74 65 73 74 65 64 20 61 66 74 65 72 20 73 74 65  tested after ste
3a10: 70 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20  p command.      
3a20: 20 20 20 20 20 20 69 6e 74 65 72 70 2e 65 76 61        interp.eva
3a30: 6c 28 73 74 65 70 29 3b 0a 20 20 20 20 20 20 20  l(step);.       
3a40: 20 20 20 20 20 69 66 28 69 63 20 3d 3d 20 69 6e       if(ic == in
3a50: 74 65 72 70 2e 42 52 4b 29 20 62 72 65 61 6b 3b  terp.BRK) break;
3a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
3a70: 69 63 20 3d 3d 20 69 6e 74 65 72 70 2e 43 4e 54  ic == interp.CNT
3a80: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
3a90: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 6e      }.        in
3aa0: 74 65 72 70 2e 69 6e 4c 6f 6f 70 20 3d 20 66 61  terp.inLoop = fa
3ab0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28  lse;.        if(
3ac0: 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d 3d 20 69  interp.code == i
3ad0: 6e 74 65 72 70 2e 42 52 4b 20 7c 7c 20 69 6e 74  nterp.BRK || int
3ae0: 65 72 70 2e 63 6f 64 65 20 3d 3d 20 69 6e 74 65  erp.code == inte
3af0: 72 70 2e 43 4e 54 29 0a 09 20 20 69 6e 74 65 72  rp.CNT)..  inter
3b00: 70 2e 63 6f 64 65 20 3d 20 69 6e 74 65 72 70 2e  p.code = interp.
3b10: 4f 4b 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  OK;.        retu
3b20: 72 6e 20 22 22 3b 0a 20 20 20 20 7d 29 3b 0a 20  rn "";.    });. 
3b30: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
3b40: 43 6f 6d 6d 61 6e 64 28 22 66 6f 72 65 61 63 68  Command("foreach
3b50: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  ", function (int
3b60: 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20  erp, args) {.   
3b70: 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28       this.arity(
3b80: 61 72 67 73 2c 20 34 29 3b 0a 20 20 20 20 20 20  args, 4);.      
3b90: 20 20 76 61 72 20 6c 69 73 74 20 3d 20 61 72 67    var list = arg
3ba0: 73 5b 32 5d 2e 74 6f 4c 69 73 74 28 29 3b 0a 20  s[2].toList();. 
3bb0: 20 20 20 20 20 20 20 76 61 72 20 62 6f 64 79 20         var body 
3bc0: 3d 20 61 72 67 73 5b 33 5d 2e 74 6f 53 74 72 69  = args[3].toStri
3bd0: 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 76 61  ng();.        va
3be0: 72 20 72 65 73 20 20 20 20 3d 20 22 22 3b 0a 20  r res    = "";. 
3bf0: 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 69 6e         interp.in
3c00: 4c 6f 6f 70 20 3d 20 74 72 75 65 3b 0a 20 20 20  Loop = true;.   
3c10: 20 20 20 20 20 69 6e 74 65 72 70 2e 63 6f 64 65       interp.code
3c20: 20 3d 20 69 6e 74 65 72 70 2e 4f 4b 3b 0a 20 20   = interp.OK;.  
3c30: 20 20 20 20 20 20 66 6f 72 28 76 61 72 20 69 20        for(var i 
3c40: 69 6e 20 6c 69 73 74 29 20 7b 0a 09 20 20 2f 2f  in list) {..  //
3c50: 70 75 74 73 28 22 6e 6f 77 20 61 74 20 22 2b 6c  puts("now at "+l
3c60: 69 73 74 5b 69 5d 2b 22 20 6c 65 76 65 6c 3a 20  ist[i]+" level: 
3c70: 22 2b 69 6e 74 65 72 70 2e 6c 65 76 65 6c 29 3b  "+interp.level);
3c80: 0a 09 20 20 69 6e 74 65 72 70 2e 73 65 74 56 61  ..  interp.setVa
3c90: 72 28 61 72 67 73 5b 31 5d 2c 69 6e 74 65 72 70  r(args[1],interp
3ca0: 2e 6f 62 6a 65 63 74 69 66 79 28 6c 69 73 74 5b  .objectify(list[
3cb0: 69 5d 29 29 3b 0a 09 20 20 69 6e 74 65 72 70 2e  i]));..  interp.
3cc0: 65 76 61 6c 28 62 6f 64 79 29 3b 0a 09 20 20 69  eval(body);..  i
3cd0: 66 28 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d 3d  f(interp.code ==
3ce0: 20 69 6e 74 65 72 70 2e 42 52 4b 29 20 62 72 65   interp.BRK) bre
3cf0: 61 6b 3b 0a 09 20 20 69 66 28 69 6e 74 65 72 70  ak;..  if(interp
3d00: 2e 63 6f 64 65 20 3d 3d 20 69 6e 74 65 72 70 2e  .code == interp.
3d10: 43 4e 54 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  CNT) continue;. 
3d20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3d30: 20 69 6e 74 65 72 70 2e 69 6e 4c 6f 6f 70 20 3d   interp.inLoop =
3d40: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
3d50: 69 66 28 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d  if(interp.code =
3d60: 3d 20 69 6e 74 65 72 70 2e 42 52 4b 20 7c 7c 20  = interp.BRK || 
3d70: 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d 3d 20 69  interp.code == i
3d80: 6e 74 65 72 70 2e 43 4e 54 29 0a 20 20 20 20 20  nterp.CNT).     
3d90: 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 63 6f         interp.co
3da0: 64 65 3d 69 6e 74 65 72 70 2e 4f 4b 3b 0a 20 20  de=interp.OK;.  
3db0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 3b        return "";
3dc0: 0a 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69  .    });.    thi
3dd0: 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e  s.registerComman
3de0: 64 28 22 66 6f 72 6d 61 74 22 2c 20 66 75 6e 63  d("format", func
3df0: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
3e00: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68  gs) {.        th
3e10: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 33  is.arity(args, 3
3e20: 29 3b 0a 09 76 61 72 20 66 6d 74 20 3d 20 61 72  );..var fmt = ar
3e30: 67 73 5b 31 5d 3b 0a 09 76 61 72 20 76 61 6c 20  gs[1];..var val 
3e40: 3d 20 61 72 67 73 5b 32 5d 3b 0a 09 69 66 28 66  = args[2];..if(f
3e50: 6d 74 3d 3d 22 25 78 22 29 20 7b 0a 09 20 20 76  mt=="%x") {..  v
3e60: 61 72 20 78 20 3d 20 6e 65 77 20 4e 75 6d 62 65  ar x = new Numbe
3e70: 72 28 76 61 6c 29 3b 0a 09 20 20 72 65 74 75 72  r(val);..  retur
3e80: 6e 20 78 2e 74 6f 53 74 72 69 6e 67 28 31 36 29  n x.toString(16)
3e90: 3b 0a 09 7d 20 65 6c 73 65 20 69 66 28 66 6d 74  ;..} else if(fmt
3ea0: 3d 3d 22 25 58 22 29 20 7b 0a 09 20 20 76 61 72  =="%X") {..  var
3eb0: 20 78 20 3d 20 6e 65 77 20 4e 75 6d 62 65 72 28   x = new Number(
3ec0: 76 61 6c 29 3b 0a 09 20 20 72 65 74 75 72 6e 20  val);..  return 
3ed0: 78 2e 74 6f 53 74 72 69 6e 67 28 31 36 29 2e 74  x.toString(16).t
3ee0: 6f 55 70 70 65 72 43 61 73 65 28 29 3b 0a 09 7d  oUpperCase();..}
3ef0: 0a 09 65 6c 73 65 20 74 68 72 6f 77 20 22 75 6e  ..else throw "un
3f00: 6b 6e 6f 77 6e 20 66 6f 72 6d 61 74 22 3b 09 0a  known format";..
3f10: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 74 68 69        });.   thi
3f20: 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e  s.registerComman
3f30: 64 28 22 67 65 74 73 30 22 2c 20 66 75 6e 63 74  d("gets0", funct
3f40: 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67  ion (interp, arg
3f50: 73 29 20 7b 0a 09 74 68 69 73 2e 61 72 69 74 79  s) {..this.arity
3f60: 28 61 72 67 73 2c 20 32 2c 20 33 29 3b 0a 09 69  (args, 2, 3);..i
3f70: 6e 74 65 72 70 2e 67 65 74 73 69 6e 67 20 3d 20  nterp.getsing = 
3f80: 31 3b 0a 09 2f 2f 69 6e 74 65 72 70 2e 62 75 66  1;..//interp.buf
3f90: 20 3d 20 22 22 3b 0a 09 2f 2f 77 68 69 6c 65 28   = "";..//while(
3fa0: 69 6e 74 65 72 70 2e 62 75 66 20 3d 3d 20 22 22  interp.buf == ""
3fb0: 29 20 7b 0a 09 2f 2f 69 6e 74 65 72 70 2e 74 69  ) {..//interp.ti
3fc0: 6d 65 6f 75 74 20 3d 20 73 65 74 54 69 6d 65 6f  meout = setTimeo
3fd0: 75 74 28 66 75 6e 63 74 69 6f 6e 28 29 7b 7d 2c  ut(function(){},
3fe0: 20 31 30 30 30 30 29 3b 0a 09 2f 2f 20 20 69 66   10000);..//  if
3ff0: 28 69 6e 74 65 72 70 2e 67 65 74 73 69 6e 67 3d  (interp.getsing=
4000: 3d 30 29 20 62 72 65 61 6b 3b 0a 09 2f 2f 7d 0a  =0) break;..//}.
4010: 09 72 65 74 75 72 6e 3b 20 2f 2f 20 72 65 73 75  .return; // resu
4020: 6c 74 20 77 69 6c 6c 20 62 65 20 69 6e 20 69 6e  lt will be in in
4030: 74 65 72 70 2e 62 75 66 20 77 68 65 6e 20 64 6f  terp.buf when do
4040: 6e 65 0a 20 20 20 20 20 7d 29 3b 0a 2f 2a 20 20  ne.     });./*  
4050: 20 74 68 69 73 2e 67 65 74 73 20 3d 20 66 75 6e   this.gets = fun
4060: 63 74 69 6f 6e 28 63 68 61 72 29 20 7b 0a 20 20  ction(char) {.  
4070: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
4080: 69 66 28 63 68 61 72 2e 6d 61 74 63 68 28 2f 66  if(char.match(/f
4090: 6f 6f 5b 5c 72 5c 6e 5d 2f 29 29 20 7b 0a 09 20  oo[\r\n]/)) {.. 
40a0: 74 68 69 73 2e 67 65 74 73 69 6e 67 20 3d 20 30  this.getsing = 0
40b0: 3b 0a 09 20 70 75 74 73 28 22 72 65 63 65 69 76  ;.. puts("receiv
40c0: 65 64 3a 20 22 2b 74 68 69 73 2e 62 75 66 29 3b  ed: "+this.buf);
40d0: 0a 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  .       } else {
40e0: 0a 09 20 70 75 74 73 28 22 3c 22 2b 63 68 61 72  .. puts("<"+char
40f0: 2b 22 3e 22 2b 74 68 69 73 2e 67 65 74 73 69 6e  +">"+this.getsin
4100: 67 29 3b 0a 09 20 74 68 69 73 2e 62 75 66 20 2b  g);.. this.buf +
4110: 3d 20 63 68 61 72 3b 0a 20 20 20 20 20 20 20 7d  = char;.       }
4120: 0a 20 20 20 20 20 7d 20 63 61 74 63 68 28 65 29  .     } catch(e)
4130: 20 7b 70 75 74 73 28 65 29 7d 3b 0a 20 20 20 7d   {puts(e)};.   }
4140: 2a 2f 0a 20 20 20 74 68 69 73 2e 72 65 67 69 73  */.   this.regis
4150: 74 65 72 43 6f 6d 6d 61 6e 64 28 22 67 6c 6f 62  terCommand("glob
4160: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  ", function (int
4170: 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 09 74 68  erp, args) {..th
4180: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 32  is.arity(args, 2
4190: 2c 20 49 6e 66 69 6e 69 74 79 29 3b 0a 09 61 72  , Infinity);..ar
41a0: 67 73 2e 73 68 69 66 74 28 29 3b 0a 09 76 61 72  gs.shift();..var
41b0: 20 72 65 73 20 20 20 20 3d 20 5b 5d 3b 0a 09 76   res    = [];..v
41c0: 61 72 20 70 72 65 66 69 78 20 3d 20 22 22 3b 0a  ar prefix = "";.
41d0: 09 76 61 72 20 64 69 72 20 20 20 20 3d 20 22 2e  .var dir    = ".
41e0: 22 3b 0a 09 66 6f 72 20 28 76 61 72 20 61 72 67  ";..for (var arg
41f0: 20 69 6e 20 61 72 67 73 29 20 7b 0a 09 20 20 76   in args) {..  v
4200: 61 72 20 70 61 74 68 20 20 20 20 3d 20 61 72 67  ar path    = arg
4210: 73 5b 61 72 67 5d 2e 74 6f 53 74 72 69 6e 67 28  s[arg].toString(
4220: 29 3b 0a 09 20 20 69 66 28 70 61 74 68 2e 6d 61  );..  if(path.ma
4230: 74 63 68 28 22 5b 2f 5d 22 29 29 20 7b 0a 09 20  tch("[/]")) {.. 
4240: 20 20 20 20 76 61 72 20 64 69 72 20 20 20 20 3d      var dir    =
4250: 20 69 6e 74 65 72 70 2e 64 69 72 6e 61 6d 65 28   interp.dirname(
4260: 70 61 74 68 29 3b 0a 09 20 20 20 20 20 76 61 72  path);..     var
4270: 20 70 72 65 66 69 78 20 3d 20 64 69 72 2b 22 2f   prefix = dir+"/
4280: 22 3b 0a 09 20 20 7d 0a 09 20 20 76 61 72 20 70  ";..  }..  var p
4290: 61 74 74 65 72 6e 20 3d 20 70 61 74 68 2e 73 70  attern = path.sp
42a0: 6c 69 74 28 22 2f 22 29 2e 70 6f 70 28 29 2e 72  lit("/").pop().r
42b0: 65 70 6c 61 63 65 28 2f 5b 2a 5d 2f 67 2c 22 2e  eplace(/[*]/g,".
42c0: 2a 22 29 3b 0a 09 20 20 76 61 72 20 66 69 6c 65  *");..  var file
42d0: 73 20 20 20 3d 20 66 73 2e 72 65 61 64 64 69 72  s   = fs.readdir
42e0: 53 79 6e 63 28 64 69 72 29 3b 0a 09 20 20 66 6f  Sync(dir);..  fo
42f0: 72 20 28 76 61 72 20 69 20 69 6e 20 66 69 6c 65  r (var i in file
4300: 73 29 20 7b 0a 09 20 20 20 20 69 66 28 66 69 6c  s) {..    if(fil
4310: 65 73 5b 69 5d 2e 6d 61 74 63 68 28 22 5e 5b 2e  es[i].match("^[.
4320: 5d 22 29 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 09  ]")) continue;..
4330: 20 20 20 20 69 66 28 66 69 6c 65 73 5b 69 5d 20      if(files[i] 
4340: 3d 3d 20 70 61 74 74 65 72 6e 29 20 7b 72 65 73  == pattern) {res
4350: 2e 70 75 73 68 28 66 69 6c 65 73 5b 69 5d 29 3b  .push(files[i]);
4360: 7d 0a 09 20 20 20 20 69 66 28 66 69 6c 65 73 5b  }..    if(files[
4370: 69 5d 2e 6d 61 74 63 68 28 22 5e 22 2b 70 61 74  i].match("^"+pat
4380: 74 65 72 6e 2b 22 24 22 29 29 20 7b 0a 09 20 20  tern+"$")) {..  
4390: 20 20 20 20 76 61 72 20 66 69 6c 65 20 3d 20 28      var file = (
43a0: 64 69 72 20 3d 3d 20 22 2e 22 29 3f 20 66 69 6c  dir == ".")? fil
43b0: 65 73 5b 69 5d 20 3a 20 64 69 72 2b 22 2f 22 2b  es[i] : dir+"/"+
43c0: 66 69 6c 65 73 5b 69 5d 3b 0a 09 20 20 20 20 20  files[i];..     
43d0: 20 72 65 73 2e 70 75 73 68 28 66 69 6c 65 2e 72   res.push(file.r
43e0: 65 70 6c 61 63 65 28 2f 5c 2f 5c 2f 2f 2c 22 2f  eplace(/\/\//,"/
43f0: 22 29 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20 7d  "));..    }..  }
4400: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 72 65 73 3b  ..}..return res;
4410: 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  .      });.    t
4420: 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d  his.registerComm
4430: 61 6e 64 28 22 69 66 22 2c 20 66 75 6e 63 74 69  and("if", functi
4440: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
4450: 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73  ) {.        this
4460: 2e 61 72 69 74 79 28 61 72 67 73 2c 20 33 2c 20  .arity(args, 3, 
4470: 49 6e 66 69 6e 69 74 79 29 3b 0a 20 20 20 20 20  Infinity);.     
4480: 20 20 20 76 61 72 20 63 6f 6e 64 20 3d 20 61 72     var cond = ar
4490: 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29  gs[1].toString()
44a0: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 74 65  ;.        var te
44b0: 73 74 20 3d 20 69 6e 74 65 72 70 2e 6f 62 6a 65  st = interp.obje
44c0: 63 74 69 66 79 28 69 6e 74 65 72 70 2e 65 78 70  ctify(interp.exp
44d0: 72 28 69 6e 74 65 72 70 2c 20 63 6f 6e 64 29 29  r(interp, cond))
44e0: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 65  ;.        if (te
44f0: 73 74 2e 74 6f 42 6f 6f 6c 65 61 6e 28 29 29 20  st.toBoolean()) 
4500: 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e 65 76  return interp.ev
4510: 61 6c 28 61 72 67 73 5b 32 5d 2e 74 6f 53 74 72  al(args[2].toStr
4520: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ing());.        
4530: 69 66 20 28 61 72 67 73 2e 6c 65 6e 67 74 68 20  if (args.length 
4540: 3d 3d 20 33 29 20 72 65 74 75 72 6e 3b 0a 20 20  == 3) return;.  
4550: 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
4560: 20 3d 20 33 3b 20 69 20 3c 20 61 72 67 73 2e 6c   = 3; i < args.l
4570: 65 6e 67 74 68 3b 20 29 20 7b 0a 20 20 20 20 20  ength; ) {.     
4580: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
4590: 72 67 73 5b 69 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[i].toString(
45a0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
45b0: 20 63 61 73 65 20 22 65 6c 73 65 22 3a 0a 20 20   case "else":.  
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
45d0: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 69  is.arity(args, i
45e0: 20 2b 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20   + 2);.         
45f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e         return in
4600: 74 65 72 70 2e 65 76 61 6c 28 61 72 67 73 5b 69  terp.eval(args[i
4610: 2b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29 3b  +1].toString());
4620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
4630: 65 20 22 65 6c 73 65 69 66 22 3a 0a 20 20 20 20  e "elseif":.    
4640: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4650: 2e 61 72 69 74 79 28 61 72 67 73 2c 20 69 20 2b  .arity(args, i +
4660: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   3);.           
4670: 20 20 20 20 20 74 65 73 74 20 3d 20 69 6e 74 65       test = inte
4680: 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 69 6e 74  rp.objectify(int
4690: 65 72 70 2e 65 78 70 72 28 69 6e 74 65 72 70 2c  erp.expr(interp,
46a0: 20 61 72 67 73 5b 69 2b 31 5d 2e 74 6f 53 74 72   args[i+1].toStr
46b0: 69 6e 67 28 29 29 29 3b 0a 20 20 20 20 20 20 20  ing()));.       
46c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 65 73           if (tes
46d0: 74 2e 74 6f 42 6f 6f 6c 65 61 6e 28 29 29 0a 20  t.toBoolean()). 
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 20 20 72 65 74 75 72 6e 20 69 6e 74 65 72 70     return interp
4700: 2e 65 76 61 6c 28 61 72 67 73 5b 69 2b 32 5d 2e  .eval(args[i+2].
4710: 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20 20  toString());.   
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 20 2b               i +
4730: 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 3;.           
4740: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4750: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
4760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4770: 20 74 68 72 6f 77 20 22 45 78 70 65 63 74 65 64   throw "Expected
4780: 20 27 65 6c 73 65 27 20 6f 72 20 27 65 6c 73 65   'else' or 'else
4790: 69 66 27 2c 20 67 6f 74 20 22 2b 20 61 72 67 73  if', got "+ args
47a0: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [i];.           
47b0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
47c0: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
47d0: 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 69  gisterCommand("i
47e0: 6e 63 72 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ncr", function (
47f0: 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a  interp, args) {.
4800: 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 69          this.ari
4810: 74 79 28 61 72 67 73 2c 20 32 2c 20 33 29 3b 0a  ty(args, 2, 3);.
4820: 20 20 20 20 20 20 20 20 76 61 72 20 6e 61 6d 65          var name
4830: 20 3d 20 61 72 67 73 5b 31 5d 3b 0a 20 20 20 20   = args[1];.    
4840: 20 20 20 20 69 66 20 28 61 72 67 73 2e 6c 65 6e      if (args.len
4850: 67 74 68 20 3d 3d 20 32 29 20 76 61 72 20 69 6e  gth == 2) var in
4860: 63 72 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  cr = 1;.        
4870: 65 6c 73 65 20 76 61 72 20 69 6e 63 72 20 3d 20  else var incr = 
4880: 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69 66 79  interp.objectify
4890: 28 61 72 67 73 5b 32 5d 29 2e 74 6f 49 6e 74 65  (args[2]).toInte
48a0: 67 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20 69  ger();.        i
48b0: 6e 63 72 20 2b 3d 20 69 6e 74 65 72 70 2e 67 65  ncr += interp.ge
48c0: 74 56 61 72 28 6e 61 6d 65 29 2e 74 6f 49 6e 74  tVar(name).toInt
48d0: 65 67 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20  eger();.        
48e0: 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e 73 65  return interp.se
48f0: 74 56 61 72 28 6e 61 6d 65 2c 20 6e 65 77 20 54  tVar(name, new T
4900: 63 6c 4f 62 6a 65 63 74 28 69 6e 63 72 2c 20 22  clObject(incr, "
4910: 49 4e 54 45 47 45 52 22 29 29 3b 0a 20 20 20 20  INTEGER"));.    
4920: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67  });.    this.reg
4930: 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28  isterSubCommand(
4940: 22 69 6e 66 6f 22 2c 20 22 61 72 67 73 22 2c 20  "info", "args", 
4950: 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70  function (interp
4960: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20  , args) {.      
4970: 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67    this.arity(arg
4980: 73 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 76  s, 2);.        v
4990: 61 72 20 6e 61 6d 65 20 3d 20 61 72 67 73 5b 31  ar name = args[1
49a0: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].toString();.  
49b0: 20 20 20 20 20 20 69 66 20 28 21 69 6e 74 65 72        if (!inter
49c0: 70 2e 70 72 6f 63 73 5b 6e 61 6d 65 5d 29 20 74  p.procs[name]) t
49d0: 68 72 6f 77 20 27 22 27 2b 6e 61 6d 65 2b 27 22  hrow '"'+name+'"
49e0: 20 69 73 6e 5c 27 74 20 61 20 70 72 6f 63 65 64   isn\'t a proced
49f0: 75 72 65 27 3b 0a 20 20 20 20 20 20 20 20 72 65  ure';.        re
4a00: 74 75 72 6e 20 69 6e 74 65 72 70 2e 67 65 74 43  turn interp.getC
4a10: 6f 6d 6d 61 6e 64 28 6e 61 6d 65 29 2e 70 72 69  ommand(name).pri
4a20: 76 64 61 74 61 5b 30 5d 3b 0a 20 20 20 20 7d 29  vdata[0];.    })
4a30: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
4a40: 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 69  terSubCommand("i
4a50: 6e 66 6f 22 2c 20 22 62 6f 64 79 22 2c 20 66 75  nfo", "body", fu
4a60: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
4a70: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
4a80: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
4a90: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72   2);.        var
4aa0: 20 6e 61 6d 65 20 3d 20 61 72 67 73 5b 31 5d 2e   name = args[1].
4ab0: 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  toString();.    
4ac0: 20 20 20 20 69 66 20 28 21 69 6e 74 65 72 70 2e      if (!interp.
4ad0: 70 72 6f 63 73 5b 6e 61 6d 65 5d 29 20 74 68 72  procs[name]) thr
4ae0: 6f 77 20 27 22 27 2b 6e 61 6d 65 2b 27 22 20 69  ow '"'+name+'" i
4af0: 73 6e 5c 27 74 20 61 20 70 72 6f 63 65 64 75 72  sn\'t a procedur
4b00: 65 27 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  e';.        retu
4b10: 72 6e 20 69 6e 74 65 72 70 2e 67 65 74 43 6f 6d  rn interp.getCom
4b20: 6d 61 6e 64 28 6e 61 6d 65 29 2e 70 72 69 76 64  mand(name).privd
4b30: 61 74 61 5b 31 5d 3b 0a 20 20 20 20 7d 29 3b 0a  ata[1];.    });.
4b40: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65      this.registe
4b50: 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 69 6e 66  rSubCommand("inf
4b60: 6f 22 2c 20 22 63 6f 6d 6d 61 6e 64 73 22 2c 20  o", "commands", 
4b70: 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70  function (interp
4b80: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20  , args) {.      
4b90: 20 20 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e    return interp.
4ba0: 6d 6b 4c 69 73 74 28 69 6e 74 65 72 70 2e 63 6f  mkList(interp.co
4bb0: 6d 6d 61 6e 64 73 29 3b 0a 20 20 20 20 7d 29 3b  mmands);.    });
4bc0: 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74  .    this.regist
4bd0: 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 69 6e  erSubCommand("in
4be0: 66 6f 22 2c 20 22 65 78 69 73 74 73 22 2c 20 66  fo", "exists", f
4bf0: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
4c00: 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20   args) {.       
4c10: 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73   this.arity(args
4c20: 2c 20 32 29 3b 0a 09 76 61 72 20 6e 61 6d 65 20  , 2);..var name 
4c30: 3d 20 61 72 67 73 5b 31 5d 3b 0a 09 74 72 79 20  = args[1];..try 
4c40: 7b 69 6e 74 65 72 70 2e 67 65 74 56 61 72 28 6e  {interp.getVar(n
4c50: 61 6d 65 29 3b 20 72 65 74 75 72 6e 20 31 3b 7d  ame); return 1;}
4c60: 20 63 61 74 63 68 28 65 29 20 7b 72 65 74 75 72   catch(e) {retur
4c70: 6e 20 30 3b 7d 0a 20 20 20 20 7d 29 3b 0a 20 20  n 0;}.    });.  
4c80: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53    this.registerS
4c90: 75 62 43 6f 6d 6d 61 6e 64 28 22 69 6e 66 6f 22  ubCommand("info"
4ca0: 2c 20 22 67 6c 6f 62 61 6c 73 22 2c 20 66 75 6e  , "globals", fun
4cb0: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
4cc0: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 72  rgs) {.        r
4cd0: 65 74 75 72 6e 20 69 6e 74 65 72 70 2e 69 6e 66  eturn interp.inf
4ce0: 6f 76 61 72 73 28 30 29 3b 0a 20 20 20 20 7d 29  ovars(0);.    })
4cf0: 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73  ;.    this.regis
4d00: 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 69  terSubCommand("i
4d10: 6e 66 6f 22 2c 20 22 6c 65 76 65 6c 22 2c 20 66  nfo", "level", f
4d20: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
4d30: 20 61 72 67 73 29 20 7b 0a 09 69 66 28 61 72 67   args) {..if(arg
4d40: 73 2e 6c 65 6e 67 74 68 20 3d 3d 20 31 29 0a 09  s.length == 1)..
4d50: 20 20 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e    return interp.
4d60: 6c 65 76 65 6c 3b 0a 09 76 61 72 20 64 65 6c 74  level;..var delt
4d70: 61 20 3d 20 61 72 67 73 5b 31 5d 3b 0a 09 72 65  a = args[1];..re
4d80: 74 75 72 6e 20 69 6e 74 65 72 70 2e 6c 65 76 65  turn interp.leve
4d90: 6c 63 61 6c 6c 5b 69 6e 74 65 72 70 2e 6c 65 76  lcall[interp.lev
4da0: 65 6c 20 2d 20 64 65 6c 74 61 5d 3b 0a 20 20 20  el - delta];.   
4db0: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
4dc0: 67 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64  gisterSubCommand
4dd0: 28 22 69 6e 66 6f 22 2c 20 22 6e 61 6d 65 6f 66  ("info", "nameof
4de0: 65 78 65 63 75 74 61 62 6c 65 22 2c 20 66 75 6e  executable", fun
4df0: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
4e00: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20  rgs) {.         
4e10: 20 20 20 72 65 74 75 72 6e 20 70 72 6f 63 65 73     return proces
4e20: 73 2e 65 78 65 63 50 61 74 68 3b 0a 20 20 20 20  s.execPath;.    
4e30: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67  });.    this.reg
4e40: 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28  isterSubCommand(
4e50: 22 69 6e 66 6f 22 2c 20 22 70 61 74 63 68 6c 65  "info", "patchle
4e60: 76 65 6c 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  vel", function (
4e70: 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a  interp, args) {.
4e80: 09 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e 70  .return interp.p
4e90: 61 74 63 68 6c 65 76 65 6c 3b 0a 20 20 20 20 7d  atchlevel;.    }
4ea0: 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69  );.    this.regi
4eb0: 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22  sterSubCommand("
4ec0: 69 6e 66 6f 22 2c 20 22 70 72 6f 63 73 22 2c 20  info", "procs", 
4ed0: 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70  function (interp
4ee0: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20  , args) {.      
4ef0: 20 20 72 65 74 75 72 6e 20 69 6e 74 65 72 70 2e    return interp.
4f00: 6d 6b 4c 69 73 74 28 69 6e 74 65 72 70 2e 70 72  mkList(interp.pr
4f10: 6f 63 73 29 3b 0a 20 20 20 20 7d 29 3b 0a 20 20  ocs);.    });.  
4f20: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53    this.registerS
4f30: 75 62 43 6f 6d 6d 61 6e 64 28 22 69 6e 66 6f 22  ubCommand("info"
4f40: 2c 20 22 73 63 72 69 70 74 22 2c 20 66 75 6e 63  , "script", func
4f50: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
4f60: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65  gs) {.        re
4f70: 74 75 72 6e 20 69 6e 74 65 72 70 2e 73 63 72 69  turn interp.scri
4f80: 70 74 3b 0a 20 20 20 20 7d 29 3b 0a 20 20 20 20  pt;.    });.    
4f90: 74 68 69 73 2e 72 65 67 69 73 74 65 72 53 75 62  this.registerSub
4fa0: 43 6f 6d 6d 61 6e 64 28 22 69 6e 66 6f 22 2c 20  Command("info", 
4fb0: 22 76 61 72 73 22 2c 20 66 75 6e 63 74 69 6f 6e  "vars", function
4fc0: 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20   (interp, args) 
4fd0: 7b 0a 09 72 65 74 75 72 6e 20 69 6e 74 65 72 70  {..return interp
4fe0: 2e 69 6e 66 6f 76 61 72 73 28 69 6e 74 65 72 70  .infovars(interp
4ff0: 2e 6c 65 76 65 6c 29 3b 0a 20 20 20 20 20 20 7d  .level);.      }
5000: 29 3b 0a 20 20 20 20 74 68 69 73 2e 69 6e 66 6f  );.    this.info
5010: 76 61 72 73 20 3d 20 66 75 6e 63 74 69 6f 6e 28  vars = function(
5020: 6c 65 76 65 6c 29 20 7b 20 2f 2f 20 61 6c 73 6f  level) { // also
5030: 20 75 73 65 64 20 69 6e 20 5b 69 6e 66 6f 20 67   used in [info g
5040: 6c 6f 62 61 6c 73 5d 0a 20 20 20 20 20 20 76 61  lobals].      va
5050: 72 20 72 65 73 20 3d 20 5b 5d 3b 0a 20 20 20 20  r res = [];.    
5060: 20 20 66 6f 72 28 76 61 72 20 69 20 69 6e 20 74    for(var i in t
5070: 68 69 73 2e 63 61 6c 6c 66 72 61 6d 65 5b 6c 65  his.callframe[le
5080: 76 65 6c 5d 29 20 7b 0a 09 74 72 79 20 7b 0a 09  vel]) {..try {..
5090: 20 20 69 66 28 74 68 69 73 2e 67 65 74 56 61 72    if(this.getVar
50a0: 28 69 29 20 21 3d 20 6e 75 6c 6c 29 20 7b 72 65  (i) != null) {re
50b0: 73 2e 70 75 73 68 28 69 29 3b 7d 0a 09 7d 20 63  s.push(i);}..} c
50c0: 61 74 63 68 28 65 29 20 7b 7d 3b 0a 20 20 20 20  atch(e) {};.    
50d0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
50e0: 20 72 65 73 3b 0a 20 20 20 20 7d 0a 20 20 20 20   res;.    }.    
50f0: 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d  this.registerCom
5100: 6d 61 6e 64 28 22 6a 6f 69 6e 22 2c 20 66 75 6e  mand("join", fun
5110: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
5120: 72 67 73 29 20 7b 0a 09 74 68 69 73 2e 61 72 69  rgs) {..this.ari
5130: 74 79 28 61 72 67 73 2c 20 32 2c 20 33 29 3b 0a  ty(args, 2, 3);.
5140: 09 76 61 72 20 6c 73 74 20 3d 20 61 72 67 73 5b  .var lst = args[
5150: 31 5d 2e 74 6f 4c 69 73 74 28 29 3b 0a 09 76 61  1].toList();..va
5160: 72 20 73 65 70 20 3d 20 22 20 22 3b 0a 09 69 66  r sep = " ";..if
5170: 28 61 72 67 73 2e 6c 65 6e 67 74 68 20 3d 3d 20  (args.length == 
5180: 33 29 20 73 65 70 20 3d 20 61 72 67 73 5b 32 5d  3) sep = args[2]
5190: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 09 76 61  .toString();..va
51a0: 72 20 72 65 73 20 3d 20 5b 5d 3b 0a 09 76 61 72  r res = [];..var
51b0: 20 72 65 20 20 3d 20 2f 5e 7b 2e 2a 7d 24 2f 3b   re  = /^{.*}$/;
51c0: 0a 09 66 6f 72 20 28 76 61 72 20 69 20 69 6e 20  ..for (var i in 
51d0: 6c 73 74 29 20 7b 0a 09 20 20 76 61 72 20 77 6f  lst) {..  var wo
51e0: 72 64 20 3d 20 6c 73 74 5b 69 5d 2e 74 6f 53 74  rd = lst[i].toSt
51f0: 72 69 6e 67 28 29 3b 0a 09 20 20 69 66 20 28 72  ring();..  if (r
5200: 65 2e 74 65 73 74 28 77 6f 72 64 29 29 20 77 6f  e.test(word)) wo
5210: 72 64 20 3d 20 77 6f 72 64 2e 73 75 62 73 74 72  rd = word.substr
5220: 69 6e 67 28 31 2c 77 6f 72 64 2e 6c 65 6e 67 74  ing(1,word.lengt
5230: 68 2d 31 29 3b 0a 09 20 20 72 65 73 2e 70 75 73  h-1);..  res.pus
5240: 68 28 77 6f 72 64 29 3b 0a 09 7d 0a 09 72 65 74  h(word);..}..ret
5250: 75 72 6e 20 72 65 73 2e 6a 6f 69 6e 28 73 65 70  urn res.join(sep
5260: 29 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  );.      });.   
5270: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f   this.registerCo
5280: 6d 6d 61 6e 64 28 22 6a 73 65 76 61 6c 22 2c 20  mmand("jseval", 
5290: 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70  function (interp
52a0: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20  , args) {.      
52b0: 20 20 72 65 74 75 72 6e 20 65 76 61 6c 28 61 72    return eval(ar
52c0: 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29  gs[1].toString()
52d0: 29 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  );.      });.   
52e0: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f   this.registerCo
52f0: 6d 6d 61 6e 64 28 22 6c 61 70 70 65 6e 64 22 2c  mmand("lappend",
5300: 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72   function (inter
5310: 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20  p, args) {.     
5320: 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72     this.arity(ar
5330: 67 73 2c 20 32 2c 20 49 6e 66 69 6e 69 74 79 29  gs, 2, Infinity)
5340: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 76 6e  ;.        var vn
5350: 61 6d 65 20 3d 20 61 72 67 73 5b 31 5d 2e 74 6f  ame = args[1].to
5360: 53 74 72 69 6e 67 28 29 3b 0a 09 74 72 79 20 7b  String();..try {
5370: 0a 09 20 20 76 61 72 20 6c 69 73 74 20 3d 20 69  ..  var list = i
5380: 6e 74 65 72 70 2e 67 65 74 56 61 72 28 76 6e 61  nterp.getVar(vna
5390: 6d 65 29 3b 0a 09 7d 20 63 61 74 63 68 28 65 29  me);..} catch(e)
53a0: 20 7b 76 61 72 20 6c 69 73 74 20 3d 20 6e 65 77   {var list = new
53b0: 20 54 63 6c 4f 62 6a 65 63 74 28 5b 5d 29 3b 7d   TclObject([]);}
53c0: 0a 20 20 20 20 20 20 20 20 6c 69 73 74 2e 74 6f  .        list.to
53d0: 4c 69 73 74 28 29 3b 0a 20 20 20 20 20 20 20 20  List();.        
53e0: 66 6f 72 20 28 76 61 72 20 69 20 3d 20 32 3b 20  for (var i = 2; 
53f0: 69 20 3c 20 61 72 67 73 2e 6c 65 6e 67 74 68 3b  i < args.length;
5400: 20 69 2b 2b 29 20 7b 0a 09 20 20 69 66 28 61 72   i++) {..  if(ar
5410: 67 73 5b 69 5d 20 3d 3d 20 22 22 29 20 61 72 67  gs[i] == "") arg
5420: 73 5b 69 5d 20 3d 20 22 7b 7d 22 3b 0a 09 20 20  s[i] = "{}";..  
5430: 6c 69 73 74 2e 63 6f 6e 74 65 6e 74 2e 70 75 73  list.content.pus
5440: 68 28 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69  h(interp.objecti
5450: 66 79 28 61 72 67 73 5b 69 5d 29 29 3b 0a 20 20  fy(args[i]));.  
5460: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5470: 69 6e 74 65 72 70 2e 73 65 74 56 61 72 28 76 6e  interp.setVar(vn
5480: 61 6d 65 2c 20 6c 69 73 74 29 3b 0a 20 20 20 20  ame, list);.    
5490: 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 3b      return list;
54a0: 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  .      });.    t
54b0: 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d  his.registerComm
54c0: 61 6e 64 28 22 6c 69 6e 64 65 78 22 2c 20 66 75  and("lindex", fu
54d0: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
54e0: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
54f0: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
5500: 20 33 2c 20 49 6e 66 69 6e 69 74 79 29 3b 0a 20   3, Infinity);. 
5510: 20 20 20 20 20 20 20 76 61 72 20 6c 69 73 74 20         var list 
5520: 3d 20 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69  = interp.objecti
5530: 66 79 28 61 72 67 73 5b 31 5d 29 3b 0a 20 20 20  fy(args[1]);.   
5540: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
5550: 3d 20 32 3b 20 69 20 3c 20 61 72 67 73 2e 6c 65  = 2; i < args.le
5560: 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
5570: 74 72 79 20 7b 0a 09 20 20 20 20 76 61 72 20 69  try {..    var i
5580: 6e 64 65 78 20 3d 20 6c 69 73 74 2e 6c 69 73 74  ndex = list.list
5590: 49 6e 64 65 78 28 61 72 67 73 5b 69 5d 29 3b 0a  Index(args[i]);.
55a0: 09 20 20 7d 20 63 61 74 63 68 20 28 65 29 20 7b  .  } catch (e) {
55b0: 0a 09 20 20 20 20 69 66 20 28 65 20 3d 3d 20 22  ..    if (e == "
55c0: 49 6e 64 65 78 20 6f 75 74 20 6f 66 20 62 6f 75  Index out of bou
55d0: 6e 64 73 22 29 20 72 65 74 75 72 6e 20 22 22 3b  nds") return "";
55e0: 0a 09 20 20 20 20 74 68 72 6f 77 20 65 3b 0a 09  ..    throw e;..
55f0: 20 20 7d 0a 09 20 20 6c 69 73 74 20 3d 20 6c 69    }..  list = li
5600: 73 74 2e 63 6f 6e 74 65 6e 74 5b 69 6e 64 65 78  st.content[index
5610: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ];.        }.   
5620: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 74 65       return inte
5630: 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 6c 69 73  rp.objectify(lis
5640: 74 29 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20  t);.      });.  
5650: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43    this.registerC
5660: 6f 6d 6d 61 6e 64 28 22 6c 69 73 74 22 2c 20 66  ommand("list", f
5670: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
5680: 20 61 72 67 73 29 20 7b 0a 09 61 72 67 73 2e 73   args) {..args.s
5690: 68 69 66 74 28 29 3b 0a 09 72 65 74 75 72 6e 20  hift();..return 
56a0: 6e 65 77 20 54 63 6c 4f 62 6a 65 63 74 28 61 72  new TclObject(ar
56b0: 67 73 29 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20  gs);.      });. 
56c0: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
56d0: 43 6f 6d 6d 61 6e 64 28 22 6c 6c 65 6e 67 74 68  Command("llength
56e0: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  ", function (int
56f0: 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20  erp, args) {.   
5700: 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28       this.arity(
5710: 61 72 67 73 2c 20 32 29 3b 0a 20 20 20 20 20 20  args, 2);.      
5720: 20 20 72 65 74 75 72 6e 20 61 72 67 73 5b 31 5d    return args[1]
5730: 2e 74 6f 4c 69 73 74 28 29 2e 6c 65 6e 67 74 68  .toList().length
5740: 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20  ;.      });.    
5750: 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d  this.registerCom
5760: 6d 61 6e 64 28 22 6c 72 61 6e 67 65 22 2c 20 66  mand("lrange", f
5770: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
5780: 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20   args) {.       
5790: 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73   this.arity(args
57a0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 76 61  , 4);.        va
57b0: 72 20 6c 69 73 74 20 20 3d 20 69 6e 74 65 72 70  r list  = interp
57c0: 2e 6f 62 6a 65 63 74 69 66 79 28 61 72 67 73 5b  .objectify(args[
57d0: 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72  1]);.        var
57e0: 20 73 74 61 72 74 20 3d 20 6c 69 73 74 2e 6c 69   start = list.li
57f0: 73 74 49 6e 64 65 78 28 61 72 67 73 5b 32 5d 29  stIndex(args[2])
5800: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 65 6e  ;.        var en
5810: 64 20 20 20 3d 20 6c 69 73 74 2e 6c 69 73 74 49  d   = list.listI
5820: 6e 64 65 78 28 61 72 67 73 5b 33 5d 29 2b 31 3b  ndex(args[3])+1;
5830: 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 09  .        try {..
5840: 20 20 72 65 74 75 72 6e 20 6c 69 73 74 2e 63 6f    return list.co
5850: 6e 74 65 6e 74 2e 73 6c 69 63 65 28 73 74 61 72  ntent.slice(star
5860: 74 2c 20 65 6e 64 29 3b 0a 20 20 20 20 20 20 20  t, end);.       
5870: 20 7d 20 63 61 74 63 68 20 28 65 29 20 7b 72 65   } catch (e) {re
5880: 74 75 72 6e 20 5b 5d 3b 7d 0a 20 20 20 20 20 20  turn [];}.      
5890: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67  });.    this.reg
58a0: 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 6c 72  isterCommand("lr
58b0: 65 76 65 72 73 65 22 2c 20 66 75 6e 63 74 69 6f  everse", functio
58c0: 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29  n (interp, args)
58d0: 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e   {.        this.
58e0: 61 72 69 74 79 28 61 72 67 73 2c 20 32 29 3b 0a  arity(args, 2);.
58f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
5900: 72 67 73 5b 31 5d 2e 74 6f 4c 69 73 74 28 29 2e  rgs[1].toList().
5910: 72 65 76 65 72 73 65 28 29 3b 0a 20 20 20 20 20  reverse();.     
5920: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
5930: 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 6c  gisterCommand("l
5940: 73 65 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  set", function (
5950: 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a  interp, args) {.
5960: 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 69          this.ari
5970: 74 79 28 61 72 67 73 2c 20 34 2c 20 49 6e 66 69  ty(args, 4, Infi
5980: 6e 69 74 79 29 3b 0a 20 20 20 20 20 20 20 20 76  nity);.        v
5990: 61 72 20 6c 69 73 74 20 3d 20 69 6e 74 65 72 70  ar list = interp
59a0: 2e 67 65 74 56 61 72 28 61 72 67 73 5b 31 5d 2e  .getVar(args[1].
59b0: 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20 20  toString());.   
59c0: 20 20 20 20 20 76 61 72 20 65 6c 74 20 3d 20 6c       var elt = l
59d0: 69 73 74 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  ist;.        for
59e0: 20 28 76 61 72 20 69 20 3d 20 32 3b 20 69 20 3c   (var i = 2; i <
59f0: 20 61 72 67 73 2e 6c 65 6e 67 74 68 2d 32 3b 20   args.length-2; 
5a00: 69 2b 2b 29 20 7b 0a 09 20 20 65 6c 74 2e 74 6f  i++) {..  elt.to
5a10: 4c 69 73 74 28 29 3b 0a 09 20 20 65 6c 74 20 3d  List();..  elt =
5a20: 20 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69 66   interp.objectif
5a30: 79 28 65 6c 74 2e 63 6f 6e 74 65 6e 74 5b 65 6c  y(elt.content[el
5a40: 74 2e 6c 69 73 74 49 6e 64 65 78 28 61 72 67 73  t.listIndex(args
5a50: 5b 69 5d 29 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i])]);.        
5a60: 7d 0a 20 20 20 20 20 20 20 20 65 6c 74 2e 74 6f  }.        elt.to
5a70: 4c 69 73 74 28 29 3b 0a 20 20 20 20 20 20 20 20  List();.        
5a80: 69 20 3d 20 61 72 67 73 2e 6c 65 6e 67 74 68 20  i = args.length 
5a90: 2d 20 32 3b 0a 20 20 20 20 20 20 20 20 65 6c 74  - 2;.        elt
5aa0: 2e 63 6f 6e 74 65 6e 74 5b 65 6c 74 2e 6c 69 73  .content[elt.lis
5ab0: 74 49 6e 64 65 78 28 61 72 67 73 5b 69 5d 29 5d  tIndex(args[i])]
5ac0: 20 3d 20 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74   = interp.object
5ad0: 69 66 79 28 61 72 67 73 5b 69 2b 31 5d 29 3b 0a  ify(args[i+1]);.
5ae0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
5af0: 69 73 74 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20  ist;.      });. 
5b00: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
5b10: 43 6f 6d 6d 61 6e 64 28 22 6c 73 65 61 72 63 68  Command("lsearch
5b20: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  ", function (int
5b30: 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20  erp, args) {.   
5b40: 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28       this.arity(
5b50: 61 72 67 73 2c 20 33 29 3b 0a 20 20 20 20 20 20  args, 3);.      
5b60: 20 20 76 61 72 20 6c 73 74 20 3d 20 61 72 67 73    var lst = args
5b70: 5b 31 5d 2e 74 6f 4c 69 73 74 28 29 3b 0a 20 20  [1].toList();.  
5b80: 20 20 20 20 20 20 66 6f 72 28 76 61 72 20 69 20        for(var i 
5b90: 69 6e 20 6c 73 74 29 20 69 66 28 6c 73 74 5b 69  in lst) if(lst[i
5ba0: 5d 20 3d 3d 20 61 72 67 73 5b 32 5d 2e 74 6f 53  ] == args[2].toS
5bb0: 74 72 69 6e 67 28 29 29 20 72 65 74 75 72 6e 20  tring()) return 
5bc0: 69 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  i;.        retur
5bd0: 6e 20 2d 31 3b 0a 20 20 20 20 20 20 7d 29 3b 0a  n -1;.      });.
5be0: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65      this.registe
5bf0: 72 43 6f 6d 6d 61 6e 64 28 22 6c 73 6f 72 74 22  rCommand("lsort"
5c00: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  , function (inte
5c10: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20  rp, args) {.    
5c20: 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61      this.arity(a
5c30: 72 67 73 2c 20 32 29 3b 0a 20 20 20 20 20 20 20  rgs, 2);.       
5c40: 20 72 65 74 75 72 6e 20 61 72 67 73 5b 31 5d 2e   return args[1].
5c50: 74 6f 4c 69 73 74 28 29 2e 73 6f 72 74 28 29 3b  toList().sort();
5c60: 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  .      });.    t
5c70: 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d  his.registerComm
5c80: 61 6e 64 28 22 70 69 64 22 2c 20 66 75 6e 63 74  and("pid", funct
5c90: 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67  ion (interp, arg
5ca0: 73 29 20 7b 0a 09 72 65 74 75 72 6e 20 70 72 6f  s) {..return pro
5cb0: 63 65 73 73 2e 70 69 64 3b 0a 20 20 20 20 20 20  cess.pid;.      
5cc0: 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67  });.    this.reg
5cd0: 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 70 75  isterCommand("pu
5ce0: 74 73 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69  ts", function (i
5cf0: 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 09  nterp, args) {..
5d00: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
5d10: 20 32 29 3b 0a 09 70 75 74 73 28 61 72 67 73 5b   2);..puts(args[
5d20: 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a  1].toString());.
5d30: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68        });.    th
5d40: 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61  is.registerComma
5d50: 6e 64 28 22 70 77 64 22 2c 20 66 75 6e 63 74 69  nd("pwd", functi
5d60: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
5d70: 29 20 7b 0a 09 72 65 74 75 72 6e 20 70 72 6f 63  ) {..return proc
5d80: 65 73 73 2e 63 77 64 28 29 3b 0a 20 20 20 20 20  ess.cwd();.     
5d90: 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65   });.    this.re
5da0: 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22 70  gisterCommand("p
5db0: 72 6f 63 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  roc", function (
5dc0: 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a  interp, args) {.
5dd0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72 69          this.ari
5de0: 74 79 28 61 72 67 73 2c 20 34 29 3b 0a 20 20 20  ty(args, 4);.   
5df0: 20 20 20 20 20 76 61 72 20 6e 61 6d 65 20 3d 20       var name = 
5e00: 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67  args[1].toString
5e10: 28 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20  ();.        var 
5e20: 61 72 67 6c 20 3d 20 69 6e 74 65 72 70 2e 70 61  argl = interp.pa
5e30: 72 73 65 4c 69 73 74 28 61 72 67 73 5b 32 5d 29  rseList(args[2])
5e40: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 62 6f  ;.        var bo
5e50: 64 79 20 3d 20 61 72 67 73 5b 33 5d 2e 74 6f 53  dy = args[3].toS
5e60: 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20  tring();.       
5e70: 20 76 61 72 20 70 72 69 76 20 3d 20 5b 61 72 67   var priv = [arg
5e80: 6c 2c 20 62 6f 64 79 5d 3b 0a 20 20 20 20 20 20  l, body];.      
5e90: 20 20 69 6e 74 65 72 70 2e 63 6f 6d 6d 61 6e 64    interp.command
5ea0: 73 5b 6e 61 6d 65 5d 20 3d 20 6e 65 77 20 54 63  s[name] = new Tc
5eb0: 6c 43 6f 6d 6d 61 6e 64 28 54 63 6c 2e 50 72 6f  lCommand(Tcl.Pro
5ec0: 63 2c 20 70 72 69 76 29 3b 0a 20 20 20 20 20 20  c, priv);.      
5ed0: 20 20 69 6e 74 65 72 70 2e 70 72 6f 63 73 5b 6e    interp.procs[n
5ee0: 61 6d 65 5d 20 20 20 20 3d 20 74 72 75 65 3b 0a  ame]    = true;.
5ef0: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68        });.    th
5f00: 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61  is.registerComma
5f10: 6e 64 28 22 72 65 67 65 78 70 22 2c 20 66 75 6e  nd("regexp", fun
5f20: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
5f30: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74  rgs) {.        t
5f40: 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20  his.arity(args, 
5f50: 33 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20  3);.        var 
5f60: 72 65 20 20 20 20 3d 20 6e 65 77 20 52 65 67 45  re    = new RegE
5f70: 78 70 28 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72  xp(args[1].toStr
5f80: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ing());.        
5f90: 76 61 72 20 73 74 72 20 3d 20 61 72 67 73 5b 32  var str = args[2
5fa0: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].toString();.  
5fb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 74        return (st
5fc0: 72 2e 73 65 61 72 63 68 28 72 65 29 20 3e 20 2d  r.search(re) > -
5fd0: 31 3f 20 22 31 22 3a 22 30 22 29 3b 0a 20 20 20  1? "1":"0");.   
5fe0: 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e     });.    this.
5ff0: 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28  registerCommand(
6000: 22 72 65 67 73 75 62 22 2c 20 66 75 6e 63 74 69  "regsub", functi
6010: 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73  on (interp, args
6020: 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73  ) {.        this
6030: 2e 61 72 69 74 79 28 61 72 67 73 2c 20 34 29 3b  .arity(args, 4);
6040: 0a 20 20 20 20 20 20 20 20 76 61 72 20 72 65 20  .        var re 
6050: 20 20 20 3d 20 6e 65 77 20 52 65 67 45 78 70 28     = new RegExp(
6060: 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67  args[1].toString
6070: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72  ());.        var
6080: 20 73 74 72 20 3d 20 61 72 67 73 5b 32 5d 2e 74   str = args[2].t
6090: 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20  oString();.     
60a0: 20 20 20 76 61 72 20 74 72 67 20 3d 20 61 72 67     var trg = arg
60b0: 73 5b 33 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b  s[3].toString();
60c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
60d0: 28 73 74 72 2e 72 65 70 6c 61 63 65 28 72 65 2c  (str.replace(re,
60e0: 74 72 67 29 29 3b 0a 20 20 20 20 20 20 7d 29 3b  trg));.      });
60f0: 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74  .    this.regist
6100: 65 72 43 6f 6d 6d 61 6e 64 28 22 72 65 6e 61 6d  erCommand("renam
6110: 65 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e  e", function (in
6120: 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20  terp, args) {.  
6130: 20 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79        this.arity
6140: 28 61 72 67 73 2c 20 33 29 3b 0a 09 76 61 72 20  (args, 3);..var 
6150: 6e 61 6d 65 20 20 20 20 3d 20 61 72 67 73 5b 31  name    = args[1
6160: 5d 3b 0a 09 76 61 72 20 6e 65 77 6e 61 6d 65 20  ];..var newname 
6170: 3d 20 61 72 67 73 5b 32 5d 3b 0a 09 69 6e 74 65  = args[2];..inte
6180: 72 70 2e 63 6f 6d 6d 61 6e 64 73 5b 6e 65 77 6e  rp.commands[newn
6190: 61 6d 65 5d 20 3d 20 69 6e 74 65 72 70 2e 63 6f  ame] = interp.co
61a0: 6d 6d 61 6e 64 73 5b 6e 61 6d 65 5d 3b 0a 20 20  mmands[name];.  
61b0: 20 20 20 20 20 20 69 66 20 28 69 6e 74 65 72 70        if (interp
61c0: 2e 70 72 6f 63 73 5b 6e 61 6d 65 5d 29 20 7b 0a  .procs[name]) {.
61d0: 09 20 20 69 6e 74 65 72 70 2e 70 72 6f 63 73 5b  .  interp.procs[
61e0: 6e 61 6d 65 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20  name] = null;.. 
61f0: 20 69 6e 74 65 72 70 2e 70 72 6f 63 73 5b 6e 65   interp.procs[ne
6200: 77 6e 61 6d 65 5d 20 3d 20 74 72 75 65 3b 0a 20  wname] = true;. 
6210: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6220: 20 69 6e 74 65 72 70 2e 63 6f 6d 6d 61 6e 64 73   interp.commands
6230: 5b 6e 61 6d 65 5d 20 3d 20 6e 75 6c 6c 3b 0a 20  [name] = null;. 
6240: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69       });.    thi
6250: 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e  s.registerComman
6260: 64 28 22 72 65 74 75 72 6e 22 2c 20 66 75 6e 63  d("return", func
6270: 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72  tion (interp, ar
6280: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68  gs) {.        th
6290: 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 31  is.arity(args, 1
62a0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 76 61  , 2);.        va
62b0: 72 20 72 20 3d 20 61 72 67 73 5b 31 5d 3b 0a 20  r r = args[1];. 
62c0: 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 63 6f         interp.co
62d0: 64 65 20 3d 20 69 6e 74 65 72 70 2e 52 45 54 3b  de = interp.RET;
62e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
62f0: 72 3b 0a 20 20 20 20 7d 29 3b 0a 20 20 20 20 74  r;.    });.    t
6300: 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d 6d  his.registerComm
6310: 61 6e 64 28 22 73 65 74 22 2c 20 66 75 6e 63 74  and("set", funct
6320: 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67  ion (interp, arg
6330: 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69  s) {.        thi
6340: 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20 32 2c  s.arity(args, 2,
6350: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72   3);.        var
6360: 20 6e 61 6d 65 20 3d 20 61 72 67 73 5b 31 5d 3b   name = args[1];
6370: 0a 09 76 61 72 20 76 61 6c 20 20 3d 20 65 76 61  ..var val  = eva
6380: 6c 28 61 72 67 73 5b 32 5d 29 3b 0a 20 20 20 20  l(args[2]);.    
6390: 20 20 20 20 69 66 20 28 61 72 67 73 2e 6c 65 6e      if (args.len
63a0: 67 74 68 20 3d 3d 20 33 29 20 69 6e 74 65 72 70  gth == 3) interp
63b0: 2e 73 65 74 56 61 72 28 6e 61 6d 65 2c 20 76 61  .setVar(name, va
63c0: 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  l);.        retu
63d0: 72 6e 20 69 6e 74 65 72 70 2e 67 65 74 56 61 72  rn interp.getVar
63e0: 28 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 29 3b 0a  (name);.    });.
63f0: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65      this.registe
6400: 72 43 6f 6d 6d 61 6e 64 28 22 73 6f 75 72 63 65  rCommand("source
6410: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  ", function (int
6420: 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20  erp, args) {.   
6430: 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28       this.arity(
6440: 61 72 67 73 2c 20 32 29 3b 0a 20 20 20 20 20 20  args, 2);.      
6450: 20 20 69 6e 74 65 72 70 2e 73 63 72 69 70 74 20    interp.script 
6460: 3d 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69  = args[1].toStri
6470: 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 74 72  ng();.        tr
6480: 79 20 7b 0a 09 20 20 76 61 72 20 64 61 74 61 20  y {..  var data 
6490: 3d 20 66 73 2e 72 65 61 64 46 69 6c 65 53 79 6e  = fs.readFileSyn
64a0: 63 28 69 6e 74 65 72 70 2e 73 63 72 69 70 74 2c  c(interp.script,
64b0: 7b 65 6e 63 6f 64 69 6e 67 3a 20 27 75 74 66 38  {encoding: 'utf8
64c0: 27 7d 29 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a  '}).toString();.
64d0: 20 20 20 20 20 20 20 20 7d 20 63 61 74 63 68 28          } catch(
64e0: 65 29 20 7b 0a 09 20 20 70 75 74 73 28 22 65 3a  e) {..  puts("e:
64f0: 20 22 2b 65 29 3b 0a 09 20 20 74 68 72 6f 77 20   "+e);..  throw 
6500: 27 63 6f 75 6c 64 6e 5c 27 20 72 65 61 64 20 66  'couldn\' read f
6510: 69 6c 65 20 22 27 2b 69 6e 74 65 72 70 2e 73 63  ile "'+interp.sc
6520: 72 69 70 74 0a 09 20 20 20 20 2b 27 22 3a 20 6e  ript..    +'": n
6530: 6f 20 73 75 63 68 20 66 69 6c 65 20 6f 72 20 64  o such file or d
6540: 69 72 65 63 74 6f 72 79 27 3b 7d 0a 09 76 61 72  irectory';}..var
6550: 20 72 65 73 20 20 20 20 20 20 20 3d 20 69 6e 74   res       = int
6560: 65 72 70 2e 65 76 61 6c 28 64 61 74 61 29 3b 0a  erp.eval(data);.
6570: 09 69 6e 74 65 72 70 2e 73 63 72 69 70 74 20 3d  .interp.script =
6580: 20 22 22 3b 0a 09 72 65 74 75 72 6e 20 72 65 73   "";..return res
6590: 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20  ;.      });.    
65a0: 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f 6d  this.registerCom
65b0: 6d 61 6e 64 28 22 73 70 6c 69 74 22 2c 20 66 75  mand("split", fu
65c0: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
65d0: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
65e0: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
65f0: 20 32 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   2, 3);.        
6600: 76 61 72 20 73 74 72 20 3d 20 61 72 67 73 5b 31  var str = args[1
6610: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].toString();.  
6620: 20 20 20 20 20 20 76 61 72 20 73 65 70 20 3d 20        var sep = 
6630: 28 61 72 67 73 2e 6c 65 6e 67 74 68 20 3d 3d 20  (args.length == 
6640: 33 29 3f 20 61 72 67 73 5b 32 5d 2e 74 6f 53 74  3)? args[2].toSt
6650: 72 69 6e 67 28 29 20 3a 20 22 20 22 3b 0a 09 76  ring() : " ";..v
6660: 61 72 20 72 65 73 20 3d 20 5b 5d 2c 20 65 6c 65  ar res = [], ele
6670: 6d 65 6e 74 3b 0a 20 20 20 20 20 20 20 20 76 61  ment;.        va
6680: 72 20 74 6d 70 20 3d 20 73 74 72 2e 73 70 6c 69  r tmp = str.spli
6690: 74 28 73 65 70 29 3b 0a 09 66 6f 72 28 76 61 72  t(sep);..for(var
66a0: 20 69 20 69 6e 20 74 6d 70 29 20 7b 0a 09 20 20   i in tmp) {..  
66b0: 65 6c 65 6d 65 6e 74 20 3d 20 74 6d 70 5b 69 5d  element = tmp[i]
66c0: 3b 0a 09 20 20 69 66 28 65 6c 65 6d 65 6e 74 20  ;..  if(element 
66d0: 3d 3d 20 22 22 29 20 65 6c 65 6d 65 6e 74 20 3d  == "") element =
66e0: 20 22 7b 7d 22 3b 0a 09 20 20 72 65 73 2e 70 75   "{}";..  res.pu
66f0: 73 68 28 65 6c 65 6d 65 6e 74 29 3b 0a 09 7d 0a  sh(element);..}.
6700: 09 72 65 74 75 72 6e 20 72 65 73 2e 6a 6f 69 6e  .return res.join
6710: 28 22 20 22 29 3b 0a 20 20 20 20 20 20 7d 29 3b  (" ");.      });
6720: 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74  .    this.regist
6730: 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22 73 74  erSubCommand("st
6740: 72 69 6e 67 22 2c 20 22 63 6f 6d 70 61 72 65 22  ring", "compare"
6750: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  , function (inte
6760: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20  rp, args) {.    
6770: 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61      this.arity(a
6780: 72 67 73 2c 20 33 29 3b 0a 09 76 61 72 20 61 20  rgs, 3);..var a 
6790: 3d 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72 69  = args[1].toStri
67a0: 6e 67 28 29 3b 0a 09 76 61 72 20 62 20 3d 20 61  ng();..var b = a
67b0: 72 67 73 5b 32 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[2].toString(
67c0: 29 3b 0a 09 72 65 74 75 72 6e 20 61 20 3e 20 62  );..return a > b
67d0: 3f 20 22 31 22 3a 20 61 20 3c 20 62 3f 20 22 2d  ? "1": a < b? "-
67e0: 31 22 3a 20 22 30 22 3b 0a 20 20 20 20 20 20 7d  1": "0";.      }
67f0: 29 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69  );.    this.regi
6800: 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e 64 28 22  sterSubCommand("
6810: 73 74 72 69 6e 67 22 2c 20 22 65 71 75 61 6c 22  string", "equal"
6820: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  , function (inte
6830: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20  rp, args) {.    
6840: 20 20 20 20 74 68 69 73 2e 61 72 69 74 79 28 61      this.arity(a
6850: 72 67 73 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  rgs, 3);.       
6860: 20 72 65 74 75 72 6e 20 28 61 72 67 73 5b 31 5d   return (args[1]
6870: 2e 74 6f 53 74 72 69 6e 67 28 29 20 3d 3d 20 61  .toString() == a
6880: 72 67 73 5b 32 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[2].toString(
6890: 29 29 3f 20 22 31 22 3a 20 22 30 22 3b 0a 20 20  ))? "1": "0";.  
68a0: 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73      });.    this
68b0: 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d  .registerSubComm
68c0: 61 6e 64 28 22 73 74 72 69 6e 67 22 2c 20 22 69  and("string", "i
68d0: 6e 64 65 78 22 2c 20 66 75 6e 63 74 69 6f 6e 20  ndex", function 
68e0: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
68f0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72  .        this.ar
6900: 69 74 79 28 61 72 67 73 2c 20 33 29 3b 0a 20 20  ity(args, 3);.  
6910: 20 20 20 20 20 20 76 61 72 20 73 20 3d 20 61 72        var s = ar
6920: 67 73 5b 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29  gs[1].toString()
6930: 3b 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a  ;.        try {.
6940: 09 20 20 72 65 74 75 72 6e 20 73 2e 63 68 61 72  .  return s.char
6950: 41 74 28 61 72 67 73 5b 31 5d 2e 73 74 72 69 6e  At(args[1].strin
6960: 67 49 6e 64 65 78 28 61 72 67 73 5b 32 5d 29 29  gIndex(args[2]))
6970: 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74 63  ;.        } catc
6980: 68 20 28 65 29 20 7b 72 65 74 75 72 6e 20 22 22  h (e) {return ""
6990: 3b 7d 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20  ;}.      });.   
69a0: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53 75   this.registerSu
69b0: 62 43 6f 6d 6d 61 6e 64 28 22 73 74 72 69 6e 67  bCommand("string
69c0: 22 2c 20 22 6c 65 6e 67 74 68 22 2c 20 66 75 6e  ", "length", fun
69d0: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
69e0: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74  rgs) {.        t
69f0: 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20  his.arity(args, 
6a00: 32 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  2);.        retu
6a10: 72 6e 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72  rn args[1].toStr
6a20: 69 6e 67 28 29 2e 6c 65 6e 67 74 68 3b 0a 20 20  ing().length;.  
6a30: 20 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73      });.    this
6a40: 2e 72 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d  .registerSubComm
6a50: 61 6e 64 28 22 73 74 72 69 6e 67 22 2c 20 22 72  and("string", "r
6a60: 61 6e 67 65 22 2c 20 66 75 6e 63 74 69 6f 6e 20  ange", function 
6a70: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
6a80: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 72  .        this.ar
6a90: 69 74 79 28 61 72 67 73 2c 20 34 29 3b 0a 20 20  ity(args, 4);.  
6aa0: 20 20 20 20 20 20 76 61 72 20 73 20 3d 20 61 72        var s = ar
6ab0: 67 73 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 74  gs[1];.        t
6ac0: 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ry {.           
6ad0: 20 76 61 72 20 62 20 3d 20 73 2e 73 74 72 69 6e   var b = s.strin
6ae0: 67 49 6e 64 65 78 28 61 72 67 73 5b 32 5d 29 3b  gIndex(args[2]);
6af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
6b00: 20 65 20 3d 20 73 2e 73 74 72 69 6e 67 49 6e 64   e = s.stringInd
6b10: 65 78 28 61 72 67 73 5b 33 5d 29 3b 0a 20 20 20  ex(args[3]);.   
6b20: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 20 3e           if (b >
6b30: 20 65 29 20 72 65 74 75 72 6e 20 22 22 3b 0a 20   e) return "";. 
6b40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6b50: 6e 20 73 2e 74 6f 53 74 72 69 6e 67 28 29 2e 73  n s.toString().s
6b60: 75 62 73 74 72 69 6e 67 28 62 2c 20 65 20 2b 20  ubstring(b, e + 
6b70: 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61  1);.        } ca
6b80: 74 63 68 20 28 65 29 20 7b 72 65 74 75 72 6e 20  tch (e) {return 
6b90: 22 22 3b 7d 0a 20 20 20 20 7d 29 3b 0a 20 20 20  "";}.    });.   
6ba0: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53 75   this.registerSu
6bb0: 62 43 6f 6d 6d 61 6e 64 28 22 73 74 72 69 6e 67  bCommand("string
6bc0: 22 2c 20 22 74 6f 6c 6f 77 65 72 22 2c 20 66 75  ", "tolower", fu
6bd0: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
6be0: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
6bf0: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
6c00: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74   2);.        ret
6c10: 75 72 6e 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74  urn args[1].toSt
6c20: 72 69 6e 67 28 29 2e 74 6f 4c 6f 77 65 72 43 61  ring().toLowerCa
6c30: 73 65 28 29 3b 0a 20 20 20 20 7d 29 3b 0a 20 20  se();.    });.  
6c40: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 53    this.registerS
6c50: 75 62 43 6f 6d 6d 61 6e 64 28 22 73 74 72 69 6e  ubCommand("strin
6c60: 67 22 2c 20 22 74 6f 75 70 70 65 72 22 2c 20 66  g", "toupper", f
6c70: 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c  unction (interp,
6c80: 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20   args) {.       
6c90: 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73   this.arity(args
6ca0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 72 65  , 2);.        re
6cb0: 74 75 72 6e 20 61 72 67 73 5b 31 5d 2e 74 6f 53  turn args[1].toS
6cc0: 74 72 69 6e 67 28 29 2e 74 6f 55 70 70 65 72 43  tring().toUpperC
6cd0: 61 73 65 28 29 3b 0a 20 20 20 20 7d 29 3b 0a 20  ase();.    });. 
6ce0: 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72     this.register
6cf0: 53 75 62 43 6f 6d 6d 61 6e 64 28 22 73 74 72 69  SubCommand("stri
6d00: 6e 67 22 2c 20 22 74 72 69 6d 22 2c 20 66 75 6e  ng", "trim", fun
6d10: 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20 61  ction (interp, a
6d20: 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 74  rgs) {.        t
6d30: 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c 20  his.arity(args, 
6d40: 32 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  2);.        retu
6d50: 72 6e 20 61 72 67 73 5b 31 5d 2e 74 6f 53 74 72  rn args[1].toStr
6d60: 69 6e 67 28 29 2e 74 72 69 6d 28 29 3b 0a 20 20  ing().trim();.  
6d70: 20 20 7d 29 3b 0a 20 20 20 20 66 75 6e 63 74 69    });.    functi
6d80: 6f 6e 20 73 65 63 5f 6d 73 65 63 20 28 29 20 7b  on sec_msec () {
6d90: 0a 20 20 20 20 20 20 20 20 76 61 72 20 74 20 3d  .        var t =
6da0: 20 6e 65 77 20 44 61 74 65 28 29 3b 0a 20 20 20   new Date();.   
6db0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 2e 67 65       return t.ge
6dc0: 74 53 65 63 6f 6e 64 73 28 29 2a 31 30 30 30 20  tSeconds()*1000 
6dd0: 2b 20 74 2e 67 65 74 4d 69 6c 6c 69 73 65 63 6f  + t.getMilliseco
6de0: 6e 64 73 28 29 3b 0a 20 20 20 20 7d 0a 20 20 20  nds();.    }.   
6df0: 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43 6f   this.registerCo
6e00: 6d 6d 61 6e 64 28 22 74 69 6d 65 22 2c 20 66 75  mmand("time", fu
6e10: 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70 2c 20  nction (interp, 
6e20: 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20  args) {.        
6e30: 74 68 69 73 2e 61 72 69 74 79 28 61 72 67 73 2c  this.arity(args,
6e40: 20 32 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   2, 3);.        
6e50: 76 61 72 20 62 6f 64 79 20 3d 20 61 72 67 73 5b  var body = args[
6e60: 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20  1].toString();. 
6e70: 20 20 20 20 20 20 20 76 61 72 20 6e 20 20 20 20         var n    
6e80: 3d 20 28 61 72 67 73 2e 6c 65 6e 67 74 68 20 3d  = (args.length =
6e90: 3d 20 33 29 3f 20 61 72 67 73 5b 32 5d 20 3a 20  = 3)? args[2] : 
6ea0: 31 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 74  1;.        var t
6eb0: 30 20 20 20 3d 20 73 65 63 5f 6d 73 65 63 28 29  0   = sec_msec()
6ec0: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 76 61  ;.        for(va
6ed0: 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 6e 3b 20  r i = 0; i < n; 
6ee0: 69 2b 2b 29 20 69 6e 74 65 72 70 2e 65 76 61 6c  i++) interp.eval
6ef0: 28 62 6f 64 79 29 3b 0a 20 20 20 20 20 20 20 20  (body);.        
6f00: 72 65 74 75 72 6e 20 28 73 65 63 5f 6d 73 65 63  return (sec_msec
6f10: 28 29 2d 74 30 29 2a 31 30 30 30 2f 6e 20 2b 20  ()-t0)*1000/n + 
6f20: 22 20 6d 69 63 72 6f 73 65 63 6f 6e 64 73 20 70  " microseconds p
6f30: 65 72 20 69 74 65 72 61 74 69 6f 6e 22 3b 0a 20  er iteration";. 
6f40: 20 20 20 7d 29 3b 0a 20 20 20 20 74 68 69 73 2e     });.    this.
6f50: 72 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28  registerCommand(
6f60: 22 75 6e 73 65 74 22 2c 20 66 75 6e 63 74 69 6f  "unset", functio
6f70: 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29  n (interp, args)
6f80: 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e   {.        this.
6f90: 61 72 69 74 79 28 61 72 67 73 2c 20 32 2c 20 49  arity(args, 2, I
6fa0: 6e 66 69 6e 69 74 79 29 3b 0a 20 20 20 20 20 20  nfinity);.      
6fb0: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 31    for (var i = 1
6fc0: 3b 20 69 20 3c 20 61 72 67 73 2e 6c 65 6e 67 74  ; i < args.lengt
6fd0: 68 3b 20 69 2b 2b 29 0a 09 20 20 69 6e 74 65 72  h; i++)..  inter
6fe0: 70 2e 73 65 74 56 61 72 28 61 72 67 73 5b 69 5d  p.setVar(args[i]
6ff0: 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 7d 29 3b  , null);.    });
7000: 0a 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74  .    this.regist
7010: 65 72 43 6f 6d 6d 61 6e 64 28 22 75 70 6c 65 76  erCommand("uplev
7020: 65 6c 22 2c 66 75 6e 63 74 69 6f 6e 20 28 69 6e  el",function (in
7030: 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20  terp, args) {.  
7040: 20 20 20 20 20 20 74 68 69 73 2e 61 72 69 74 79        this.arity
7050: 28 61 72 67 73 2c 20 33 2c 20 49 6e 66 69 6e 69  (args, 3, Infini
7060: 74 79 29 3b 0a 09 76 61 72 20 6d 79 63 61 6c 6c  ty);..var mycall
7070: 66 72 61 6d 65 20 3d 20 69 6e 74 65 72 70 2e 63  frame = interp.c
7080: 61 6c 6c 66 72 61 6d 65 5b 69 6e 74 65 72 70 2e  allframe[interp.
7090: 6c 65 76 65 6c 5d 3b 0a 20 20 20 20 20 20 20 20  level];.        
70a0: 76 61 72 20 64 65 6c 74 61 20 3d 20 61 72 67 73  var delta = args
70b0: 5b 31 5d 2e 74 6f 49 6e 74 65 67 65 72 28 29 3b  [1].toInteger();
70c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e  .        interp.
70d0: 6c 65 76 65 6c 20 2d 3d 20 64 65 6c 74 61 3b 0a  level -= delta;.
70e0: 09 69 66 28 69 6e 74 65 72 70 2e 6c 65 76 65 6c  .if(interp.level
70f0: 20 3c 20 30 29 20 7b 0a 09 20 20 69 6e 74 65 72   < 0) {..  inter
7100: 70 2e 6c 65 76 65 6c 20 2b 3d 20 64 65 6c 74 61  p.level += delta
7110: 3b 0a 09 20 20 74 68 72 6f 77 20 27 62 61 64 20  ;..  throw 'bad 
7120: 6c 65 76 65 6c 20 22 27 2b 64 65 6c 74 61 2b 27  level "'+delta+'
7130: 22 27 3b 0a 09 7d 0a 20 20 20 20 20 20 20 20 66  "';..}.        f
7140: 6f 72 20 28 76 61 72 20 69 20 3d 20 32 3b 20 69  or (var i = 2; i
7150: 20 3c 20 61 72 67 73 2e 6c 65 6e 67 74 68 3b 20   < args.length; 
7160: 69 2b 2b 29 20 61 72 67 73 5b 69 5d 20 3d 20 61  i++) args[i] = a
7170: 72 67 73 5b 69 5d 2e 74 6f 53 74 72 69 6e 67 28  rgs[i].toString(
7180: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  );.        if (a
7190: 72 67 73 2e 6c 65 6e 67 74 68 20 3d 3d 20 33 29  rgs.length == 3)
71a0: 20 7b 0a 09 20 20 76 61 72 20 63 6f 64 65 20 3d   {..  var code =
71b0: 20 61 72 67 73 5b 32 5d 3b 0a 20 20 20 20 20 20   args[2];.      
71c0: 20 20 7d 20 65 6c 73 65 20 76 61 72 20 63 6f 64    } else var cod
71d0: 65 20 3d 20 61 72 67 73 2e 73 6c 69 63 65 28 32  e = args.slice(2
71e0: 29 2e 6a 6f 69 6e 28 22 20 22 29 3b 0a 20 20 20  ).join(" ");.   
71f0: 20 20 20 20 20 76 61 72 20 72 65 73 20 3d 20 69       var res = i
7200: 6e 74 65 72 70 2e 65 76 61 6c 28 63 6f 64 65 29  nterp.eval(code)
7210: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70  ;.        interp
7220: 2e 6c 65 76 65 6c 20 2b 3d 20 64 65 6c 74 61 3b  .level += delta;
7230: 0a 09 69 6e 74 65 72 70 2e 63 61 6c 6c 66 72 61  ..interp.callfra
7240: 6d 65 5b 69 6e 74 65 72 70 2e 6c 65 76 65 6c 5d  me[interp.level]
7250: 20 3d 20 6d 79 63 61 6c 6c 66 72 61 6d 65 3b 0a   = mycallframe;.
7260: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
7270: 65 73 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20  es;.      });.  
7280: 20 20 74 68 69 73 2e 72 65 67 69 73 74 65 72 43    this.registerC
7290: 6f 6d 6d 61 6e 64 28 22 77 68 69 6c 65 22 2c 20  ommand("while", 
72a0: 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 70  function (interp
72b0: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20  , args) {.      
72c0: 20 20 74 68 69 73 2e 61 72 69 74 79 28 61 72 67    this.arity(arg
72d0: 73 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 76  s, 3);.        v
72e0: 61 72 20 63 6f 6e 64 20 3d 20 61 72 67 73 5b 31  ar cond = args[1
72f0: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].toString();.  
7300: 20 20 20 20 20 20 76 61 72 20 62 6f 64 79 20 3d        var body =
7310: 20 61 72 67 73 5b 32 5d 2e 74 6f 53 74 72 69 6e   args[2].toStrin
7320: 67 28 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72  g();.        var
7330: 20 72 65 73 20 20 3d 20 22 22 3b 0a 20 20 20 20   res  = "";.    
7340: 20 20 20 20 69 6e 74 65 72 70 2e 69 6e 4c 6f 6f      interp.inLoo
7350: 70 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20  p = true;.      
7360: 20 20 69 6e 74 65 72 70 2e 63 6f 64 65 20 3d 20    interp.code = 
7370: 69 6e 74 65 72 70 2e 4f 4b 3b 0a 20 20 20 20 20  interp.OK;.     
7380: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 20     while (true) 
7390: 7b 0a 09 20 20 74 65 73 74 20 3d 20 69 6e 74 65  {..  test = inte
73a0: 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 69 6e 74  rp.objectify(int
73b0: 65 72 70 2e 65 78 70 72 28 69 6e 74 65 72 70 2c  erp.expr(interp,
73c0: 20 63 6f 6e 64 29 29 3b 0a 09 20 20 69 66 20 28   cond));..  if (
73d0: 21 74 65 73 74 2e 74 6f 42 6f 6f 6c 65 61 6e 28  !test.toBoolean(
73e0: 29 29 20 62 72 65 61 6b 3b 0a 09 20 20 72 65 73  )) break;..  res
73f0: 20 3d 20 69 6e 74 65 72 70 2e 65 76 61 6c 28 62   = interp.eval(b
7400: 6f 64 79 29 3b 0a 09 20 20 69 66 28 69 6e 74 65  ody);..  if(inte
7410: 72 70 2e 63 6f 64 65 20 3d 3d 20 69 6e 74 65 72  rp.code == inter
7420: 70 2e 43 4e 54 29 20 63 6f 6e 74 69 6e 75 65 3b  p.CNT) continue;
7430: 0a 09 20 20 69 66 28 69 6e 74 65 72 70 2e 63 6f  ..  if(interp.co
7440: 64 65 20 21 3d 20 69 6e 74 65 72 70 2e 4f 4b 29  de != interp.OK)
7450: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
7460: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 6e 74     }.        int
7470: 65 72 70 2e 69 6e 4c 6f 6f 70 20 3d 20 66 61 6c  erp.inLoop = fal
7480: 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28 69  se;.        if(i
7490: 6e 74 65 72 70 2e 63 6f 64 65 20 3d 3d 20 69 6e  nterp.code == in
74a0: 74 65 72 70 2e 42 52 4b 20 7c 7c 20 69 6e 74 65  terp.BRK || inte
74b0: 72 70 2e 63 6f 64 65 20 3d 3d 20 69 6e 74 65 72  rp.code == inter
74c0: 70 2e 43 4e 54 29 0a 09 20 20 69 6e 74 65 72 70  p.CNT)..  interp
74d0: 2e 63 6f 64 65 3d 69 6e 74 65 72 70 2e 4f 4b 3b  .code=interp.OK;
74e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
74f0: 69 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69 66 79  interp.objectify
7500: 28 72 65 73 29 3b 0a 20 20 20 20 20 20 7d 29 3b  (res);.      });
7510: 0a 20 20 20 20 2f 2f 20 6e 61 74 69 76 65 20 63  .    // native c
7520: 6d 64 6e 61 6d 65 20 7b 66 75 6e 63 74 69 6f 6e  mdname {function
7530: 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29 20 7b  (interp, args) {
7540: 2e 2e 2e 7d 7d 0a 20 20 20 20 74 68 69 73 2e 72  ...}}.    this.r
7550: 65 67 69 73 74 65 72 43 6f 6d 6d 61 6e 64 28 22  egisterCommand("
7560: 6e 61 74 69 76 65 22 2c 20 66 75 6e 63 74 69 6f  native", functio
7570: 6e 20 28 69 6e 74 65 72 70 2c 20 61 72 67 73 29  n (interp, args)
7580: 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e   {.        this.
7590: 61 72 69 74 79 28 61 72 67 73 2c 20 33 29 3b 0a  arity(args, 3);.
75a0: 20 20 20 20 20 20 20 20 76 61 72 20 63 6d 64 20          var cmd 
75b0: 3d 20 61 72 67 73 5b 31 5d 2e 74 6f 4c 69 73 74  = args[1].toList
75c0: 28 29 3b 0a 09 70 75 74 73 28 22 62 65 66 6f 72  ();..puts("befor
75d0: 65 20 65 76 61 6c 20 22 2b 61 72 67 73 5b 32 5d  e eval "+args[2]
75e0: 29 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 66  );.        var f
75f0: 75 6e 63 20 3d 20 65 76 61 6c 28 61 72 67 73 5b  unc = eval(args[
7600: 32 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a  2].toString());.
7610: 09 70 75 74 73 28 22 6f 6b 20 73 6f 20 66 61 72  .puts("ok so far
7620: 22 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 61 6c  ");.        //al
7630: 65 72 74 28 22 69 6e 3a 20 22 2b 61 72 67 73 5b  ert("in: "+args[
7640: 32 5d 2e 74 6f 53 74 72 69 6e 67 28 29 2b 22 2c  2].toString()+",
7650: 20 66 75 6e 63 3a 20 22 2b 20 66 75 6e 63 29 3b   func: "+ func);
7660: 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64  .        if (cmd
7670: 2e 6c 65 6e 67 74 68 20 3d 3d 20 31 29 20 7b 0a  .length == 1) {.
7680: 09 20 20 69 6e 74 65 72 70 2e 72 65 67 69 73 74  .  interp.regist
7690: 65 72 43 6f 6d 6d 61 6e 64 28 63 6d 64 5b 30 5d  erCommand(cmd[0]
76a0: 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20 66 75 6e  .toString(), fun
76b0: 63 29 3b 0a 09 20 20 72 65 74 75 72 6e 3b 0a 20  c);..  return;. 
76c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
76d0: 20 62 61 73 65 20 3d 20 63 6d 64 5b 30 5d 2e 74   base = cmd[0].t
76e0: 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20  oString();.     
76f0: 20 20 20 63 6d 64 2e 73 68 69 66 74 28 29 3b 0a     cmd.shift();.
7700: 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 72          interp.r
7710: 65 67 69 73 74 65 72 53 75 62 43 6f 6d 6d 61 6e  egisterSubComman
7720: 64 28 62 61 73 65 2c 20 63 6d 64 2e 6a 6f 69 6e  d(base, cmd.join
7730: 28 22 20 22 29 2c 20 65 76 61 6c 28 61 72 67 73  (" "), eval(args
7740: 5b 32 5d 2e 74 6f 53 74 72 69 6e 67 28 29 29 29  [2].toString()))
7750: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
7760: 3b 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20  ;.      });.    
7770: 74 68 69 73 2e 6d 6b 4c 69 73 74 20 3d 20 66 75  this.mkList = fu
7780: 6e 63 74 69 6f 6e 28 78 29 20 7b 0a 20 20 20 20  nction(x) {.    
7790: 20 20 76 61 72 20 6c 69 73 74 20 3d 20 5b 5d 3b    var list = [];
77a0: 0a 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20  .      for (var 
77b0: 6e 61 6d 65 20 69 6e 20 78 29 20 7b 6c 69 73 74  name in x) {list
77c0: 2e 70 75 73 68 28 6e 61 6d 65 29 3b 7d 0a 20 20  .push(name);}.  
77d0: 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 3b      return list;
77e0: 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e  .    }.    this.
77f0: 6f 62 6a 65 63 74 69 66 79 20 3d 20 66 75 6e 63  objectify = func
7800: 74 69 6f 6e 20 28 74 65 78 74 29 20 7b 0a 20 20  tion (text) {.  
7810: 20 20 20 20 69 66 20 28 74 65 78 74 20 3d 3d 20      if (text == 
7820: 6e 75 6c 6c 29 20 74 65 78 74 20 3d 20 22 22 3b  null) text = "";
7830: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
7840: 74 65 78 74 20 69 6e 73 74 61 6e 63 65 6f 66 20  text instanceof 
7850: 54 63 6c 4f 62 6a 65 63 74 29 20 72 65 74 75 72  TclObject) retur
7860: 6e 20 74 65 78 74 3b 0a 20 20 20 20 20 20 72 65  n text;.      re
7870: 74 75 72 6e 20 6e 65 77 20 54 63 6c 4f 62 6a 65  turn new TclObje
7880: 63 74 28 74 65 78 74 29 3b 0a 20 20 20 20 7d 0a  ct(text);.    }.
7890: 20 20 20 20 74 68 69 73 2e 70 61 72 73 65 53 74      this.parseSt
78a0: 72 69 6e 67 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ring = function 
78b0: 28 74 65 78 74 29 20 7b 0a 20 20 20 20 20 20 74  (text) {.      t
78c0: 65 78 74 20 3d 20 74 65 78 74 2e 74 6f 53 74 72  ext = text.toStr
78d0: 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 73 77 69  ing();.      swi
78e0: 74 63 68 20 28 74 65 78 74 2e 63 68 61 72 41 74  tch (text.charAt
78f0: 28 30 29 2b 74 65 78 74 2e 73 75 62 73 74 72 28  (0)+text.substr(
7900: 74 65 78 74 2e 6c 65 6e 67 74 68 2d 31 29 29 20  text.length-1)) 
7910: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 22 7b 7d  {.      case "{}
7920: 22 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 22  ":.      case '"
7930: 22 27 3a 0a 09 74 65 78 74 20 3d 20 74 65 78 74  "':..text = text
7940: 2e 73 75 62 73 74 72 28 31 2c 74 65 78 74 2e 6c  .substr(1,text.l
7950: 65 6e 67 74 68 2d 32 29 3b 0a 20 20 20 20 20 20  ength-2);.      
7960: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
7970: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
7980: 2e 6f 62 6a 65 63 74 69 66 79 28 74 65 78 74 29  .objectify(text)
7990: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73  ;.    }.    this
79a0: 2e 70 61 72 73 65 4c 69 73 74 20 3d 20 66 75 6e  .parseList = fun
79b0: 63 74 69 6f 6e 20 28 74 65 78 74 29 20 7b 0a 20  ction (text) {. 
79c0: 20 20 20 20 20 74 65 78 74 20 3d 20 74 65 78 74       text = text
79d0: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20  .toString();.   
79e0: 20 20 20 73 77 69 74 63 68 20 28 74 65 78 74 2e     switch (text.
79f0: 63 68 61 72 41 74 28 30 29 2b 74 65 78 74 2e 73  charAt(0)+text.s
7a00: 75 62 73 74 72 28 74 65 78 74 2e 6c 65 6e 67 74  ubstr(text.lengt
7a10: 68 2d 31 29 29 20 7b 0a 20 20 20 20 20 20 63 61  h-1)) {.      ca
7a20: 73 65 20 22 7b 7d 22 3a 0a 20 20 20 20 20 20 63  se "{}":.      c
7a30: 61 73 65 20 27 22 22 27 3a 0a 09 74 65 78 74 20  ase '""':..text 
7a40: 3d 20 5b 74 65 78 74 5d 3b 0a 20 20 20 20 20 20  = [text];.      
7a50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
7a60: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
7a70: 2e 6f 62 6a 65 63 74 69 66 79 28 74 65 78 74 29  .objectify(text)
7a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73  ;.    }.    this
7a90: 2e 63 61 6c 6c 20 3d 20 66 75 6e 63 74 69 6f 6e  .call = function
7aa0: 28 61 72 67 73 29 20 7b 0a 20 20 20 20 20 20 69  (args) {.      i
7ab0: 66 28 5f 73 74 65 70 29 20 70 75 74 73 28 22 74  f(_step) puts("t
7ac0: 68 69 73 2e 63 61 6c 6c 20 22 2b 61 72 67 73 29  his.call "+args)
7ad0: 3b 0a 20 20 20 20 20 20 76 61 72 20 66 75 6e 63  ;.      var func
7ae0: 20 3d 20 74 68 69 73 2e 67 65 74 43 6f 6d 6d 61   = this.getComma
7af0: 6e 64 28 61 72 67 73 5b 30 5d 29 3b 0a 20 20 20  nd(args[0]);.   
7b00: 20 20 20 69 66 28 66 75 6e 63 20 3d 3d 20 6e 75     if(func == nu
7b10: 6c 6c 29 20 74 68 72 6f 77 20 27 69 6e 76 61 6c  ll) throw 'inval
7b20: 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20  id command name 
7b30: 22 27 2b 61 72 67 73 5b 30 5d 2b 27 22 27 3b 0a  "'+args[0]+'"';.
7b40: 20 20 20 20 20 20 76 61 72 20 72 65 73 20 20 3d        var res  =
7b50: 20 66 75 6e 63 2e 63 61 6c 6c 28 74 68 69 73 2c   func.call(this,
7b60: 61 72 67 73 29 3b 0a 20 20 20 20 20 20 73 77 69  args);.      swi
7b70: 74 63 68 20 28 74 68 69 73 2e 63 6f 64 65 29 20  tch (this.code) 
7b80: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 74 68 69  {.      case thi
7b90: 73 2e 4f 4b 3a 20 63 61 73 65 20 74 68 69 73 2e  s.OK: case this.
7ba0: 52 45 54 3a 20 72 65 74 75 72 6e 20 72 65 73 3b  RET: return res;
7bb0: 0a 20 20 20 20 20 20 63 61 73 65 20 74 68 69 73  .      case this
7bc0: 2e 42 52 4b 3a 0a 09 69 66 20 28 21 74 68 69 73  .BRK:..if (!this
7bd0: 2e 69 6e 4c 6f 6f 70 29 20 74 68 72 6f 77 20 27  .inLoop) throw '
7be0: 69 6e 76 6f 6b 65 64 20 22 62 72 65 61 6b 22 20  invoked "break" 
7bf0: 6f 75 74 73 69 64 65 20 6f 66 20 61 20 6c 6f 6f  outside of a loo
7c00: 70 27 3b 0a 09 62 72 65 61 6b 3b 0a 20 20 20 20  p';..break;.    
7c10: 20 20 63 61 73 65 20 74 68 69 73 2e 43 4e 54 3a    case this.CNT:
7c20: 0a 09 69 66 20 28 21 74 68 69 73 2e 69 6e 4c 6f  ..if (!this.inLo
7c30: 6f 70 29 20 74 68 72 6f 77 20 27 69 6e 76 6f 6b  op) throw 'invok
7c40: 65 64 20 22 63 6f 6e 74 69 6e 75 65 22 20 6f 75  ed "continue" ou
7c50: 74 73 69 64 65 20 6f 66 20 61 20 6c 6f 6f 70 27  tside of a loop'
7c60: 3b 0a 09 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;..break;.      
7c70: 64 65 66 61 75 6c 74 3a 20 74 68 72 6f 77 20 22  default: throw "
7c80: 55 6e 6b 6e 6f 77 6e 20 72 65 74 75 72 6e 20 63  Unknown return c
7c90: 6f 64 65 20 22 20 2b 20 74 68 69 73 2e 63 6f 64  ode " + this.cod
7ca0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
7cb0: 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 20 20 20   return res;.   
7cc0: 20 7d 0a 7d 0a 0a 76 61 72 20 54 63 6c 20 3d 20   }.}..var Tcl = 
7cd0: 7b 7d 3b 0a 54 63 6c 2e 69 73 52 65 61 6c 20 20  {};.Tcl.isReal  
7ce0: 20 20 20 3d 20 6e 65 77 20 52 65 67 45 78 70 28     = new RegExp(
7cf0: 22 5e 5b 2b 5c 5c 2d 5d 3f 5b 30 2d 39 5d 2b 5c  "^[+\\-]?[0-9]+\
7d00: 5c 2e 5b 30 2d 39 5d 2a 28 5b 65 45 5d 5b 2b 5c  \.[0-9]*([eE][+\
7d10: 5c 2d 5d 3f 5b 30 2d 39 5d 2b 29 3f 24 22 29 3b  \-]?[0-9]+)?$");
7d20: 0a 54 63 6c 2e 69 73 44 65 63 69 6d 61 6c 20 20  .Tcl.isDecimal  
7d30: 3d 20 6e 65 77 20 52 65 67 45 78 70 28 22 5e 5b  = new RegExp("^[
7d40: 2b 5c 5c 2d 5d 3f 5b 31 2d 39 5d 5b 30 2d 39 5d  +\\-]?[1-9][0-9]
7d50: 2a 24 22 29 3b 0a 54 63 6c 2e 69 73 48 65 78 20  *$");.Tcl.isHex 
7d60: 20 20 20 20 20 3d 20 6e 65 77 20 52 65 67 45 78       = new RegEx
7d70: 70 28 22 5e 30 78 5b 30 2d 39 61 2d 66 41 2d 46  p("^0x[0-9a-fA-F
7d80: 5d 2b 24 22 29 3b 0a 54 63 6c 2e 69 73 4f 63 74  ]+$");.Tcl.isOct
7d90: 61 6c 20 20 20 20 3d 20 6e 65 77 20 52 65 67 45  al    = new RegE
7da0: 78 70 28 22 5e 5b 2b 5c 5c 2d 5d 3f 30 5b 30 2d  xp("^[+\\-]?0[0-
7db0: 37 5d 2a 24 22 29 3b 0a 54 63 6c 2e 69 73 48 65  7]*$");.Tcl.isHe
7dc0: 78 53 65 71 20 20 20 3d 20 6e 65 77 20 52 65 67  xSeq   = new Reg
7dd0: 45 78 70 28 22 5b 30 2d 39 61 2d 66 41 2d 46 5d  Exp("[0-9a-fA-F]
7de0: 2a 22 29 3b 0a 54 63 6c 2e 69 73 4f 63 74 61 6c  *");.Tcl.isOctal
7df0: 53 65 71 20 3d 20 6e 65 77 20 52 65 67 45 78 70  Seq = new RegExp
7e00: 28 22 5b 30 2d 37 5d 2a 22 29 3b 0a 54 63 6c 2e  ("[0-7]*");.Tcl.
7e10: 69 73 4c 69 73 74 20 20 20 20 20 3d 20 6e 65 77  isList     = new
7e20: 20 52 65 67 45 78 70 28 22 5b 5c 5c 7b 5c 5c 7d   RegExp("[\\{\\}
7e30: 20 5d 22 29 3b 0a 54 63 6c 2e 69 73 4e 65 73 74   ]");.Tcl.isNest
7e40: 65 64 20 20 20 3d 20 6e 65 77 20 52 65 67 45 78  ed   = new RegEx
7e50: 70 28 22 5e 5c 5c 7b 2e 2a 5c 5c 7d 24 22 29 3b  p("^\\{.*\\}$");
7e60: 0a 54 63 6c 2e 67 65 74 56 61 72 20 20 20 20 20  .Tcl.getVar     
7e70: 3d 20 6e 65 77 20 52 65 67 45 78 70 28 22 5e 5b  = new RegExp("^[
7e80: 3a 61 2d 7a 41 2d 5a 30 2d 39 5f 5d 2b 22 2c 20  :a-zA-Z0-9_]+", 
7e90: 22 67 22 29 3b 0a 0a 54 63 6c 2e 50 72 6f 63 20  "g");..Tcl.Proc 
7ea0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  = function (inte
7eb0: 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 76  rp, args) {.   v
7ec0: 61 72 20 70 72 69 76 20 3d 20 74 68 69 73 2e 70  ar priv = this.p
7ed0: 72 69 76 64 61 74 61 3b 0a 20 20 20 69 6e 74 65  rivdata;.   inte
7ee0: 72 70 2e 69 6e 63 72 4c 65 76 65 6c 28 29 3b 0a  rp.incrLevel();.
7ef0: 20 20 20 76 61 72 20 61 72 67 6c 69 73 74 20 3d     var arglist =
7f00: 20 70 72 69 76 5b 30 5d 2e 74 6f 4c 69 73 74 28   priv[0].toList(
7f10: 29 3b 0a 20 20 20 76 61 72 20 62 6f 64 79 20 20  );.   var body  
7f20: 20 20 3d 20 70 72 69 76 5b 31 5d 3b 0a 20 20 20    = priv[1];.   
7f30: 76 61 72 20 63 61 6c 6c 20 20 20 20 3d 20 5b 5d  var call    = []
7f40: 3b 20 0a 20 20 20 66 6f 72 28 76 61 72 20 69 20  ; .   for(var i 
7f50: 69 6e 20 61 72 67 73 29 20 7b 0a 20 20 20 20 20  in args) {.     
7f60: 76 61 72 20 65 6c 74 20 3d 20 61 72 67 73 5b 69  var elt = args[i
7f70: 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].toString();.  
7f80: 20 20 20 69 66 28 65 6c 74 2e 6d 61 74 63 68 28     if(elt.match(
7f90: 2f 20 2f 29 29 20 65 6c 74 20 3d 20 22 7b 22 2b  / /)) elt = "{"+
7fa0: 65 6c 74 2b 22 7d 22 3b 0a 20 20 20 20 20 63 61  elt+"}";.     ca
7fb0: 6c 6c 2e 70 75 73 68 28 65 6c 74 29 3b 0a 20 20  ll.push(elt);.  
7fc0: 20 7d 0a 20 20 20 69 6e 74 65 72 70 2e 6c 65 76   }.   interp.lev
7fd0: 65 6c 63 61 6c 6c 5b 69 6e 74 65 72 70 2e 6c 65  elcall[interp.le
7fe0: 76 65 6c 5d 20 3d 20 63 61 6c 6c 2e 6a 6f 69 6e  vel] = call.join
7ff0: 28 22 20 22 29 3b 0a 20 20 20 61 72 67 73 2e 73  (" ");.   args.s
8000: 68 69 66 74 28 29 3b 0a 20 20 20 66 6f 72 20 28  hift();.   for (
8010: 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 61  var i = 0; i < a
8020: 72 67 6c 69 73 74 2e 6c 65 6e 67 74 68 3b 20 69  rglist.length; i
8030: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 76 61 72  ++) {.       var
8040: 20 6e 61 6d 65 20 3d 20 61 72 67 6c 69 73 74 5b   name = arglist[
8050: 69 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20  i].toString();. 
8060: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 61        if (i >= a
8070: 72 67 73 2e 6c 65 6e 67 74 68 29 20 7b 0a 20 20  rgs.length) {.  
8080: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d           if (nam
8090: 65 20 3d 3d 20 22 61 72 67 73 22 29 20 7b 0a 20  e == "args") {. 
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
80b0: 74 65 72 70 2e 73 65 74 56 61 72 28 22 61 72 67  terp.setVar("arg
80c0: 73 22 2c 20 54 63 6c 2e 65 6d 70 74 79 29 3b 0a  s", Tcl.empty);.
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
80e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
80f0: 20 7d 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 20   }.       }.    
8100: 20 20 20 69 66 20 28 54 63 6c 2e 69 73 4c 69 73     if (Tcl.isLis
8110: 74 2e 74 65 73 74 28 6e 61 6d 65 29 29 20 7b 0a  t.test(name)) {.
8120: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
8130: 3d 20 69 6e 74 65 72 70 2e 70 61 72 73 65 53 74  = interp.parseSt
8140: 72 69 6e 67 28 6e 61 6d 65 29 2e 74 6f 4c 69 73  ring(name).toLis
8150: 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t();.           
8160: 69 66 20 28 6e 61 6d 65 5b 30 5d 20 3d 3d 20 22  if (name[0] == "
8170: 61 72 67 73 22 29 20 74 68 72 6f 77 20 22 27 61  args") throw "'a
8180: 72 67 73 27 20 64 65 66 61 75 6c 74 73 20 74 6f  rgs' defaults to
8190: 20 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e   the empty strin
81a0: 67 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 69  g";.           i
81b0: 66 20 28 69 20 3e 3d 20 61 72 67 73 2e 6c 65 6e  f (i >= args.len
81c0: 67 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20  gth).           
81d0: 20 20 20 20 69 6e 74 65 72 70 2e 73 65 74 56 61      interp.setVa
81e0: 72 28 6e 61 6d 65 2e 73 68 69 66 74 28 29 2c 20  r(name.shift(), 
81f0: 69 6e 74 65 72 70 2e 70 61 72 73 65 53 74 72 69  interp.parseStri
8200: 6e 67 28 6e 61 6d 65 2e 6a 6f 69 6e 28 22 20 22  ng(name.join(" "
8210: 29 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  )));.           
8220: 65 6c 73 65 20 69 6e 74 65 72 70 2e 73 65 74 56  else interp.setV
8230: 61 72 28 6e 61 6d 65 5b 30 5d 2c 20 69 6e 74 65  ar(name[0], inte
8240: 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 61 72 67  rp.objectify(arg
8250: 73 5b 69 5d 29 29 3b 0a 20 20 20 20 20 20 20 7d  s[i]));.       }
8260: 20 65 6c 73 65 20 69 66 20 28 6e 61 6d 65 20 3d   else if (name =
8270: 3d 20 22 61 72 67 73 22 29 20 7b 0a 20 20 20 20  = "args") {.    
8280: 20 20 20 20 20 20 20 69 6e 74 65 72 70 2e 73 65         interp.se
8290: 74 56 61 72 28 22 61 72 67 73 22 2c 20 6e 65 77  tVar("args", new
82a0: 20 54 63 6c 4f 62 6a 65 63 74 28 61 72 67 73 2e   TclObject(args.
82b0: 73 6c 69 63 65 28 69 2c 20 61 72 67 73 2e 6c 65  slice(i, args.le
82c0: 6e 67 74 68 29 29 29 3b 0a 20 20 20 20 20 20 20  ngth)));.       
82d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
82e0: 20 20 7d 0a 20 20 20 20 20 20 20 69 6e 74 65 72    }.       inter
82f0: 70 2e 73 65 74 56 61 72 28 6e 61 6d 65 2c 20 69  p.setVar(name, i
8300: 6e 74 65 72 70 2e 6f 62 6a 65 63 74 69 66 79 28  nterp.objectify(
8310: 61 72 67 73 5b 69 5d 29 29 3b 0a 20 20 20 7d 0a  args[i]));.   }.
8320: 20 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 22     if (name == "
8330: 61 72 67 73 22 20 26 26 20 69 2b 31 20 3c 20 61  args" && i+1 < a
8340: 72 67 6c 69 73 74 2e 6c 65 6e 67 74 68 29 0a 20  rglist.length). 
8350: 20 20 20 20 74 68 72 6f 77 20 22 27 61 72 67 73      throw "'args
8360: 27 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20  ' should be the 
8370: 6c 61 73 74 20 61 72 67 75 6d 65 6e 74 22 3b 0a  last argument";.
8380: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
8390: 76 61 72 20 72 65 73 20 3d 20 69 6e 74 65 72 70  var res = interp
83a0: 2e 65 76 61 6c 28 62 6f 64 79 29 3b 0a 20 20 20  .eval(body);.   
83b0: 20 20 20 20 69 6e 74 65 72 70 2e 63 6f 64 65 20      interp.code 
83c0: 3d 20 69 6e 74 65 72 70 2e 4f 4b 3b 0a 20 20 20  = interp.OK;.   
83d0: 20 20 20 20 69 6e 74 65 72 70 2e 64 65 63 72 4c      interp.decrL
83e0: 65 76 65 6c 28 29 3b 0a 20 20 20 20 20 20 20 72  evel();.       r
83f0: 65 74 75 72 6e 20 72 65 73 3b 0a 20 20 20 7d 20  eturn res;.   } 
8400: 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20  catch (e) {.    
8410: 20 20 20 69 6e 74 65 72 70 2e 64 65 63 72 4c 65     interp.decrLe
8420: 76 65 6c 28 29 3b 0a 20 20 20 20 20 20 20 74 68  vel();.       th
8430: 72 6f 77 20 22 54 63 6c 2e 50 72 6f 63 20 65 78  row "Tcl.Proc ex
8440: 63 65 70 74 69 6f 6e 20 22 2b 65 3b 0a 20 20 20  ception "+e;.   
8450: 7d 0a 7d 0a 2f 2a 2a 20 4d 61 6e 61 67 65 20 73  }.}./** Manage s
8460: 75 62 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 54 63  ubcommands */.Tc
8470: 6c 2e 45 6e 73 65 6d 62 6c 65 43 6f 6d 6d 61 6e  l.EnsembleComman
8480: 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e  d = function (in
8490: 74 65 72 70 2c 20 61 72 67 73 29 20 7b 0a 20 20  terp, args) {.  
84a0: 76 61 72 20 73 75 62 20 20 3d 20 61 72 67 73 5b  var sub  = args[
84b0: 31 5d 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20  1].toString();. 
84c0: 20 76 61 72 20 6d 61 69 6e 20 3d 20 61 72 67 73   var main = args
84d0: 2e 73 68 69 66 74 28 29 2e 74 6f 53 74 72 69 6e  .shift().toStrin
84e0: 67 28 29 2b 22 20 22 2b 73 75 62 3b 0a 20 20 61  g()+" "+sub;.  a
84f0: 72 67 73 5b 30 5d 20 20 3d 20 6d 61 69 6e 3b 0a  rgs[0]  = main;.
8500: 20 20 76 61 72 20 65 6e 73 20 20 3d 20 74 68 69    var ens  = thi
8510: 73 2e 65 6e 73 65 6d 62 6c 65 3b 0a 20 20 69 66  s.ensemble;.  if
8520: 20 28 65 6e 73 20 3d 3d 20 6e 75 6c 6c 29 20 7b   (ens == null) {
8530: 0a 20 20 20 20 74 68 72 6f 77 20 22 4e 6f 74 20  .    throw "Not 
8540: 61 6e 20 65 6e 73 65 6d 62 6c 65 20 63 6f 6d 6d  an ensemble comm
8550: 61 6e 64 3a 20 22 2b 6d 61 69 6e 3b 0a 20 20 7d  and: "+main;.  }
8560: 20 65 6c 73 65 20 69 66 20 28 65 6e 73 5b 73 75   else if (ens[su
8570: 62 5d 20 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20  b] == null) {.  
8580: 20 20 76 61 72 20 6d 61 74 63 68 65 73 20 3d 20    var matches = 
8590: 30 2c 20 6c 61 73 74 6d 61 74 63 68 20 3d 20 22  0, lastmatch = "
85a0: 22 3b 0a 20 20 20 20 66 6f 72 20 28 76 61 72 20  ";.    for (var 
85b0: 69 20 69 6e 20 65 6e 73 29 20 7b 20 2f 2f 20 6d  i in ens) { // m
85c0: 61 79 62 65 20 75 6e 61 6d 62 69 67 75 6f 75 73  aybe unambiguous
85d0: 20 70 72 65 66 69 78 3f 0a 20 20 20 20 20 20 69   prefix?.      i
85e0: 66 20 28 69 2e 6d 61 74 63 68 28 22 5e 22 2b 73  f (i.match("^"+s
85f0: 75 62 29 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ub) != null) {..
8600: 6d 61 74 63 68 65 73 20 20 2b 3d 20 31 3b 0a 09  matches  += 1;..
8610: 6c 61 73 74 6d 61 74 63 68 20 3d 20 69 3b 0a 20  lastmatch = i;. 
8620: 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
8630: 20 20 69 66 28 6d 61 74 63 68 65 73 20 3d 3d 20    if(matches == 
8640: 31 29 20 7b 0a 20 20 20 20 20 20 73 75 62 20 3d  1) {.      sub =
8650: 20 6c 61 73 74 6d 61 74 63 68 3b 0a 20 20 20 20   lastmatch;.    
8660: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 76  } else {.      v
8670: 61 72 20 72 20 3d 20 5b 5d 3b 0a 20 20 20 20 20  ar r = [];.     
8680: 20 66 6f 72 20 28 69 20 69 6e 20 65 6e 73 29 20   for (i in ens) 
8690: 72 2e 70 75 73 68 28 69 29 3b 0a 20 20 20 20 20  r.push(i);.     
86a0: 20 72 5b 72 2e 6c 65 6e 67 74 68 2d 31 5d 20 3d   r[r.length-1] =
86b0: 20 22 6f 72 20 22 2b 72 5b 72 2e 6c 65 6e 67 74   "or "+r[r.lengt
86c0: 68 2d 31 5d 3b 0a 20 20 20 20 20 20 74 68 72 6f  h-1];.      thro
86d0: 77 20 27 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d  w 'unknown or am
86e0: 62 69 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d 61  biguous subcomma
86f0: 6e 64 20 22 27 2b 73 75 62 2b 27 22 3a 20 6d 75  nd "'+sub+'": mu
8700: 73 74 20 62 65 20 27 2b 72 2e 6a 6f 69 6e 28 22  st be '+r.join("
8710: 2c 20 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , ");.    }.  }.
8720: 20 20 72 65 74 75 72 6e 20 65 6e 73 5b 73 75 62    return ens[sub
8730: 5d 2e 63 61 6c 6c 28 69 6e 74 65 72 70 2c 20 61  ].call(interp, a
8740: 72 67 73 29 3b 0a 7d 0a 66 75 6e 63 74 69 6f 6e  rgs);.}.function
8750: 20 54 63 6c 4f 62 6a 65 63 74 28 74 65 78 74 29   TclObject(text)
8760: 20 7b 0a 20 20 20 20 74 68 69 73 2e 54 45 58 54   {.    this.TEXT
8770: 20 20 20 20 3d 20 30 3b 0a 20 20 20 20 74 68 69      = 0;.    thi
8780: 73 2e 4c 49 53 54 20 20 20 20 3d 20 31 3b 0a 20  s.LIST    = 1;. 
8790: 20 20 20 74 68 69 73 2e 49 4e 54 45 47 45 52 20     this.INTEGER 
87a0: 3d 20 32 3b 0a 20 20 20 20 74 68 69 73 2e 52 45  = 2;.    this.RE
87b0: 41 4c 20 20 20 20 3d 20 33 3b 0a 20 20 20 20 74  AL    = 3;.    t
87c0: 68 69 73 2e 42 4f 4f 4c 20 20 20 20 3d 20 34 3b  his.BOOL    = 4;
87d0: 0a 20 20 20 20 73 77 69 74 63 68 20 28 61 72 67  .    switch (arg
87e0: 75 6d 65 6e 74 73 5b 30 5d 29 20 7b 0a 20 20 20  uments[0]) {.   
87f0: 20 63 61 73 65 20 22 4c 49 53 54 22 3a 0a 20 20   case "LIST":.  
8800: 20 20 63 61 73 65 20 22 49 4e 54 45 47 45 52 22    case "INTEGER"
8810: 3a 0a 20 20 20 20 63 61 73 65 20 22 52 45 41 4c  :.    case "REAL
8820: 22 3a 0a 20 20 20 20 63 61 73 65 20 22 42 4f 4f  ":.    case "BOO
8830: 4c 22 3a 0a 20 20 20 20 20 20 20 20 74 68 69 73  L":.        this
8840: 2e 74 79 70 65 20 3d 20 74 68 69 73 5b 61 72 67  .type = this[arg
8850: 75 6d 65 6e 74 73 5b 30 5d 5d 3b 0a 20 20 20 20  uments[0]];.    
8860: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
8870: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
8880: 74 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73  this.type = this
8890: 2e 54 45 58 54 3b 0a 20 20 20 20 20 20 20 20 69  .TEXT;.        i
88a0: 66 20 28 74 65 78 74 20 69 6e 73 74 61 6e 63 65  f (text instance
88b0: 6f 66 20 41 72 72 61 79 29 20 74 68 69 73 2e 74  of Array) this.t
88c0: 79 70 65 20 3d 20 74 68 69 73 2e 4c 49 53 54 3b  ype = this.LIST;
88d0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 74 65  .        else te
88e0: 78 74 20 3d 20 74 65 78 74 2e 74 6f 53 74 72 69  xt = text.toStri
88f0: 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72  ng();.        br
8900: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74  eak;.    }.    t
8910: 68 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 74 65  his.content = te
8920: 78 74 3b 0a 20 20 20 20 74 68 69 73 2e 73 74 72  xt;.    this.str
8930: 69 6e 67 49 6e 64 65 78 20 3d 20 66 75 6e 63 74  ingIndex = funct
8940: 69 6f 6e 20 28 69 29 20 7b 0a 20 20 20 20 20 20  ion (i) {.      
8950: 20 20 74 68 69 73 2e 74 6f 53 74 72 69 6e 67 28    this.toString(
8960: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
8970: 6e 20 74 68 69 73 2e 69 6e 64 65 78 28 69 2c 20  n this.index(i, 
8980: 74 68 69 73 2e 63 6f 6e 74 65 6e 74 2e 6c 65 6e  this.content.len
8990: 67 74 68 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  gth);.    }.    
89a0: 74 68 69 73 2e 6c 69 73 74 49 6e 64 65 78 20 3d  this.listIndex =
89b0: 20 66 75 6e 63 74 69 6f 6e 20 28 69 29 20 7b 0a   function (i) {.
89c0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 6f 4c          this.toL
89d0: 69 73 74 28 29 3b 0a 20 20 20 20 20 20 20 20 72  ist();.        r
89e0: 65 74 75 72 6e 20 74 68 69 73 2e 69 6e 64 65 78  eturn this.index
89f0: 28 69 2c 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74  (i, this.content
8a00: 2e 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a  .length);.    }.
8a10: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 20 3d      this.index =
8a20: 20 66 75 6e 63 74 69 6f 6e 20 28 69 2c 20 6c 65   function (i, le
8a30: 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72  n) {.        var
8a40: 20 69 6e 64 65 78 20 3d 20 69 2e 74 6f 53 74 72   index = i.toStr
8a50: 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 69  ing();.        i
8a60: 66 20 28 69 6e 64 65 78 2e 73 75 62 73 74 72 69  f (index.substri
8a70: 6e 67 28 30 2c 34 29 20 3d 3d 20 22 65 6e 64 2d  ng(0,4) == "end-
8a80: 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ").            i
8a90: 6e 64 65 78 20 3d 20 6c 65 6e 20 2d 20 70 61 72  ndex = len - par
8aa0: 73 65 49 6e 74 28 69 6e 64 65 78 2e 73 75 62 73  seInt(index.subs
8ab0: 74 72 69 6e 67 28 34 29 29 20 2d 20 31 3b 0a 20  tring(4)) - 1;. 
8ac0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
8ad0: 69 6e 64 65 78 20 3d 3d 20 22 65 6e 64 22 29 20  index == "end") 
8ae0: 69 6e 64 65 78 20 3d 20 6c 65 6e 2d 31 3b 0a 20  index = len-1;. 
8af0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 6e 64 65         else inde
8b00: 78 20 3d 20 70 61 72 73 65 49 6e 74 28 69 6e 64  x = parseInt(ind
8b10: 65 78 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ex);.        if 
8b20: 28 69 73 4e 61 4e 28 69 6e 64 65 78 29 29 20 74  (isNaN(index)) t
8b30: 68 72 6f 77 20 22 42 61 64 20 69 6e 64 65 78 20  hrow "Bad index 
8b40: 22 2b 69 3b 0a 20 20 20 20 20 20 20 20 69 66 20  "+i;.        if 
8b50: 28 69 6e 64 65 78 20 3c 20 30 20 7c 7c 20 69 6e  (index < 0 || in
8b60: 64 65 78 20 3e 3d 20 6c 65 6e 29 20 74 68 72 6f  dex >= len) thro
8b70: 77 20 22 49 6e 64 65 78 20 6f 75 74 20 6f 66 20  w "Index out of 
8b80: 62 6f 75 6e 64 73 22 3b 0a 20 20 20 20 20 20 20  bounds";.       
8b90: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0a 20   return index;. 
8ba0: 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e 69 73     }.    this.is
8bb0: 49 6e 74 65 67 65 72 20 3d 20 66 75 6e 63 74 69  Integer = functi
8bc0: 6f 6e 20 28 29 20 7b 72 65 74 75 72 6e 20 28 74  on () {return (t
8bd0: 68 69 73 2e 74 79 70 65 20 3d 3d 20 74 68 69 73  his.type == this
8be0: 2e 49 4e 54 45 47 45 52 29 3b 7d 0a 20 20 20 20  .INTEGER);}.    
8bf0: 74 68 69 73 2e 69 73 52 65 61 6c 20 20 20 20 3d  this.isReal    =
8c00: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 72 65   function () {re
8c10: 74 75 72 6e 20 28 74 68 69 73 2e 74 79 70 65 20  turn (this.type 
8c20: 3d 3d 20 74 68 69 73 2e 52 45 41 4c 29 3b 7d 0a  == this.REAL);}.
8c30: 20 20 20 20 74 68 69 73 2e 67 65 74 53 74 72 69      this.getStri
8c40: 6e 67 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6c  ng = function (l
8c50: 69 73 74 2c 20 6e 65 73 74 65 64 29 20 7b 0a 20  ist, nested) {. 
8c60: 20 20 20 20 20 20 20 76 61 72 20 72 65 73 20 3d         var res =
8c70: 20 5b 5d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   [];.        for
8c80: 20 28 76 61 72 20 69 20 69 6e 20 6c 69 73 74 29   (var i in list)
8c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   {.            r
8ca0: 65 73 5b 69 5d 20 3d 20 6c 69 73 74 5b 69 5d 2e  es[i] = list[i].
8cb0: 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  toString();.    
8cc0: 20 20 20 20 20 20 20 20 69 66 20 28 54 63 6c 2e          if (Tcl.
8cd0: 69 73 4c 69 73 74 2e 74 65 73 74 28 72 65 73 5b  isList.test(res[
8ce0: 69 5d 29 20 26 26 20 21 54 63 6c 2e 69 73 4e 65  i]) && !Tcl.isNe
8cf0: 73 74 65 64 2e 74 65 73 74 28 72 65 73 5b 69 5d  sted.test(res[i]
8d00: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
8d10: 20 20 20 72 65 73 5b 69 5d 20 3d 20 22 7b 22 20     res[i] = "{" 
8d20: 2b 20 72 65 73 5b 69 5d 20 2b 20 22 7d 22 3b 0a  + res[i] + "}";.
8d30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8d40: 20 20 69 66 20 28 72 65 73 2e 6c 65 6e 67 74 68    if (res.length
8d50: 20 3d 3d 20 31 29 20 72 65 74 75 72 6e 20 72 65   == 1) return re
8d60: 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 72 65  s[0];.        re
8d70: 74 75 72 6e 20 72 65 73 2e 6a 6f 69 6e 28 22 20  turn res.join(" 
8d80: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68  ");.    }.    th
8d90: 69 73 2e 74 6f 53 74 72 69 6e 67 20 3d 20 66 75  is.toString = fu
8da0: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
8db0: 20 20 69 66 20 28 74 68 69 73 2e 74 79 70 65 20    if (this.type 
8dc0: 21 3d 20 74 68 69 73 2e 54 45 58 54 29 20 7b 0a  != this.TEXT) {.
8dd0: 09 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 3d  .if (this.type =
8de0: 3d 20 74 68 69 73 2e 4c 49 53 54 29 0a 09 20 20  = this.LIST)..  
8df0: 74 68 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 74  this.content = t
8e00: 68 69 73 2e 67 65 74 53 74 72 69 6e 67 28 74 68  his.getString(th
8e10: 69 73 2e 63 6f 6e 74 65 6e 74 29 3b 0a 09 65 6c  is.content);..el
8e20: 73 65 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 20  se this.content 
8e30: 3d 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 2e 74  = this.content.t
8e40: 6f 53 74 72 69 6e 67 28 29 3b 0a 09 74 68 69 73  oString();..this
8e50: 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 54 45 58  .type = this.TEX
8e60: 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  T;.      }.     
8e70: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 63 6f 6e   return this.con
8e80: 74 65 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  tent;.    }.    
8e90: 74 68 69 73 2e 74 6f 4c 69 73 74 20 3d 20 66 75  this.toList = fu
8ea0: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
8eb0: 20 20 69 66 20 28 74 68 69 73 2e 74 79 70 65 20    if (this.type 
8ec0: 21 3d 20 74 68 69 73 2e 4c 49 53 54 29 20 7b 0a  != this.LIST) {.
8ed0: 09 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 21  .if (this.type !
8ee0: 3d 20 74 68 69 73 2e 54 45 58 54 29 0a 09 20 20  = this.TEXT)..  
8ef0: 74 68 69 73 2e 63 6f 6e 74 65 6e 74 5b 30 5d 20  this.content[0] 
8f00: 3d 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 3b 0a  = this.content;.
8f10: 09 65 6c 73 65 20 7b 0a 09 20 20 76 61 72 20 74  .else {..  var t
8f20: 65 78 74 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65  ext = this.conte
8f30: 6e 74 3b 0a 09 20 20 69 66 20 28 74 65 78 74 2e  nt;..  if (text.
8f40: 63 68 61 72 41 74 28 30 29 20 3d 3d 20 22 7b 22  charAt(0) == "{"
8f50: 20 26 26 20 74 65 78 74 2e 63 68 61 72 41 74 28   && text.charAt(
8f60: 74 65 78 74 2e 6c 65 6e 67 74 68 2d 31 29 20 3d  text.length-1) =
8f70: 3d 20 22 7d 22 29 0a 09 20 20 20 20 74 65 78 74  = "}")..    text
8f80: 20 3d 20 74 65 78 74 2e 73 75 62 73 74 72 69 6e   = text.substrin
8f90: 67 28 31 2c 20 74 65 78 74 2e 6c 65 6e 67 74 68  g(1, text.length
8fa0: 2d 31 29 3b 0a 09 20 20 69 66 20 28 74 65 78 74  -1);..  if (text
8fb0: 20 3d 3d 20 22 22 29 0a 09 20 20 20 20 72 65 74   == "")..    ret
8fc0: 75 72 6e 20 5b 5d 3b 0a 09 20 20 0a 09 20 20 76  urn [];..  ..  v
8fd0: 61 72 20 70 61 72 73 65 72 20 3d 20 6e 65 77 20  ar parser = new 
8fe0: 54 63 6c 50 61 72 73 65 72 28 74 65 78 74 2e 74  TclParser(text.t
8ff0: 6f 53 74 72 69 6e 67 28 29 29 3b 0a 09 20 20 74  oString());..  t
9000: 68 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 5b 5d  his.content = []
9010: 3b 0a 09 20 20 66 6f 72 28 3b 3b 29 20 7b 0a 09  ;..  for(;;) {..
9020: 20 20 20 20 70 61 72 73 65 72 2e 70 61 72 73 65      parser.parse
9030: 4c 69 73 74 28 29 3b 0a 09 20 20 20 20 74 68 69  List();..    thi
9040: 73 2e 63 6f 6e 74 65 6e 74 2e 70 75 73 68 28 6e  s.content.push(n
9050: 65 77 20 54 63 6c 4f 62 6a 65 63 74 28 70 61 72  ew TclObject(par
9060: 73 65 72 2e 67 65 74 54 65 78 74 28 29 29 29 3b  ser.getText()));
9070: 0a 09 20 20 20 20 69 66 20 28 70 61 72 73 65 72  ..    if (parser
9080: 2e 74 79 70 65 20 3d 3d 20 70 61 72 73 65 72 2e  .type == parser.
9090: 45 4f 4c 20 7c 7c 20 70 61 72 73 65 72 2e 74 79  EOL || parser.ty
90a0: 70 65 20 3d 3d 20 70 61 72 73 65 72 2e 45 53 43  pe == parser.ESC
90b0: 29 0a 09 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  )..      break;.
90c0: 09 20 20 7d 0a 09 7d 09 0a 09 74 68 69 73 2e 74  .  }..}...this.t
90d0: 79 70 65 20 3d 20 74 68 69 73 2e 4c 49 53 54 3b  ype = this.LIST;
90e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
90f0: 65 74 75 72 6e 20 74 68 69 73 2e 63 6f 6e 74 65  eturn this.conte
9100: 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68  nt;.    }.    th
9110: 69 73 2e 74 6f 49 6e 74 65 67 65 72 20 3d 20 66  is.toInteger = f
9120: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20  unction () {.   
9130: 20 20 20 69 66 20 28 74 68 69 73 2e 74 79 70 65     if (this.type
9140: 20 3d 3d 20 74 68 69 73 2e 49 4e 54 45 47 45 52   == this.INTEGER
9150: 29 20 72 65 74 75 72 6e 20 74 68 69 73 2e 63 6f  ) return this.co
9160: 6e 74 65 6e 74 3b 0a 20 20 20 20 20 20 74 68 69  ntent;.      thi
9170: 73 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  s.toString();.  
9180: 20 20 20 20 69 66 20 28 74 68 69 73 2e 63 6f 6e      if (this.con
9190: 74 65 6e 74 2e 6d 61 74 63 68 28 54 63 6c 2e 69  tent.match(Tcl.i
91a0: 73 48 65 78 29 29 0a 09 74 68 69 73 2e 63 6f 6e  sHex))..this.con
91b0: 74 65 6e 74 20 3d 20 70 61 72 73 65 49 6e 74 28  tent = parseInt(
91c0: 74 68 69 73 2e 63 6f 6e 74 65 6e 74 2e 73 75 62  this.content.sub
91d0: 73 74 72 69 6e 67 28 32 29 2c 20 31 36 29 3b 0a  string(2), 16);.
91e0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
91f0: 68 69 73 2e 63 6f 6e 74 65 6e 74 2e 6d 61 74 63  his.content.matc
9200: 68 28 54 63 6c 2e 69 73 4f 63 74 61 6c 29 29 0a  h(Tcl.isOctal)).
9210: 09 74 68 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20  .this.content = 
9220: 70 61 72 73 65 49 6e 74 28 74 68 69 73 2e 63 6f  parseInt(this.co
9230: 6e 74 65 6e 74 2c 20 38 29 3b 0a 20 20 20 20 20  ntent, 8);.     
9240: 20 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e 63   else if (this.c
9250: 6f 6e 74 65 6e 74 2e 6d 61 74 63 68 28 54 63 6c  ontent.match(Tcl
9260: 2e 69 73 44 65 63 69 6d 61 6c 29 29 0a 09 74 68  .isDecimal))..th
9270: 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 70 61 72  is.content = par
9280: 73 65 49 6e 74 28 74 68 69 73 2e 63 6f 6e 74 65  seInt(this.conte
9290: 6e 74 29 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  nt);.      else 
92a0: 74 68 72 6f 77 20 22 4e 6f 74 20 61 6e 20 69 6e  throw "Not an in
92b0: 74 65 67 65 72 3a 20 27 22 2b 74 68 69 73 2e 63  teger: '"+this.c
92c0: 6f 6e 74 65 6e 74 2b 22 27 22 3b 0a 20 20 20 20  ontent+"'";.    
92d0: 20 20 69 66 20 28 69 73 4e 61 4e 28 74 68 69 73    if (isNaN(this
92e0: 2e 63 6f 6e 74 65 6e 74 29 29 20 74 68 72 6f 77  .content)) throw
92f0: 20 22 4e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72   "Not an integer
9300: 3a 20 27 22 2b 74 68 69 73 2e 63 6f 6e 74 65 6e  : '"+this.conten
9310: 74 2b 22 27 22 3b 0a 20 20 20 20 20 20 74 68 69  t+"'";.      thi
9320: 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 49 4e  s.type = this.IN
9330: 54 45 47 45 52 3b 0a 20 20 20 20 20 20 72 65 74  TEGER;.      ret
9340: 75 72 6e 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74  urn this.content
9350: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73  ;.    }.    this
9360: 2e 67 65 74 46 6c 6f 61 74 20 3d 20 66 75 6e 63  .getFloat = func
9370: 74 69 6f 6e 20 28 74 65 78 74 29 20 7b 0a 20 20  tion (text) {.  
9380: 20 20 20 20 69 66 20 28 21 74 65 78 74 2e 74 6f      if (!text.to
9390: 53 74 72 69 6e 67 28 29 2e 6d 61 74 63 68 28 54  String().match(T
93a0: 63 6c 2e 69 73 52 65 61 6c 29 29 0a 20 20 20 20  cl.isReal)).    
93b0: 20 20 20 20 74 68 72 6f 77 20 22 4e 6f 74 20 61      throw "Not a
93c0: 20 72 65 61 6c 3a 20 27 22 2b 74 65 78 74 2b 22   real: '"+text+"
93d0: 27 22 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  '";.      return
93e0: 20 70 61 72 73 65 46 6c 6f 61 74 28 74 65 78 74   parseFloat(text
93f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69  );.    }.    thi
9400: 73 2e 74 6f 52 65 61 6c 20 3d 20 66 75 6e 63 74  s.toReal = funct
9410: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 69  ion () {.      i
9420: 66 20 28 74 68 69 73 2e 74 79 70 65 20 3d 3d 20  f (this.type == 
9430: 74 68 69 73 2e 52 45 41 4c 29 0a 20 20 20 20 20  this.REAL).     
9440: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 63     return this.c
9450: 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 20 20 74 68  ontent;.      th
9460: 69 73 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20  is.toString();. 
9470: 20 20 20 20 20 2f 2f 20 70 61 72 73 65 46 6c 6f       // parseFlo
9480: 61 74 20 64 6f 65 73 6e 27 74 20 63 6f 6e 74 72  at doesn't contr
9490: 6f 6c 20 61 6c 6c 20 74 68 65 20 73 74 72 69 6e  ol all the strin
94a0: 67 2c 20 73 6f 20 6e 65 65 64 20 74 6f 20 63 68  g, so need to ch
94b0: 65 63 6b 20 69 74 0a 20 20 20 20 20 20 74 68 69  eck it.      thi
94c0: 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 74 68 69 73  s.content = this
94d0: 2e 67 65 74 46 6c 6f 61 74 28 74 68 69 73 2e 63  .getFloat(this.c
94e0: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 69  ontent);.      i
94f0: 66 20 28 69 73 4e 61 4e 28 74 68 69 73 2e 63 6f  f (isNaN(this.co
9500: 6e 74 65 6e 74 29 29 20 74 68 72 6f 77 20 22 4e  ntent)) throw "N
9510: 6f 74 20 61 20 72 65 61 6c 3a 20 27 22 2b 74 68  ot a real: '"+th
9520: 69 73 2e 63 6f 6e 74 65 6e 74 2b 22 27 22 3b 0a  is.content+"'";.
9530: 20 20 20 20 20 20 74 68 69 73 2e 74 79 70 65 20        this.type 
9540: 3d 20 74 68 69 73 2e 52 45 41 4c 3b 0a 20 20 20  = this.REAL;.   
9550: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 63     return this.c
9560: 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  ontent;.    }.  
9570: 20 20 74 68 69 73 2e 67 65 74 4e 75 6d 62 65 72    this.getNumber
9580: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
9590: 0a 20 20 20 20 20 20 74 72 79 20 7b 0a 09 72 65  .      try {..re
95a0: 74 75 72 6e 20 74 68 69 73 2e 74 6f 49 6e 74 65  turn this.toInte
95b0: 67 65 72 28 29 3b 0a 20 20 20 20 20 20 7d 20 63  ger();.      } c
95c0: 61 74 63 68 20 28 65 29 20 7b 72 65 74 75 72 6e  atch (e) {return
95d0: 20 74 68 69 73 2e 74 6f 52 65 61 6c 28 29 3b 7d   this.toReal();}
95e0: 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e  .    }.    this.
95f0: 74 6f 42 6f 6f 6c 65 61 6e 20 3d 20 66 75 6e 63  toBoolean = func
9600: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
9610: 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 3d 3d  if (this.type ==
9620: 20 74 68 69 73 2e 42 4f 4f 4c 29 20 72 65 74 75   this.BOOL) retu
9630: 72 6e 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 3b  rn this.content;
9640: 0a 20 20 20 20 20 20 74 72 79 20 7b 0a 09 74 68  .      try {..th
9650: 69 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 28 74 68  is.content = (th
9660: 69 73 2e 74 6f 49 6e 74 65 67 65 72 28 29 20 21  is.toInteger() !
9670: 3d 20 30 29 3b 0a 20 20 20 20 20 20 7d 20 63 61  = 0);.      } ca
9680: 74 63 68 20 28 65 29 20 7b 0a 09 76 61 72 20 74  tch (e) {..var t
9690: 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 3b   = this.content;
96a0: 0a 09 69 66 20 28 74 20 69 6e 73 74 61 6e 63 65  ..if (t instance
96b0: 6f 66 20 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  of Boolean) retu
96c0: 72 6e 20 74 3b 0a 09 73 77 69 74 63 68 20 28 74  rn t;..switch (t
96d0: 2e 74 6f 53 74 72 69 6e 67 28 29 2e 74 6f 4c 6f  .toString().toLo
96e0: 77 65 72 43 61 73 65 28 29 29 20 7b 0a 09 63 61  werCase()) {..ca
96f0: 73 65 20 22 79 65 73 22 3a 20 63 61 73 65 20 22  se "yes": case "
9700: 74 72 75 65 22 3a 20 63 61 73 65 20 22 6f 6e 22  true": case "on"
9710: 3a 0a 09 20 20 74 68 69 73 2e 63 6f 6e 74 65 6e  :..  this.conten
9720: 74 20 3d 20 74 72 75 65 3b 0a 09 20 20 62 72 65  t = true;..  bre
9730: 61 6b 3b 0a 09 63 61 73 65 20 22 66 61 6c 73 65  ak;..case "false
9740: 22 3a 20 63 61 73 65 20 22 6f 66 66 22 3a 20 63  ": case "off": c
9750: 61 73 65 20 22 6e 6f 22 3a 0a 09 20 20 74 68 69  ase "no":..  thi
9760: 73 2e 63 6f 6e 74 65 6e 74 20 3d 20 66 61 6c 73  s.content = fals
9770: 65 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 09 64 65  e;..  break;..de
9780: 66 61 75 6c 74 3a 0a 09 20 20 74 68 72 6f 77 20  fault:..  throw 
9790: 22 42 6f 6f 6c 65 61 6e 20 65 78 70 65 63 74 65  "Boolean expecte
97a0: 64 2c 20 67 6f 74 3a 20 27 22 2b 74 68 69 73 2e  d, got: '"+this.
97b0: 63 6f 6e 74 65 6e 74 2b 22 27 22 3b 0a 09 7d 0a  content+"'";..}.
97c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74 68        }.      th
97d0: 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 42  is.type = this.B
97e0: 4f 4f 4c 3b 0a 20 20 20 20 20 20 72 65 74 75 72  OOL;.      retur
97f0: 6e 20 74 68 69 73 2e 63 6f 6e 74 65 6e 74 3b 0a  n this.content;.
9800: 20 20 20 20 7d 0a 7d 0a 66 75 6e 63 74 69 6f 6e      }.}.function
9810: 20 54 63 6c 43 6f 6d 6d 61 6e 64 28 66 75 6e 63   TclCommand(func
9820: 2c 20 70 72 69 76 64 61 74 61 29 20 7b 0a 20 20  , privdata) {.  
9830: 69 66 20 28 66 75 6e 63 20 3d 3d 20 6e 75 6c 6c  if (func == null
9840: 29 20 74 68 72 6f 77 20 22 4e 6f 20 73 75 63 68  ) throw "No such
9850: 20 66 75 6e 63 74 69 6f 6e 22 3b 0a 20 20 74 68   function";.  th
9860: 69 73 2e 66 75 6e 63 20 20 20 20 20 3d 20 66 75  is.func     = fu
9870: 6e 63 3b 0a 20 20 74 68 69 73 2e 70 72 69 76 64  nc;.  this.privd
9880: 61 74 61 20 3d 20 70 72 69 76 64 61 74 61 3b 0a  ata = privdata;.
9890: 20 20 74 68 69 73 2e 65 6e 73 65 6d 62 6c 65 20    this.ensemble 
98a0: 3d 20 61 72 67 75 6d 65 6e 74 73 5b 32 5d 3b 0a  = arguments[2];.
98b0: 20 20 0a 20 20 74 68 69 73 2e 63 61 6c 6c 20 3d    .  this.call =
98c0: 20 66 75 6e 63 74 69 6f 6e 28 69 6e 74 65 72 70   function(interp
98d0: 2c 20 61 72 67 73 29 20 7b 0a 20 20 20 20 76 61  , args) {.    va
98e0: 72 20 72 65 73 20 3d 20 28 74 68 69 73 2e 66 75  r res = (this.fu
98f0: 6e 63 29 28 69 6e 74 65 72 70 2c 20 61 72 67 73  nc)(interp, args
9900: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 69 6e 74  );.    res = int
9910: 65 72 70 2e 6f 62 6a 65 63 74 69 66 79 28 72 65  erp.objectify(re
9920: 73 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72  s);.    return r
9930: 65 73 3b 0a 20 20 7d 0a 20 20 74 68 69 73 2e 61  es;.  }.  this.a
9940: 72 69 74 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20  rity = function 
9950: 28 61 72 67 73 2c 20 6d 69 6e 2c 20 6d 61 78 29  (args, min, max)
9960: 20 7b 0a 20 20 20 20 69 66 28 6d 61 78 20 3d 3d   {.    if(max ==
9970: 20 75 6e 64 65 66 69 6e 65 64 29 20 6d 61 78 20   undefined) max 
9980: 3d 20 6d 69 6e 3b 0a 20 20 20 20 69 66 20 28 61  = min;.    if (a
9990: 72 67 73 2e 6c 65 6e 67 74 68 20 3c 20 6d 69 6e  rgs.length < min
99a0: 20 7c 7c 20 61 72 67 73 2e 6c 65 6e 67 74 68 20   || args.length 
99b0: 3e 20 6d 61 78 29 20 7b 0a 20 20 20 20 20 20 74  > max) {.      t
99c0: 68 72 6f 77 20 6d 69 6e 20 2b 20 22 2e 2e 22 2b  hrow min + ".."+
99d0: 6d 61 78 20 2b 20 22 20 77 6f 72 64 73 20 65 78  max + " words ex
99e0: 70 65 63 74 65 64 2c 20 67 6f 74 20 22 2b 61 72  pected, got "+ar
99f0: 67 73 2e 6c 65 6e 67 74 68 3b 0a 20 20 20 20 7d  gs.length;.    }
9a00: 0a 20 20 7d 20 0a 7d 0a 66 75 6e 63 74 69 6f 6e  .  } .}.function
9a10: 20 54 63 6c 50 61 72 73 65 72 28 74 65 78 74 29   TclParser(text)
9a20: 20 7b 0a 20 20 74 68 69 73 2e 4f 4b 20 20 3d 20   {.  this.OK  = 
9a30: 30 3b 0a 20 20 74 68 69 73 2e 53 45 50 20 3d 20  0;.  this.SEP = 
9a40: 30 3b 0a 20 20 74 68 69 73 2e 53 54 52 20 3d 20  0;.  this.STR = 
9a50: 31 3b 0a 20 20 74 68 69 73 2e 45 4f 4c 20 3d 20  1;.  this.EOL = 
9a60: 32 3b 0a 20 20 74 68 69 73 2e 45 4f 46 20 3d 20  2;.  this.EOF = 
9a70: 33 3b 0a 20 20 74 68 69 73 2e 45 53 43 20 3d 20  3;.  this.ESC = 
9a80: 34 3b 0a 20 20 74 68 69 73 2e 43 4d 44 20 3d 20  4;.  this.CMD = 
9a90: 35 3b 0a 20 20 74 68 69 73 2e 56 41 52 20 3d 20  5;.  this.VAR = 
9aa0: 36 3b 0a 20 20 74 68 69 73 2e 74 65 78 74 20 20  6;.  this.text  
9ab0: 20 20 20 20 20 20 3d 20 74 65 78 74 3b 0a 20 20        = text;.  
9ac0: 74 68 69 73 2e 73 74 61 72 74 20 20 20 20 20 20  this.start      
9ad0: 20 3d 20 30 3b 0a 20 20 74 68 69 73 2e 65 6e 64   = 0;.  this.end
9ae0: 20 20 20 20 20 20 20 20 20 3d 20 30 3b 0a 20 20           = 0;.  
9af0: 74 68 69 73 2e 69 6e 73 69 64 65 71 75 6f 74 65  this.insidequote
9b00: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 74 68 69 73   = false;.  this
9b10: 2e 69 6e 64 65 78 20 20 20 20 20 20 20 3d 20 30  .index       = 0
9b20: 3b 0a 20 20 74 68 69 73 2e 6c 65 6e 20 20 20 20  ;.  this.len    
9b30: 20 20 20 20 20 3d 20 74 65 78 74 2e 6c 65 6e 67       = text.leng
9b40: 74 68 3b 0a 20 20 74 68 69 73 2e 74 79 70 65 20  th;.  this.type 
9b50: 20 20 20 20 20 20 20 3d 20 74 68 69 73 2e 45 4f         = this.EO
9b60: 4c 3b 0a 20 20 74 68 69 73 2e 63 75 72 20 20 20  L;.  this.cur   
9b70: 20 20 20 20 20 20 3d 20 74 68 69 73 2e 74 65 78        = this.tex
9b80: 74 2e 63 68 61 72 41 74 28 30 29 3b 0a 20 20 74  t.charAt(0);.  t
9b90: 68 69 73 2e 67 65 74 54 65 78 74 20 20 20 20 20  his.getText     
9ba0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
9bb0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
9bc0: 74 65 78 74 2e 73 75 62 73 74 72 69 6e 67 28 74  text.substring(t
9bd0: 68 69 73 2e 73 74 61 72 74 2c 74 68 69 73 2e 65  his.start,this.e
9be0: 6e 64 2b 31 29 3b 0a 20 20 7d 0a 20 20 74 68 69  nd+1);.  }.  thi
9bf0: 73 2e 70 61 72 73 65 53 74 72 69 6e 67 20 3d 20  s.parseString = 
9c00: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20  function () {.  
9c10: 20 20 76 61 72 20 6e 65 77 77 6f 72 64 20 3d 20    var newword = 
9c20: 28 74 68 69 73 2e 74 79 70 65 20 3d 3d 20 74 68  (this.type == th
9c30: 69 73 2e 53 45 50 20 7c 7c 0a 09 09 20 20 20 74  is.SEP ||...   t
9c40: 68 69 73 2e 74 79 70 65 20 3d 3d 20 74 68 69 73  his.type == this
9c50: 2e 45 4f 4c 20 7c 7c 20 74 68 69 73 2e 74 79 70  .EOL || this.typ
9c60: 65 20 3d 3d 20 74 68 69 73 2e 53 54 52 29 3b 0a  e == this.STR);.
9c70: 20 20 20 20 69 66 20 28 6e 65 77 77 6f 72 64 20      if (newword 
9c80: 26 26 20 74 68 69 73 2e 63 75 72 20 3d 3d 20 22  && this.cur == "
9c90: 7b 22 29 20 72 65 74 75 72 6e 20 74 68 69 73 2e  {") return this.
9ca0: 70 61 72 73 65 42 72 61 63 65 28 29 3b 0a 20 20  parseBrace();.  
9cb0: 20 20 65 6c 73 65 20 69 66 20 28 6e 65 77 77 6f    else if (newwo
9cc0: 72 64 20 26 26 20 74 68 69 73 2e 63 75 72 20 3d  rd && this.cur =
9cd0: 3d 20 27 22 27 29 20 7b 0a 20 20 20 20 20 20 74  = '"') {.      t
9ce0: 68 69 73 2e 69 6e 73 69 64 65 71 75 6f 74 65 20  his.insidequote 
9cf0: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 74 68  = true;.      th
9d00: 69 73 2e 66 65 65 64 63 68 61 72 28 29 3b 0a 20  is.feedchar();. 
9d10: 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e 73 74     }.    this.st
9d20: 61 72 74 20 3d 20 74 68 69 73 2e 69 6e 64 65 78  art = this.index
9d30: 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 74 72 75  ;.    while (tru
9d40: 65 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 74  e) {.      if (t
9d50: 68 69 73 2e 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a  his.len == 0) {.
9d60: 09 74 68 69 73 2e 65 6e 64 20 20 3d 20 74 68 69  .this.end  = thi
9d70: 73 2e 69 6e 64 65 78 2d 31 3b 0a 09 74 68 69 73  s.index-1;..this
9d80: 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 45 53 43  .type = this.ESC
9d90: 3b 0a 09 72 65 74 75 72 6e 20 74 68 69 73 2e 4f  ;..return this.O
9da0: 4b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  K;.      }.     
9db0: 20 2f 2a 69 66 20 28 74 68 69 73 2e 63 75 72 20   /*if (this.cur 
9dc0: 3d 3d 20 22 5c 5c 22 29 20 7b 20 2f 2f 20 77 6f  == "\\") { // wo
9dd0: 72 6b 73 20 6e 6f 74 20 3a 28 0a 09 69 66 20 28  rks not :(..if (
9de0: 74 68 69 73 2e 6c 65 6e 20 3e 3d 20 32 29 20 74  this.len >= 2) t
9df0: 68 69 73 2e 66 65 65 64 53 65 71 75 65 6e 63 65  his.feedSequence
9e00: 28 29 3b 0a 09 7d 0a 09 65 6c 73 65 2a 2f 20 69  ();..}..else*/ i
9e10: 66 20 28 22 24 5b 20 5c 74 5c 6e 5c 72 3b 22 2e  f ("$[ \t\n\r;".
9e20: 69 6e 64 65 78 4f 66 28 74 68 69 73 2e 63 75 72  indexOf(this.cur
9e30: 29 3e 3d 30 29 20 7b 0a 09 69 66 20 28 22 24 5b  )>=0) {..if ("$[
9e40: 22 2e 69 6e 64 65 78 4f 66 28 74 68 69 73 2e 63  ".indexOf(this.c
9e50: 75 72 29 3e 3d 30 20 7c 7c 20 21 74 68 69 73 2e  ur)>=0 || !this.
9e60: 69 6e 73 69 64 65 71 75 6f 74 65 29 20 7b 0a 09  insidequote) {..
9e70: 20 20 74 68 69 73 2e 65 6e 64 20 20 3d 20 74 68    this.end  = th
9e80: 69 73 2e 69 6e 64 65 78 2d 31 3b 0a 09 20 20 74  is.index-1;..  t
9e90: 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e  his.type = this.
9ea0: 45 53 43 3b 0a 09 20 20 72 65 74 75 72 6e 20 74  ESC;..  return t
9eb0: 68 69 73 2e 4f 4b 3b 0a 09 7d 0a 20 20 20 20 20  his.OK;..}.     
9ec0: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66   }.      else if
9ed0: 20 28 74 68 69 73 2e 63 75 72 20 3d 3d 20 27 22   (this.cur == '"
9ee0: 27 20 26 26 20 74 68 69 73 2e 69 6e 73 69 64 65  ' && this.inside
9ef0: 71 75 6f 74 65 29 20 7b 0a 09 74 68 69 73 2e 65  quote) {..this.e
9f00: 6e 64 20 20 3d 20 74 68 69 73 2e 69 6e 64 65 78  nd  = this.index
9f10: 2d 31 3b 0a 09 74 68 69 73 2e 74 79 70 65 20 3d  -1;..this.type =
9f20: 20 74 68 69 73 2e 45 53 43 3b 0a 09 74 68 69 73   this.ESC;..this
9f30: 2e 66 65 65 64 63 68 61 72 28 29 3b 0a 09 74 68  .feedchar();..th
9f40: 69 73 2e 69 6e 73 69 64 65 71 75 6f 74 65 20 3d  is.insidequote =
9f50: 20 66 61 6c 73 65 3b 0a 09 72 65 74 75 72 6e 20   false;..return 
9f60: 74 68 69 73 2e 4f 4b 3b 0a 20 20 20 20 20 20 7d  this.OK;.      }
9f70: 0a 20 20 20 20 20 20 74 68 69 73 2e 66 65 65 64  .      this.feed
9f80: 63 68 61 72 28 29 3b 0a 20 20 20 20 7d 0a 20 20  char();.    }.  
9f90: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4f 4b    return this.OK
9fa0: 3b 0a 20 20 7d 0a 20 20 74 68 69 73 2e 70 61 72  ;.  }.  this.par
9fb0: 73 65 4c 69 73 74 20 3d 20 66 75 6e 63 74 69 6f  seList = functio
9fc0: 6e 20 28 29 20 7b 0a 20 20 20 20 76 61 72 20 6c  n () {.    var l
9fd0: 65 76 65 6c 20 20 3d 20 30 3b 0a 20 20 20 20 74  evel  = 0;.    t
9fe0: 68 69 73 2e 73 74 61 72 74 20 3d 20 74 68 69 73  his.start = this
9ff0: 2e 69 6e 64 65 78 3b 0a 20 20 20 20 77 68 69 6c  .index;.    whil
a000: 65 20 28 74 72 75 65 29 20 7b 0a 20 20 20 20 20  e (true) {.     
a010: 20 69 66 20 28 74 68 69 73 2e 6c 65 6e 20 3d 3d   if (this.len ==
a020: 20 30 29 20 7b 0a 09 74 68 69 73 2e 65 6e 64 20   0) {..this.end 
a030: 20 3d 20 74 68 69 73 2e 69 6e 64 65 78 3b 0a 09   = this.index;..
a040: 74 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73  this.type = this
a050: 2e 45 4f 4c 3b 0a 09 72 65 74 75 72 6e 3b 0a 20  .EOL;..return;. 
a060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 77 69       }.      swi
a070: 74 63 68 20 28 74 68 69 73 2e 63 75 72 29 20 7b  tch (this.cur) {
a080: 0a 09 2f 2a 63 61 73 65 20 22 5c 5c 22 3a 0a 09  ../*case "\\":..
a090: 69 66 20 28 74 68 69 73 2e 6c 65 6e 20 3e 3d 20  if (this.len >= 
a0a0: 32 29 20 74 68 69 73 2e 66 65 65 64 53 65 71 75  2) this.feedSequ
a0b0: 65 6e 63 65 28 29 3b 0a 09 62 72 65 61 6b 3b 2a  ence();..break;*
a0c0: 2f 0a 20 20 20 20 20 20 63 61 73 65 20 22 20 22  /.      case " "
a0d0: 3a 20 63 61 73 65 20 22 5c 74 22 3a 20 63 61 73  : case "\t": cas
a0e0: 65 20 22 5c 6e 22 3a 20 63 61 73 65 20 22 5c 72  e "\n": case "\r
a0f0: 22 3a 0a 09 69 66 20 28 6c 65 76 65 6c 20 3e 20  ":..if (level > 
a100: 30 29 20 62 72 65 61 6b 3b 0a 09 74 68 69 73 2e  0) break;..this.
a110: 65 6e 64 20 20 3d 20 74 68 69 73 2e 69 6e 64 65  end  = this.inde
a120: 78 20 2d 20 31 3b 0a 09 74 68 69 73 2e 74 79 70  x - 1;..this.typ
a130: 65 20 3d 20 74 68 69 73 2e 53 45 50 3b 0a 09 74  e = this.SEP;..t
a140: 68 69 73 2e 66 65 65 64 63 68 61 72 28 29 3b 0a  his.feedchar();.
a150: 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 63  .return;.      c
a160: 61 73 65 20 27 7b 27 3a 20 6c 65 76 65 6c 2b 2b  ase '{': level++
a170: 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ; break;.      c
a180: 61 73 65 20 27 7d 27 3a 20 6c 65 76 65 6c 2d 2d  ase '}': level--
a190: 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ; break;.      }
a1a0: 0a 20 20 20 20 20 20 74 68 69 73 2e 66 65 65 64  .      this.feed
a1b0: 63 68 61 72 28 29 3b 0a 20 20 20 20 7d 0a 20 20  char();.    }.  
a1c0: 20 20 69 66 20 28 6c 65 76 65 6c 20 21 3d 20 30    if (level != 0
a1d0: 29 20 74 68 72 6f 77 20 22 4e 6f 74 20 61 20 6c  ) throw "Not a l
a1e0: 69 73 74 22 3b 0a 20 20 20 20 74 68 69 73 2e 65  ist";.    this.e
a1f0: 6e 64 20 3d 20 74 68 69 73 2e 69 6e 64 65 78 3b  nd = this.index;
a200: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
a210: 0a 20 20 74 68 69 73 2e 70 61 72 73 65 53 65 70  .  this.parseSep
a220: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
a230: 0a 20 20 20 20 74 68 69 73 2e 73 74 61 72 74 20  .    this.start 
a240: 3d 20 74 68 69 73 2e 69 6e 64 65 78 3b 0a 20 20  = this.index;.  
a250: 20 20 77 68 69 6c 65 20 28 22 20 5c 74 5c 72 5c    while (" \t\r\
a260: 6e 22 2e 69 6e 64 65 78 4f 66 28 74 68 69 73 2e  n".indexOf(this.
a270: 63 75 72 29 3e 3d 30 29 20 74 68 69 73 2e 66 65  cur)>=0) this.fe
a280: 65 64 63 68 61 72 28 29 3b 0a 20 20 20 20 74 68  edchar();.    th
a290: 69 73 2e 65 6e 64 20 20 20 20 3d 20 74 68 69 73  is.end    = this
a2a0: 2e 69 6e 64 65 78 20 2d 20 31 3b 0a 20 20 20 20  .index - 1;.    
a2b0: 74 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73  this.type = this
a2c0: 2e 53 45 50 3b 0a 20 20 20 20 72 65 74 75 72 6e  .SEP;.    return
a2d0: 20 74 68 69 73 2e 4f 4b 3b 0a 20 20 7d 0a 20 20   this.OK;.  }.  
a2e0: 74 68 69 73 2e 70 61 72 73 65 45 6f 6c 20 3d 20  this.parseEol = 
a2f0: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20  function () {.  
a300: 20 20 74 68 69 73 2e 73 74 61 72 74 20 3d 20 74    this.start = t
a310: 68 69 73 2e 69 6e 64 65 78 3b 0a 20 20 20 20 77  his.index;.    w
a320: 68 69 6c 65 28 22 20 5c 74 5c 6e 5c 72 3b 22 2e  hile(" \t\n\r;".
a330: 69 6e 64 65 78 4f 66 28 74 68 69 73 2e 63 75 72  indexOf(this.cur
a340: 29 3e 3d 30 29 20 74 68 69 73 2e 66 65 65 64 63  )>=0) this.feedc
a350: 68 61 72 28 29 3b 0a 20 20 20 20 74 68 69 73 2e  har();.    this.
a360: 65 6e 64 20 20 20 20 3d 20 74 68 69 73 2e 69 6e  end    = this.in
a370: 64 65 78 20 2d 20 31 3b 0a 20 20 20 20 74 68 69  dex - 1;.    thi
a380: 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 45 4f  s.type = this.EO
a390: 4c 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68  L;.    return th
a3a0: 69 73 2e 4f 4b 3b 0a 20 20 7d 0a 20 20 74 68 69  is.OK;.  }.  thi
a3b0: 73 2e 70 61 72 73 65 43 6f 6d 6d 61 6e 64 20 3d  s.parseCommand =
a3c0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
a3d0: 20 20 20 76 61 72 20 6c 65 76 65 6c 20 3d 20 31     var level = 1
a3e0: 3b 0a 20 20 20 20 76 61 72 20 62 6c 65 76 65 6c  ;.    var blevel
a3f0: 20 3d 20 30 3b 0a 20 20 20 20 74 68 69 73 2e 66   = 0;.    this.f
a400: 65 65 64 63 68 61 72 73 74 61 72 74 28 29 3b 0a  eedcharstart();.
a410: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
a420: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 74 68 69   {.      if (thi
a430: 73 2e 6c 65 6e 20 3d 3d 20 30 29 20 62 72 65 61  s.len == 0) brea
a440: 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 74 68 69  k;.      if (thi
a450: 73 2e 63 75 72 20 3d 3d 20 22 5b 22 20 26 26 20  s.cur == "[" && 
a460: 62 6c 65 76 65 6c 20 3d 3d 20 30 29 0a 09 6c 65  blevel == 0)..le
a470: 76 65 6c 2b 2b 3b 0a 20 20 20 20 20 20 65 6c 73  vel++;.      els
a480: 65 20 69 66 20 28 74 68 69 73 2e 63 75 72 20 3d  e if (this.cur =
a490: 3d 20 22 5d 22 20 26 26 20 62 6c 65 76 65 6c 20  = "]" && blevel 
a4a0: 3d 3d 20 30 29 20 7b 0a 09 6c 65 76 65 6c 2d 2d  == 0) {..level--
a4b0: 3b 0a 09 69 66 20 28 6c 65 76 65 6c 20 3d 3d 20  ;..if (level == 
a4c0: 30 29 20 62 72 65 61 6b 3b 0a 09 2f 2f 7d 20 65  0) break;..//} e
a4d0: 6c 73 65 20 69 66 20 28 74 68 69 73 2e 63 75 72  lse if (this.cur
a4e0: 20 3d 3d 20 22 5c 5c 22 29 20 7b 0a 09 2f 2f 74   == "\\") {..//t
a4f0: 68 69 73 2e 66 65 65 64 53 65 71 75 65 6e 63 65  his.feedSequence
a500: 28 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ();.      } else
a510: 20 69 66 20 28 74 68 69 73 2e 63 75 72 20 3d 3d   if (this.cur ==
a520: 20 22 7b 22 29 20 7b 0a 09 62 6c 65 76 65 6c 2b   "{") {..blevel+
a530: 2b 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  +;.      } else 
a540: 69 66 20 28 74 68 69 73 2e 63 75 72 20 3d 3d 20  if (this.cur == 
a550: 22 7d 22 29 20 7b 0a 09 69 66 20 28 62 6c 65 76  "}") {..if (blev
a560: 65 6c 20 21 3d 20 30 29 20 62 6c 65 76 65 6c 2d  el != 0) blevel-
a570: 2d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  -;.      }.     
a580: 20 74 68 69 73 2e 66 65 65 64 63 68 61 72 28 29   this.feedchar()
a590: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 68 69 73  ;.    }.    this
a5a0: 2e 65 6e 64 20 20 20 20 3d 20 74 68 69 73 2e 69  .end    = this.i
a5b0: 6e 64 65 78 2d 31 3b 0a 20 20 20 20 74 68 69 73  ndex-1;.    this
a5c0: 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 43 4d 44  .type = this.CMD
a5d0: 3b 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 63  ;.    if (this.c
a5e0: 75 72 20 3d 3d 20 22 5d 22 29 20 74 68 69 73 2e  ur == "]") this.
a5f0: 66 65 65 64 63 68 61 72 28 29 3b 0a 20 20 20 20  feedchar();.    
a600: 72 65 74 75 72 6e 20 74 68 69 73 2e 4f 4b 3b 0a  return this.OK;.
a610: 20 20 7d 0a 20 20 74 68 69 73 2e 70 61 72 73 65    }.  this.parse
a620: 56 61 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  Var = function (
a630: 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 66 65 65  ) {.    this.fee
a640: 64 63 68 61 72 73 74 61 72 74 28 29 3b 0a 20 20  dcharstart();.  
a650: 20 20 74 68 69 73 2e 65 6e 64 20 3d 20 74 68 69    this.end = thi
a660: 73 2e 69 6e 64 65 78 0a 20 20 20 20 2b 20 74 68  s.index.    + th
a670: 69 73 2e 74 65 78 74 2e 73 75 62 73 74 72 69 6e  is.text.substrin
a680: 67 28 74 68 69 73 2e 69 6e 64 65 78 29 2e 6d 61  g(this.index).ma
a690: 74 63 68 28 54 63 6c 2e 67 65 74 56 61 72 29 2e  tch(Tcl.getVar).
a6a0: 74 6f 53 74 72 69 6e 67 28 29 2e 6c 65 6e 67 74  toString().lengt
a6b0: 68 2d 31 3b 0a 20 20 20 20 69 66 20 28 74 68 69  h-1;.    if (thi
a6c0: 73 2e 65 6e 64 20 3d 3d 20 74 68 69 73 2e 69 6e  s.end == this.in
a6d0: 64 65 78 2d 31 29 20 7b 0a 20 20 20 20 20 20 74  dex-1) {.      t
a6e0: 68 69 73 2e 65 6e 64 20 3d 20 2d 2d 74 68 69 73  his.end = --this
a6f0: 2e 69 6e 64 65 78 3b 0a 20 20 20 20 20 20 74 68  .index;.      th
a700: 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 53  is.type = this.S
a710: 54 52 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 74  TR;.    } else t
a720: 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e  his.type = this.
a730: 56 41 52 3b 0a 20 20 20 20 74 68 69 73 2e 73 65  VAR;.    this.se
a740: 74 50 6f 73 28 74 68 69 73 2e 65 6e 64 2b 31 29  tPos(this.end+1)
a750: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 69  ;.    return thi
a760: 73 2e 4f 4b 3b 0a 20 20 7d 0a 20 20 74 68 69 73  s.OK;.  }.  this
a770: 2e 70 61 72 73 65 42 72 61 63 65 20 3d 20 66 75  .parseBrace = fu
a780: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
a790: 76 61 72 20 6c 65 76 65 6c 20 3d 20 31 3b 0a 20  var level = 1;. 
a7a0: 20 20 20 74 68 69 73 2e 66 65 65 64 63 68 61 72     this.feedchar
a7b0: 73 74 61 72 74 28 29 3b 0a 20 20 20 20 77 68 69  start();.    whi
a7c0: 6c 65 20 28 74 72 75 65 29 20 7b 0a 20 20 20 20  le (true) {.    
a7d0: 20 20 2f 2a 69 66 20 28 74 68 69 73 2e 6c 65 6e    /*if (this.len
a7e0: 20 3e 20 31 20 26 26 20 74 68 69 73 2e 63 75 72   > 1 && this.cur
a7f0: 20 3d 3d 20 22 5c 5c 22 29 20 7b 0a 09 74 68 69   == "\\") {..thi
a800: 73 2e 66 65 65 64 53 65 71 75 65 6e 63 65 28 29  s.feedSequence()
a810: 3b 0a 09 7d 20 65 6c 73 65 2a 2f 0a 20 20 20 20  ;..} else*/.    
a820: 20 20 69 66 20 28 74 68 69 73 2e 6c 65 6e 20 3d    if (this.len =
a830: 3d 20 30 20 7c 7c 20 74 68 69 73 2e 63 75 72 20  = 0 || this.cur 
a840: 3d 3d 20 22 7d 22 29 20 7b 0a 09 6c 65 76 65 6c  == "}") {..level
a850: 2d 2d 3b 0a 09 69 66 20 28 6c 65 76 65 6c 20 3d  --;..if (level =
a860: 3d 20 30 20 7c 7c 20 74 68 69 73 2e 6c 65 6e 20  = 0 || this.len 
a870: 3d 3d 20 30 29 20 7b 0a 09 20 20 74 68 69 73 2e  == 0) {..  this.
a880: 65 6e 64 20 3d 20 74 68 69 73 2e 69 6e 64 65 78  end = this.index
a890: 2d 31 3b 0a 09 20 20 69 66 20 28 74 68 69 73 2e  -1;..  if (this.
a8a0: 6c 65 6e 20 3e 20 30 29 20 74 68 69 73 2e 66 65  len > 0) this.fe
a8b0: 65 64 63 68 61 72 28 29 3b 0a 09 20 20 74 68 69  edchar();..  thi
a8c0: 73 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 53 54  s.type = this.ST
a8d0: 52 3b 0a 09 20 20 72 65 74 75 72 6e 20 74 68 69  R;..  return thi
a8e0: 73 2e 4f 4b 3b 0a 09 7d 0a 20 20 20 20 20 20 7d  s.OK;..}.      }
a8f0: 20 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e 63   else if (this.c
a900: 75 72 20 3d 3d 20 22 7b 22 29 20 6c 65 76 65 6c  ur == "{") level
a910: 2b 2b 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 66  ++;.      this.f
a920: 65 65 64 63 68 61 72 28 29 3b 0a 20 20 20 20 7d  eedchar();.    }
a930: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73  .    return this
a940: 2e 4f 4b 3b 20 2f 2f 20 75 6e 72 65 61 63 68 65  .OK; // unreache
a950: 64 0a 20 20 7d 0a 20 20 74 68 69 73 2e 70 61 72  d.  }.  this.par
a960: 73 65 43 6f 6d 6d 65 6e 74 20 3d 20 66 75 6e 63  seComment = func
a970: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 77 68  tion () {.    wh
a980: 69 6c 65 20 28 74 68 69 73 2e 63 75 72 20 21 3d  ile (this.cur !=
a990: 20 22 5c 6e 22 20 26 26 20 74 68 69 73 2e 63 75   "\n" && this.cu
a9a0: 72 20 21 3d 20 22 5c 72 22 29 20 74 68 69 73 2e  r != "\r") this.
a9b0: 66 65 65 64 63 68 61 72 28 29 3b 0a 20 20 7d 0a  feedchar();.  }.
a9c0: 20 20 74 68 69 73 2e 67 65 74 54 6f 6b 65 6e 20    this.getToken 
a9d0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
a9e0: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
a9f0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 74 68 69   {.      if (thi
aa00: 73 2e 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 69  s.len == 0) {..i
aa10: 66 20 28 74 68 69 73 2e 74 79 70 65 20 3d 3d 20  f (this.type == 
aa20: 74 68 69 73 2e 45 4f 4c 29 20 74 68 69 73 2e 74  this.EOL) this.t
aa30: 79 70 65 20 3d 20 74 68 69 73 2e 45 4f 46 3b 0a  ype = this.EOF;.
aa40: 09 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 21  .if (this.type !
aa50: 3d 20 74 68 69 73 2e 45 4f 46 29 20 74 68 69 73  = this.EOF) this
aa60: 2e 74 79 70 65 20 3d 20 74 68 69 73 2e 45 4f 4c  .type = this.EOL
aa70: 3b 0a 09 72 65 74 75 72 6e 20 74 68 69 73 2e 4f  ;..return this.O
aa80: 4b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  K;.      }.     
aa90: 20 73 77 69 74 63 68 20 28 74 68 69 73 2e 63 75   switch (this.cu
aaa0: 72 29 20 7b 0a 20 20 20 20 20 20 63 61 73 65 20  r) {.      case 
aab0: 27 20 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  ' ':.      case 
aac0: 27 5c 74 27 3a 0a 20 20 20 20 20 20 69 66 20 28  '\t':.      if (
aad0: 74 68 69 73 2e 69 6e 73 69 64 65 71 75 6f 74 65  this.insidequote
aae0: 29 20 72 65 74 75 72 6e 20 74 68 69 73 2e 70 61  ) return this.pa
aaf0: 72 73 65 53 74 72 69 6e 67 28 29 3b 0a 20 20 20  rseString();.   
ab00: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 70     return this.p
ab10: 61 72 73 65 53 65 70 28 29 3b 0a 20 20 20 20 20  arseSep();.     
ab20: 20 63 61 73 65 20 27 5c 6e 27 3a 0a 20 20 20 20   case '\n':.    
ab30: 20 20 63 61 73 65 20 27 5c 72 27 3a 0a 20 20 20    case '\r':.   
ab40: 20 20 20 63 61 73 65 20 27 3b 27 3a 0a 20 20 20     case ';':.   
ab50: 20 20 20 69 66 20 28 74 68 69 73 2e 69 6e 73 69     if (this.insi
ab60: 64 65 71 75 6f 74 65 29 20 72 65 74 75 72 6e 20  dequote) return 
ab70: 74 68 69 73 2e 70 61 72 73 65 53 74 72 69 6e 67  this.parseString
ab80: 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ();.      return
ab90: 20 74 68 69 73 2e 70 61 72 73 65 45 6f 6c 28 29   this.parseEol()
aba0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 5b 27  ;.      case '['
abb0: 3a 20 72 65 74 75 72 6e 20 74 68 69 73 2e 70 61  : return this.pa
abc0: 72 73 65 43 6f 6d 6d 61 6e 64 28 29 3b 0a 20 20  rseCommand();.  
abd0: 20 20 20 20 63 61 73 65 20 27 24 27 3a 20 72 65      case '$': re
abe0: 74 75 72 6e 20 74 68 69 73 2e 70 61 72 73 65 56  turn this.parseV
abf0: 61 72 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ar();.      }.  
ac00: 20 20 20 20 69 66 20 28 74 68 69 73 2e 63 75 72      if (this.cur
ac10: 20 3d 3d 20 22 23 22 20 26 26 20 74 68 69 73 2e   == "#" && this.
ac20: 74 79 70 65 20 3d 3d 20 74 68 69 73 2e 45 4f 4c  type == this.EOL
ac30: 29 20 7b 0a 09 74 68 69 73 2e 70 61 72 73 65 43  ) {..this.parseC
ac40: 6f 6d 6d 65 6e 74 28 29 3b 0a 09 63 6f 6e 74 69  omment();..conti
ac50: 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
ac60: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 70     return this.p
ac70: 61 72 73 65 53 74 72 69 6e 67 28 29 3b 0a 20 20  arseString();.  
ac80: 20 20 7d 0a 20 20 20 20 2f 2f 72 65 74 75 72 6e    }.    //return
ac90: 20 74 68 69 73 2e 4f 4b 3b 20 2f 2f 20 75 6e 72   this.OK; // unr
aca0: 65 61 63 68 65 64 0a 20 20 7d 0a 20 20 74 68 69  eached.  }.  thi
acb0: 73 2e 66 65 65 64 53 65 71 75 65 6e 63 65 20 3d  s.feedSequence =
acc0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
acd0: 20 20 20 2f 2f 72 65 74 75 72 6e 3b 0a 20 20 20     //return;.   
ace0: 20 69 66 20 28 74 68 69 73 2e 63 75 72 20 21 3d   if (this.cur !=
acf0: 20 22 5c 5c 22 29 20 74 68 72 6f 77 20 22 49 6e   "\\") throw "In
ad00: 76 61 6c 69 64 20 65 73 63 61 70 65 20 73 65 71  valid escape seq
ad10: 75 65 6e 63 65 22 3b 0a 20 20 20 20 76 61 72 20  uence";.    var 
ad20: 63 75 72 20 3d 20 74 68 69 73 2e 73 74 65 61 6c  cur = this.steal
ad30: 28 31 29 3b 0a 20 20 20 20 70 75 74 73 28 22 65  (1);.    puts("e
ad40: 6e 74 65 72 20 66 65 65 64 53 65 71 75 65 6e 63  nter feedSequenc
ad50: 65 2c 20 74 65 78 74 3a 20 22 2b 74 68 69 73 2e  e, text: "+this.
ad60: 74 65 78 74 2b 22 20 63 75 72 3a 20 22 2b 63 75  text+" cur: "+cu
ad70: 72 29 3b 0a 20 20 20 20 76 61 72 20 73 70 65 63  r);.    var spec
ad80: 69 61 6c 73 20 3d 20 7b 7d 3b 0a 20 20 20 20 73  ials = {};.    s
ad90: 70 65 63 69 61 6c 73 2e 61 20 3d 20 22 5c 61 22  pecials.a = "\a"
ada0: 3b 0a 20 20 20 20 73 70 65 63 69 61 6c 73 2e 62  ;.    specials.b
adb0: 20 3d 20 22 5c 62 22 3b 0a 20 20 20 20 73 70 65   = "\b";.    spe
adc0: 63 69 61 6c 73 2e 66 20 3d 20 22 5c 66 22 3b 0a  cials.f = "\f";.
add0: 20 20 20 20 73 70 65 63 69 61 6c 73 2e 6e 20 3d      specials.n =
ade0: 20 22 5c 6e 22 3b 0a 20 20 20 20 73 70 65 63 69   "\n";.    speci
adf0: 61 6c 73 2e 72 20 3d 20 22 5c 72 22 3b 0a 20 20  als.r = "\r";.  
ae00: 20 20 73 70 65 63 69 61 6c 73 2e 74 20 3d 20 22    specials.t = "
ae10: 5c 74 22 3b 0a 20 20 20 20 73 70 65 63 69 61 6c  \t";.    special
ae20: 73 2e 76 20 3d 20 22 5c 76 22 3b 0a 20 20 20 20  s.v = "\v";.    
ae30: 73 77 69 74 63 68 20 28 63 75 72 29 20 7b 0a 20  switch (cur) {. 
ae40: 20 20 20 63 61 73 65 20 27 75 27 3a 0a 20 20 20     case 'u':.   
ae50: 20 20 20 76 61 72 20 68 65 78 20 3d 20 74 68 69     var hex = thi
ae60: 73 2e 73 74 65 61 6c 28 34 29 3b 0a 20 20 20 20  s.steal(4);.    
ae70: 20 20 69 66 20 28 68 65 78 20 21 3d 20 54 63 6c    if (hex != Tcl
ae80: 2e 69 73 48 65 78 53 65 71 2e 65 78 65 63 28 68  .isHexSeq.exec(h
ae90: 65 78 29 29 0a 09 74 68 72 6f 77 20 22 49 6e 76  ex))..throw "Inv
aea0: 61 6c 69 64 20 75 6e 69 63 6f 64 65 20 65 73 63  alid unicode esc
aeb0: 61 70 65 20 73 65 71 75 65 6e 63 65 3a 20 22 2b  ape sequence: "+
aec0: 68 65 78 3b 0a 20 20 20 20 20 20 63 75 72 20 3d  hex;.      cur =
aed0: 20 53 74 72 69 6e 67 2e 66 72 6f 6d 43 68 61 72   String.fromChar
aee0: 43 6f 64 65 28 70 61 72 73 65 49 6e 74 28 68 65  Code(parseInt(he
aef0: 78 2c 31 36 29 29 3b 0a 20 20 20 20 20 20 62 72  x,16));.      br
af00: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 78  eak;.    case 'x
af10: 27 3a 0a 20 20 20 20 20 20 2f 2a 0a 20 20 20 20  ':.      /*.    
af20: 20 20 76 61 72 20 68 65 78 20 3d 20 63 75 72 3b    var hex = cur;
af30: 20 2f 2f 74 68 69 73 2e 73 74 65 61 6c 28 32 29   //this.steal(2)
af40: 3b 0a 20 20 20 20 20 20 70 75 74 73 28 22 65 6e  ;.      puts("en
af50: 74 65 72 20 63 61 73 65 20 78 2c 20 68 65 78 3a  ter case x, hex:
af60: 20 27 22 2b 68 65 78 2b 22 27 20 63 75 72 3a 20   '"+hex+"' cur: 
af70: 27 22 2b 63 75 72 2b 27 22 27 29 3b 0a 20 20 20  '"+cur+'"');.   
af80: 20 20 20 69 66 20 28 68 65 78 20 21 3d 20 54 63     if (hex != Tc
af90: 6c 2e 69 73 48 65 78 53 65 71 2e 65 78 65 63 28  l.isHexSeq.exec(
afa0: 68 65 78 29 29 0a 09 74 68 72 6f 77 20 22 49 6e  hex))..throw "In
afb0: 76 61 6c 69 64 20 75 6e 69 63 6f 64 65 20 65 73  valid unicode es
afc0: 63 61 70 65 20 73 65 71 75 65 6e 63 65 3a 20 22  cape sequence: "
afd0: 2b 68 65 78 3b 0a 20 20 20 20 20 20 63 75 72 20  +hex;.      cur 
afe0: 3d 20 53 74 72 69 6e 67 2e 66 72 6f 6d 43 68 61  = String.fromCha
aff0: 72 43 6f 64 65 28 70 61 72 73 65 49 6e 74 28 68  rCode(parseInt(h
b000: 65 78 2c 31 36 29 29 3b 0a 20 20 20 20 20 20 2f  ex,16));.      /
b010: 2f 70 75 74 73 28 22 68 65 78 3a 20 22 2b 68 65  /puts("hex: "+he
b020: 78 2e 74 6f 53 74 72 69 6e 67 28 29 2b 22 20 63  x.toString()+" c
b030: 75 72 3a 20 22 2b 63 75 72 29 3b 0a 20 20 20 20  ur: "+cur);.    
b040: 20 20 2a 2f 0a 20 20 20 20 20 20 62 72 65 61 6b    */.      break
b050: 3b 0a 20 20 20 20 63 61 73 65 20 22 61 22 3a 20  ;.    case "a": 
b060: 63 61 73 65 20 22 62 22 3a 20 63 61 73 65 20 22  case "b": case "
b070: 66 22 3a 20 63 61 73 65 20 22 6e 22 3a 0a 20 20  f": case "n":.  
b080: 20 20 63 61 73 65 20 22 72 22 3a 20 63 61 73 65    case "r": case
b090: 20 22 74 22 3a 20 63 61 73 65 20 22 76 22 3a 0a   "t": case "v":.
b0a0: 20 20 20 20 20 20 63 75 72 20 3d 20 73 70 65 63        cur = spec
b0b0: 69 61 6c 73 5b 63 75 72 5d 3b 0a 20 20 20 20 20  ials[cur];.     
b0c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
b0d0: 75 6c 74 3a 0a 20 20 20 20 20 20 69 66 20 28 22  ult:.      if ("
b0e0: 30 31 32 33 34 35 36 37 38 39 22 2e 69 6e 64 65  0123456789".inde
b0f0: 78 4f 66 28 63 75 72 29 20 3e 3d 20 30 29 20 7b  xOf(cur) >= 0) {
b100: 0a 09 63 75 72 20 3d 20 63 75 72 20 2b 20 74 68  ..cur = cur + th
b110: 69 73 2e 73 74 65 61 6c 28 32 29 3b 0a 09 69 66  is.steal(2);..if
b120: 20 28 63 75 72 20 21 3d 20 54 63 6c 2e 69 73 4f   (cur != Tcl.isO
b130: 63 74 61 6c 53 65 71 2e 65 78 65 63 28 63 75 72  ctalSeq.exec(cur
b140: 29 29 0a 09 20 20 74 68 72 6f 77 20 22 49 6e 76  ))..  throw "Inv
b150: 61 6c 69 64 20 6f 63 74 61 6c 20 65 73 63 61 70  alid octal escap
b160: 65 20 73 65 71 75 65 6e 63 65 3a 20 22 2b 63 75  e sequence: "+cu
b170: 72 3b 0a 09 63 75 72 20 3d 20 53 74 72 69 6e 67  r;..cur = String
b180: 2e 66 72 6f 6d 43 68 61 72 43 6f 64 65 28 70 61  .fromCharCode(pa
b190: 72 73 65 49 6e 74 28 63 75 72 2c 20 38 29 29 3b  rseInt(cur, 8));
b1a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
b1b0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
b1c0: 74 68 69 73 2e 74 65 78 74 5b 69 6e 64 65 78 5d  this.text[index]
b1d0: 20 3d 20 63 75 72 3b 0a 20 20 20 20 74 68 69 73   = cur;.    this
b1e0: 2e 66 65 65 64 63 68 61 72 28 29 3b 0a 20 20 7d  .feedchar();.  }
b1f0: 0a 20 20 74 68 69 73 2e 73 74 65 61 6c 20 3d 20  .  this.steal = 
b200: 66 75 6e 63 74 69 6f 6e 20 28 6e 29 20 7b 0a 20  function (n) {. 
b210: 20 20 20 76 61 72 20 74 61 69 6c 20 3d 20 74 68     var tail = th
b220: 69 73 2e 74 65 78 74 2e 73 75 62 73 74 72 69 6e  is.text.substrin
b230: 67 28 74 68 69 73 2e 69 6e 64 65 78 2b 31 29 3b  g(this.index+1);
b240: 0a 20 20 20 20 76 61 72 20 77 6f 72 64 20 3d 20  .    var word = 
b250: 74 61 69 6c 2e 73 75 62 73 74 72 28 30 2c 20 6e  tail.substr(0, n
b260: 29 3b 0a 20 20 20 20 74 68 69 73 2e 74 65 78 74  );.    this.text
b270: 20 3d 20 74 68 69 73 2e 74 65 78 74 2e 73 75 62   = this.text.sub
b280: 73 74 72 69 6e 67 28 30 2c 20 74 68 69 73 2e 69  string(0, this.i
b290: 6e 64 65 78 2d 31 29 20 2b 20 74 61 69 6c 2e 73  ndex-1) + tail.s
b2a0: 75 62 73 74 72 69 6e 67 28 6e 29 3b 0a 20 20 20  ubstring(n);.   
b2b0: 20 2f 2f 70 75 74 73 28 22 74 61 69 6c 3a 20 22   //puts("tail: "
b2c0: 2b 74 61 69 6c 2b 22 20 77 6f 72 64 3a 20 22 2b  +tail+" word: "+
b2d0: 77 6f 72 64 29 3b 0a 20 20 20 20 72 65 74 75 72  word);.    retur
b2e0: 6e 20 77 6f 72 64 3b 0a 20 20 7d 0a 20 20 74 68  n word;.  }.  th
b2f0: 69 73 2e 66 65 65 64 63 68 61 72 73 74 61 72 74  is.feedcharstart
b300: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
b310: 0a 20 20 20 20 74 68 69 73 2e 66 65 65 64 63 68  .    this.feedch
b320: 61 72 28 29 3b 0a 20 20 20 20 74 68 69 73 2e 73  ar();.    this.s
b330: 74 61 72 74 20 3d 20 74 68 69 73 2e 69 6e 64 65  tart = this.inde
b340: 78 3b 0a 20 20 7d 0a 20 20 74 68 69 73 2e 73 65  x;.  }.  this.se
b350: 74 50 6f 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  tPos = function 
b360: 28 69 6e 64 65 78 29 20 7b 0a 20 20 20 20 76 61  (index) {.    va
b370: 72 20 64 20 20 20 20 20 20 3d 20 69 6e 64 65 78  r d      = index
b380: 2d 74 68 69 73 2e 69 6e 64 65 78 3b 0a 20 20 20  -this.index;.   
b390: 20 74 68 69 73 2e 69 6e 64 65 78 20 3d 20 69 6e   this.index = in
b3a0: 64 65 78 3b 0a 20 20 20 20 74 68 69 73 2e 6c 65  dex;.    this.le
b3b0: 6e 20 20 2d 3d 20 64 3b 0a 20 20 20 20 74 68 69  n  -= d;.    thi
b3c0: 73 2e 63 75 72 20 20 20 3d 20 74 68 69 73 2e 74  s.cur   = this.t
b3d0: 65 78 74 2e 63 68 61 72 41 74 28 74 68 69 73 2e  ext.charAt(this.
b3e0: 69 6e 64 65 78 29 3b 0a 20 20 7d 0a 20 20 74 68  index);.  }.  th
b3f0: 69 73 2e 66 65 65 64 63 68 61 72 20 3d 20 66 75  is.feedchar = fu
b400: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
b410: 74 68 69 73 2e 69 6e 64 65 78 2b 2b 3b 0a 20 20  this.index++;.  
b420: 20 20 74 68 69 73 2e 6c 65 6e 2d 2d 3b 0a 20 20    this.len--;.  
b430: 20 20 69 66 20 28 74 68 69 73 2e 6c 65 6e 20 3c    if (this.len <
b440: 20 30 29 0a 20 20 20 20 20 20 74 68 72 6f 77 20   0).      throw 
b450: 22 45 6e 64 20 6f 66 20 66 69 6c 65 20 72 65 61  "End of file rea
b460: 63 68 65 64 22 3b 0a 20 20 20 20 74 68 69 73 2e  ched";.    this.
b470: 63 75 72 20 3d 20 74 68 69 73 2e 74 65 78 74 2e  cur = this.text.
b480: 63 68 61 72 41 74 28 74 68 69 73 2e 69 6e 64 65  charAt(this.inde
b490: 78 29 3b 0a 20 20 7d 0a 7d 0a 2f 2f 2d 2d 2d 2d  x);.  }.}.//----
b4a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b4b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b4c0: 2d 20 6d 61 69 6e 20 52 65 61 64 2d 45 76 61 6c  - main Read-Eval
b4d0: 2d 50 72 69 6e 74 20 6c 6f 6f 70 0a 76 61 72 20  -Print loop.var 
b4e0: 69 74 70 20 3d 20 6e 65 77 20 54 63 6c 49 6e 74  itp = new TclInt
b4f0: 65 72 70 28 29 3b 0a 76 61 72 20 72 65 73 3b 0a  erp();.var res;.
b500: 70 72 6f 63 65 73 73 2e 61 72 67 76 2e 73 6c 69  process.argv.sli
b510: 63 65 28 32 29 2e 66 6f 72 45 61 63 68 28 66 75  ce(2).forEach(fu
b520: 6e 63 74 69 6f 6e 28 63 6d 64 2c 69 6e 64 65 78  nction(cmd,index
b530: 2c 61 72 72 61 79 29 20 7b 0a 20 20 20 20 20 20  ,array) {.      
b540: 20 69 74 70 2e 65 76 61 6c 28 63 6d 64 29 3b 0a   itp.eval(cmd);.
b550: 20 20 20 20 20 7d 29 3b 0a 76 61 72 20 72 65 61       });.var rea
b560: 64 6c 69 6e 65 20 3d 20 72 65 71 75 69 72 65 28  dline = require(
b570: 27 72 65 61 64 6c 69 6e 65 27 29 3b 0a 76 61 72  'readline');.var
b580: 20 72 6c 20 20 20 20 20 20 20 3d 20 72 65 61 64   rl       = read
b590: 6c 69 6e 65 2e 63 72 65 61 74 65 49 6e 74 65 72  line.createInter
b5a0: 66 61 63 65 28 70 72 6f 63 65 73 73 2e 73 74 64  face(process.std
b5b0: 69 6e 2c 20 70 72 6f 63 65 73 73 2e 73 74 64 6f  in, process.stdo
b5c0: 75 74 29 3b 0a 72 6c 2e 73 65 74 50 72 6f 6d 70  ut);.rl.setPromp
b5d0: 74 28 27 25 20 27 29 3b 0a 72 6c 2e 70 72 6f 6d  t('% ');.rl.prom
b5e0: 70 74 28 29 3b 0a 69 74 70 2e 67 65 74 73 20 3d  pt();.itp.gets =
b5f0: 20 66 75 6e 63 74 69 6f 6e 28 6c 69 6e 65 29 20   function(line) 
b600: 7b 0a 20 20 69 66 20 28 69 74 70 2e 67 65 74 73  {.  if (itp.gets
b610: 69 6e 67 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20  ing == 0) {.    
b620: 74 72 79 20 7b 0a 20 20 20 20 20 20 72 65 73 20  try {.      res 
b630: 3d 20 69 74 70 2e 65 76 61 6c 28 6c 69 6e 65 2e  = itp.eval(line.
b640: 74 72 69 6d 28 29 29 3b 0a 20 20 20 20 7d 20 63  trim());.    } c
b650: 61 74 63 68 28 65 29 20 7b 72 65 73 20 3d 20 65  atch(e) {res = e
b660: 3b 7d 0a 20 20 20 20 69 66 20 28 69 74 70 2e 67  ;}.    if (itp.g
b670: 65 74 73 69 6e 67 20 3d 3d 20 30 29 20 7b 0a 20  etsing == 0) {. 
b680: 20 20 20 20 20 69 66 28 72 65 73 20 21 3d 20 6e       if(res != n
b690: 75 6c 6c 20 26 26 20 72 65 73 2e 74 6f 53 74 72  ull && res.toStr
b6a0: 69 6e 67 28 29 2e 6c 65 6e 67 74 68 29 20 0a 09  ing().length) ..
b6b0: 70 75 74 73 28 72 65 73 2e 74 6f 53 74 72 69 6e  puts(res.toStrin
b6c0: 67 28 29 29 3b 0a 20 20 20 20 20 20 72 6c 2e 70  g());.      rl.p
b6d0: 72 6f 6d 70 74 28 29 3b 0a 20 20 20 20 7d 0a 20  rompt();.    }. 
b6e0: 20 7d 20 65 6c 73 65 20 7b 69 74 70 2e 62 75 66   } else {itp.buf
b6f0: 20 3d 20 6c 69 6e 65 3b 20 69 74 70 2e 67 65 74   = line; itp.get
b700: 73 69 6e 67 20 3d 20 30 3b 20 72 6c 2e 70 72 6f  sing = 0; rl.pro
b710: 6d 70 74 28 29 3b 7d 0a 7d 3b 0a 72 6c 2e 6f 6e  mpt();}.};.rl.on
b720: 28 27 6c 69 6e 65 27 2c 20 69 74 70 2e 67 65 74  ('line', itp.get
b730: 73 29 2e 6f 6e 28 27 63 6c 6f 73 65 27 2c 66 75  s).on('close',fu
b740: 6e 63 74 69 6f 6e 28 29 20 7b 70 72 6f 63 65 73  nction() {proces
b750: 73 2e 65 78 69 74 28 30 29 3b 7d 29 3b 0a        s.exit(0);});.