[push-pull
strick**20120323091702
 Ignore-this: 26362804cedcae277660837b3011f95b
] hunk ./terse-a1/AndroidManifest.xml 7
-    <uses-sdk android:minSdkVersion="11" />
+    <uses-sdk android:minSdkVersion="7" />
hunk ./terse-a1/AndroidManifest.xml 24
+
hunk ./terse-a1/res/values/strings.xml 5
-    <string name="app_name">TerseTalk-a1</string>
+    <string name="app_name">AndyTerseTalk</string>
hunk ./terse-a1/src/terse/a1/TerseActivity.java 16
+import java.util.List;
hunk ./terse-a1/src/terse/a1/TerseActivity.java 20
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.HttpParams;
+
hunk ./terse-a1/src/terse/a1/TerseActivity.java 77
+	public static String world = "aaa";
hunk ./terse-a1/src/terse/a1/TerseActivity.java 91
+
hunk ./terse-a1/src/terse/a1/TerseActivity.java 109
-			terp = new AndroidTerp(true, "aaa", "aaa.txt");
-			
+			terp = new AndroidTerp(true, world, world + ".txt");
+
hunk ./terse-a1/src/terse/a1/TerseActivity.java 115
-			for (int i = 0; i < names.length ; i++) {
+			for (int i = 0; i < names.length; i++) {
hunk ./terse-a1/src/terse/a1/TerseActivity.java 117
-				terp.say("FILE[%d]: abs <%s> canon <%s> time %d len %d", i, theFile.getAbsoluteFile(), theFile.getCanonicalPath(), theFile.lastModified(), theFile.length());
+				terp.say("FILE[%d]: abs <%s> canon <%s> time %d len %d", i,
+						theFile.getAbsoluteFile(), theFile.getCanonicalPath(),
+						theFile.lastModified(), theFile.length());
hunk ./terse-a1/src/terse/a1/TerseActivity.java 171
-		
+
hunk ./terse-a1/src/terse/a1/TerseActivity.java 176
+
+		@Override
+		public void pushToWeb(String filename, String content) {
+			DefaultHttpClient client = new DefaultHttpClient();
+			HttpPost post = new HttpPost(fmt(
+					"http://wiki.yak.net/0.pushToWeb.%s", filename));
+
+			try {
+				List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
+				nameValuePairs.add(new BasicNameValuePair("content", content));
+				post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
+
+				HttpResponse response = client.execute(post);
+				BufferedReader rd = new BufferedReader(new InputStreamReader(
+						response.getEntity().getContent()));
+				String line = "";
+				while ((line = rd.readLine()) != null) {
+					line.length(); // Ignore it for now.
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+				toss("Error during pushToWeb <%s>: %s", filename, e);
+			}
+		}
+
+		@Override
+		public String pullFromWeb(String filename) {
+			DefaultHttpClient client = new DefaultHttpClient();
+			HttpGet post = new HttpGet(fmt(
+					"http://wiki.yak.net/0.pullFromWeb.%s", filename));
+
+			try {
+				HttpResponse response = client.execute(post);
+				BufferedReader rd = new BufferedReader(new InputStreamReader(
+						response.getEntity().getContent()));
+				StringBuilder sb = new StringBuilder();
+				while (true) {
+					String line = rd.readLine();
+					if (line == null)
+						break;
+					sb.append(line);
+					sb.append('\n');
+				}
+				return sb.toString();
+			} catch (IOException e) {
+				e.printStackTrace();
+				toss("Error during pushToWeb <%s>: %s", filename, e);
+				return null;
+			}
+		}
hunk ./terse-a1/src/terse/a1/TerseActivity.java 358
+					ed.setBackgroundColor(Color.BLACK);
hunk ./terse-a1/src/terse/a1/TerseActivity.java 421
-				} else if (type.str.equals("text") && value instanceof Str) {
-					explain = "<<< " + title + " >>>\n\n" + value.toString();
-					// Fall thru for explainv.setText(explain).
hunk ./terse-a1/src/terse/a1/TerseActivity.java 427
+				} else if (type.str.equals("world") && value instanceof Str) {
+					String newWorld = value.toString();
+					if (Terp.WORLD_P.matcher(newWorld).matches()) {
+						world = newWorld;
+						resetTerp();
+						explain = Static.fmt("Switching to world <%s>", world);
+						Toast.makeText(getApplicationContext(), explain,
+								Toast.LENGTH_SHORT).show();
+					} else {
+						terp.toss(
+								"Bad world syntax (must be 3 letters then 0 to 3 digits: <%s>",
+								newWorld);
+					}
+					// Fall thru for explainv.setText(explain).
+				} else if (type.str.equals("text") && value instanceof Str) {
+					explain = "<<< " + title + " >>>\n\n" + value.toString();
+					// Fall thru for explainv.setText(explain).
hunk ./terse-vm/src/terse/vm/Cls.java 12
+	// =cls "sys" Cls Obj
+	
hunk ./terse-vm/src/terse/vm/Cls.java 120
-				terp.appendImageFile(fmt("meth %s %s", name, m.name), lines);
+				terp.appendWorldFile(fmt("meth %s %s", name, m.name), lines);
hunk ./terse-vm/src/terse/vm/Cls.java 122
-					terp.appendImageFile(fmt("meth %s %s", name, m.abbrev),
+					terp.appendWorldFile(fmt("meth %s %s", name, m.abbrev),
hunk ./terse-vm/src/terse/vm/Cls.java 158
-			terp.appendImageFile(fmt("class %s %s", newname, name), null);
+			terp.appendWorldFile(fmt("class %s %s", newname, name), null);
hunk ./terse-vm/src/terse/vm/Cls.java 277
-					terp.appendImageFile(fmt("instvars %s", self.name), Terp.strs(varsStr.str));
+					terp.appendWorldFile(fmt("instvars %s", self.name), Terp.strs(varsStr.str));
hunk ./terse-vm/src/terse/vm/Cls.java 342
-		// =cls "meth" Meth Obj
+		// =cls "sys" Meth Obj
hunk ./terse-vm/src/terse/vm/Cls.java 378
-		// =cls "meth" JavaMeth Meth
+		// =cls "sys" JavaMeth Meth
hunk ./terse-vm/src/terse/vm/Cls.java 396
-		// =cls "meth" StrMeth Meth
+		// =cls "sys" StrMeth Meth
hunk ./terse-vm/src/terse/vm/Cls.java 410
-		// =cls "meth" UsrMeth Meth
+		// =cls "sys" UsrMeth Meth
hunk ./terse-vm/src/terse/vm/Pro.java 3
+import java.io.BufferedReader;
hunk ./terse-vm/src/terse/vm/Pro.java 5
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
hunk ./terse-vm/src/terse/vm/Pro.java 234
-	// =meth Obj nearestInt "convert a Num to the nearest int, by adding 0.5 and flooring"
+	// =meth Obj nearestInt
+	// "convert a Num to the nearest int, by adding 0.5 and flooring"
hunk ./terse-vm/src/terse/vm/Pro.java 246
-//		terp.tPro.addMethod(new JavaMeth(terp.tPro, "class", "cls") {
-//			@Override
-//			public Pro apply(Frame f, Pro r, Pro[] args) {
-//				// say("<Pro class> r=%s r.cls=%s r.cls.name=%s r.cls.name=%s",
-//				// r,
-//				// r.cls, r.cls.name, r.cls.name);
-//				return r.cls;
-//			}
-//		});
+		// terp.tPro.addMethod(new JavaMeth(terp.tPro, "class", "cls") {
+		// @Override
+		// public Pro apply(Frame f, Pro r, Pro[] args) {
+		// // say("<Pro class> r=%s r.cls=%s r.cls.name=%s r.cls.name=%s",
+		// // r,
+		// // r.cls, r.cls.name, r.cls.name);
+		// return r.cls;
+		// }
+		// });
hunk ./terse-vm/src/terse/vm/Pro.java 774
+		// =meth SysCls "io" readTxt: "Read a text file as one big Str."
+		public static Pro readTxt(Terp terp, String filename) {
+			terp.checkTxtFileNameSyntax(filename);
+			StringBuilder sb = new StringBuilder();
+			try {
+				FileInputStream fis = terp.openFileRead(filename);
+				InputStreamReader isr = new InputStreamReader(fis);
+				BufferedReader br = new BufferedReader(isr);
+				while (true) {
+					String line = br.readLine();
+					if (line == null)
+						break;
+					sb.append(line);
+					sb.append('\n');
+				}
+				fis.close();
+				return terp.newStr(sb.toString());
+			} catch (IOException e) {
+				return terp.toss("Cannot readTxt: <%s>: %s", filename, e);
+			}
+		}
+
+		public static void writeOrAppendTxt(Terp terp, String filename,
+				String content, boolean append) {
+			terp.checkTxtFileNameSyntax(filename);
+			StringBuilder sb = new StringBuilder();
+			try {
+				FileOutputStream fos = append ? terp.openFileAppend(filename)
+						: terp.openFileWrite(filename);
+				PrintStream ps = new PrintStream(fos);
+				ps.print(content);
+			} catch (IOException e) {
+				terp.toss("Cannot writeTxt: <%s>: %s", filename, e);
+			}
+		}
+
+		// =meth SysCls "io" writeTxt:value: "Write a text file as one big Str."
+		public static void writeTxt(Terp terp, String filename, String content) {
+			writeOrAppendTxt(terp, filename, content, false);
+		}
+
+		// =meth SysCls "io" appendTxt:value:
+		// "Append a text file as one big Str."
+		public static void appendTxt(Terp terp, String filename, String content) {
+			writeOrAppendTxt(terp, filename, content, true);
+		}
+
+		// =meth SysCls "io" pull: "Pull a file from the Web."
+		public static String pull(Terp terp, String filename) {
+			return terp.pullFromWeb(filename);
+		}
+
+		// =meth SysCls "io" push: "Push a file to the Web."
+		public static void push(Terp terp, String filename, String content) {
+			terp.pushToWeb(filename, content);
+		}
+
hunk ./terse-vm/src/terse/vm/Pro.java 834
-			// Pro z = terp.newStr(terp.env.get(a.str));
-			// return z == null ? terp.instNil : z;
hunk ./terse-vm/src/terse/vm/Pro.java 846
-		static void addBuiltinMethodsForSys(final Terp terp) {
-		}
hunk ./terse-vm/src/terse/vm/Pro.java 964
-
-		static void addBuiltinMethodsForBlk(final Terp terp) {
-
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "or", "",
-			// "Return true if any member evaluates true.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// Blk blk = r.asBlk();
-			// // Notice the block runs in its frame, not the caller's.
-			// Expr.Seq seq = (Seq) blk.body;
-			// Pro[] arr = new Pro[seq.body.length];
-			// for (int i = 0; i < arr.length; i++) {
-			// Pro x = seq.body[i].eval(blk.f);
-			// if (x.truth())
-			// return terp.instTrue;
-			// }
-			// return terp.instFalse;
-			// }
-			// });
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "and", "",
-			// "Return false if any member evaluates untrue.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// Blk blk = r.asBlk();
-			// // Notice the block runs in its frame, not the caller's.
-			// Expr.Seq seq = (Seq) blk.body;
-			// Pro[] arr = new Pro[seq.body.length];
-			// for (int i = 0; i < arr.length; i++) {
-			// Pro x = seq.body[i].eval(blk.f);
-			// if (!x.truth())
-			// return terp.instFalse;
-			// }
-			// return terp.instTrue;
-			// }
-			// });
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "value", "",
-			// "Evaluate the block.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// return r.asBlk().evalWithoutArgs();
-			// }
-			// });
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "value:", "",
-			// "Run the block with one argument.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// return r.asBlk().evalWith1Arg(args[0]);
-			// }
-			// });
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "value:value:",
-			// "value:value:", "Run the block with two arguments.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// return r.asBlk().evalWith2Args(args[0], args[1]);
-			// }
-			// });
-			// terp.tBlk.addMethod(new JavaMeth(terp.tBlk, "catch", "",
-			// "Catch exceptions.") {
-			// public Pro apply(Frame _, Pro r, Pro[] args) {
-			// Pro z = terp.instNil;
-			// Pro err = terp.instNil;
-			// Pro info = terp.instNil;
-			// try {
-			// z = r.asBlk().evalWithoutArgs();
-			// } catch (RuntimeException ex) {
-			// err = terp.newStr(ex.toString());
-			// StackTraceElement[] t = ex.getStackTrace();
-			// StringBuffer sb = new StringBuffer();
-			// for (int i = 0; i < t.length; i++) {
-			// sb.append(t[i].toString());
-			// sb.append("\n");
-			// }
-			// info = terp.newStr(sb.toString());
-			// }
-			// return terp.newVec(pros(z, err, info));
-			// }
-			// });
-		}
hunk ./terse-vm/src/terse/vm/Pro.java 996
-		
-		// =meth Num "access" chr "covert integer to single-char Str with that unicode codepoint"
+
+		// =meth Num "access" chr
+		// "covert integer to single-char Str with that unicode codepoint"
hunk ./terse-vm/src/terse/vm/Pro.java 1000
-			return new Character((char)toNearestInt()).toString();
+			return new Character((char) toNearestInt()).toString();
hunk ./terse-vm/src/terse/vm/Pro.java 1419
-		
-		// =meth Str "access" ord "unicode codepoint number of first char in Str"
+
+		// =meth Str "access" ord
+		// "unicode codepoint number of first char in Str"
hunk ./terse-vm/src/terse/vm/Pro.java 1729
-				if (i>0) {
+				if (i > 0) {
hunk ./terse-vm/src/terse/vm/Pro.java 1758
-		
+
hunk ./terse-vm/src/terse/vm/Pro.java 1781
-		
+
hunk ./terse-vm/src/terse/vm/Terp.java 29
-	String initFilename;
-	boolean loadingInitFile = false;
+
+	public static Pattern WORLD_P = Pattern.compile(
+			"^[a-z][a-z][a-z][0-9]{0,3}$", Pattern.CASE_INSENSITIVE);
+
+	static Pattern TXTFILE_P = Pattern.compile("^[a-z0-9]{1,8}\\.txt$");
+
+	String worldFilename;
+	boolean loadingWorldFile = false;
hunk ./terse-vm/src/terse/vm/Terp.java 90
-	protected Terp(boolean pleaseLoadPrelude, String imageName,
+	protected Terp(boolean pleaseLoadPrelude, String worldName,
hunk ./terse-vm/src/terse/vm/Terp.java 92
-		this.initFilename = initFilename;
+		this.worldFilename = initFilename;
hunk ./terse-vm/src/terse/vm/Terp.java 95
-		this.env.put("image", imageName);
+		this.env.put("world", worldName);
hunk ./terse-vm/src/terse/vm/Terp.java 169
-		Sys.addBuiltinMethodsForSys(this);  // for Sys frame.
hunk ./terse-vm/src/terse/vm/Terp.java 172
-		Blk.addBuiltinMethodsForBlk(this);
hunk ./terse-vm/src/terse/vm/Terp.java 177
-		loadingInitFile = true;
+		loadingWorldFile = true;
hunk ./terse-vm/src/terse/vm/Terp.java 181
-		loadingInitFile = false;
+		loadingWorldFile = false;
hunk ./terse-vm/src/terse/vm/Terp.java 383
-					new Vec(this, pros(newStr("type"), newStr("text"))), new Vec(this, 
-							pros(newStr("title"), newStr(ex.toString()))),
+					new Vec(this, pros(newStr("type"), newStr("text"))),
+					new Vec(this, pros(newStr("title"), newStr(ex.toString()))),
hunk ./terse-vm/src/terse/vm/Terp.java 405
-		loadingInitFile = true;
+		loadingWorldFile = true;
hunk ./terse-vm/src/terse/vm/Terp.java 510
-					break;  // For testing partial files.
+					break; // For testing partial files.
hunk ./terse-vm/src/terse/vm/Terp.java 516
-			loadingInitFile = false;
+			loadingWorldFile = false;
hunk ./terse-vm/src/terse/vm/Terp.java 520
-	void appendImageFile(String firstLine, String[] rest) throws IOException {
-		if (loadingInitFile) {
+	void appendWorldFile(String firstLine, String[] rest) throws IOException {
+		if (loadingWorldFile) {
hunk ./terse-vm/src/terse/vm/Terp.java 524
-		if (initFilename.length() == 0) {
+		if (worldFilename.length() == 0) {
hunk ./terse-vm/src/terse/vm/Terp.java 527
-		FileOutputStream fos = openFileAppend(initFilename);
+		FileOutputStream fos = openFileAppend(worldFilename);
hunk ./terse-vm/src/terse/vm/Terp.java 553
+	public void checkTxtFileNameSyntax(String filename) {
+		if (!TXTFILE_P.matcher(filename).matches()) {
+			toss("Bad filename, should match <%s> : <%s>", TXTFILE_P, filename);
+		}
+	}
+
hunk ./terse-vm/src/terse/vm/Terp.java 574
-	//
-	// public FileInputStream openFileRead(String filename) throws
-	// FileNotFoundException {
-	// return new FileInputStream(filename);
-	// }
-	// public FileOutputStream openFileWrite(String filename) throws
-	// FileNotFoundException {
-	// return new FileOutputStream(filename, false);
-	// }
-	// public FileOutputStream openFileAppend(String filename) throws
-	// FileNotFoundException {
-	// return new FileOutputStream(filename, true);
-	// }
+	public abstract void pushToWeb(String filename, String content);
+
+	public abstract String pullFromWeb(String filename);
hunk ./terse-vm/src/terse/vm/Terp.java 619
+
+		@Override
+		public void pushToWeb(String filename, String content) {
+			// import org.apache.http.impl.client.DefaultHttpClient;
+			toss("Not Implemented in PosixTerp: pushToWeb");
+		}
+
+		@Override
+		public String pullFromWeb(String filename) {
+			// import org.apache.http.impl.client.DefaultHttpClient;
+			toss("Not Implemented in PosixTerp: pullFromWeb");
+			return null;
+		}
hunk ./terse-vm/src/terse/vm/Wrap.java 48
-    // CMD meth Obj nearestInt "convert a Num to the nearest int, by adding 0.5 and flooring" TYPE int NAME toNearestInt PARAMS 
+    // CMD meth Obj nearestInt  "convert a Num to the nearest int, by adding 0.5 and flooring" TYPE int NAME toNearestInt PARAMS 
hunk ./terse-vm/src/terse/vm/Wrap.java 245
+        Cls self = terp.wrap.clsSysCls;
hunk ./terse-vm/src/terse/vm/Wrap.java 250
+    // CMD meth SysCls "io" readTxt: "Read a text file as one big Str." TYPE Pro NAME readTxt PARAMS {Terp terp} { String filename}
+    // CLS SysCls GROUP "io" METH readTxt: REMARK "Read a text file as one big Str."
+
+    new JavaMeth(terp.wrap.clsSysCls, "readTxt:", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+        Cls self = terp.wrap.clsSysCls;
+        Str a = (Str) args[0];
+        return Sys.readTxt (terp,a.str);
+      }
+    };
+
+    // CMD meth SysCls "io" writeTxt:value: "Write a text file as one big Str." TYPE void NAME writeTxt PARAMS {Terp terp} { String filename} { String content}
+    // CLS SysCls GROUP "io" METH writeTxt:value: REMARK "Write a text file as one big Str."
+
+    new JavaMeth(terp.wrap.clsSysCls, "writeTxt:value:", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+        Cls self = terp.wrap.clsSysCls;
+        Str a = (Str) args[0];
+        Str b = (Str) args[1];
+        Sys.writeTxt (terp,a.str, b.str);
+        return self;
+      }
+    };
+
+    // CMD meth SysCls "io" appendTxt:value:  "Append a text file as one big Str." TYPE void NAME appendTxt PARAMS {Terp terp} { String filename} { String content}
+    // CLS SysCls GROUP "io" METH appendTxt:value: REMARK "Append a text file as one big Str."
+
+    new JavaMeth(terp.wrap.clsSysCls, "appendTxt:value:", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+        Cls self = terp.wrap.clsSysCls;
+        Str a = (Str) args[0];
+        Str b = (Str) args[1];
+        Sys.appendTxt (terp,a.str, b.str);
+        return self;
+      }
+    };
+
+    // CMD meth SysCls "io" pull: "Pull a file from the Web." TYPE String NAME pull PARAMS {Terp terp} { String filename}
+    // CLS SysCls GROUP "io" METH pull: REMARK "Pull a file from the Web."
+
+    new JavaMeth(terp.wrap.clsSysCls, "pull:", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+        Cls self = terp.wrap.clsSysCls;
+        Str a = (Str) args[0];
+        String z = Sys.pull (terp,a.str);
+        return (z == null) ? terp.instNil : terp.newStr(z);
+      }
+    };
+
+    // CMD meth SysCls "io" push: "Push a file to the Web." TYPE void NAME push PARAMS {Terp terp} { String filename} { String content}
+    // CLS SysCls GROUP "io" METH push: REMARK "Push a file to the Web."
+
+    new JavaMeth(terp.wrap.clsSysCls, "push:", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+        Cls self = terp.wrap.clsSysCls;
+        Str a = (Str) args[0];
+        Str b = (Str) args[1];
+        Sys.push (terp,a.str, b.str);
+        return self;
+      }
+    };
+
hunk ./terse-vm/src/terse/vm/Wrap.java 317
+        Cls self = terp.wrap.clsSysCls;
hunk ./terse-vm/src/terse/vm/Wrap.java 329
+        Cls self = terp.wrap.clsSysCls;
hunk ./terse-vm/src/terse/vm/Wrap.java 404
-    // CMD meth Num "access" chr "covert integer to single-char Str with that unicode codepoint" TYPE String NAME chr PARAMS 
+    // CMD meth Num "access" chr  "covert integer to single-char Str with that unicode codepoint" TYPE String NAME chr PARAMS 
hunk ./terse-vm/src/terse/vm/Wrap.java 579
-    // CMD meth Str "access" ord "unicode codepoint number of first char in Str" TYPE int NAME ord PARAMS 
+    // CMD meth Str "access" ord  "unicode codepoint number of first char in Str" TYPE int NAME ord PARAMS 
hunk ./terse-vm/src/terse/vm/Wrap.java 788
+    // CMD meth Cls "access" allMeths TYPE Dict NAME allMeths PARAMS 
+    // CLS Cls GROUP "access" METH allMeths REMARK ""
+
+    new JavaMeth(terp.wrap.clsCls, "allMeths", "") {
+      public Pro apply(Frame frame, Pro r, Pro[] args) {
+      Cls self = (Cls) r;
+        return self.allMeths ();
+      }
+    };
+
hunk ./terse-vm/src/terse/vm/Wrap.java 1151
+    this.clsClsCls = terp.clss.get("clscls");
+    if (this.clsClsCls == null) {
+      this.clsClsCls = new Cls(terp.tMetaclsCls, terp, "ClsCls", this.clsObjCls);
+    }
+    this.clsCls      = terp.clss.get("cls");
+    if (this.clsCls == null) {
+      this.clsCls = new Cls(this.clsClsCls, terp, "Cls", this.clsObj);
+    }
+          
hunk ./terse-vm/src/terse/vm/Wrap.java 1303
+  public Cls clsClsCls;
+  public Cls clsCls;
+        
hunk ./terse-vm/src/terse/vm/wrap.tcl 1
-
-#CMD meth Vec "access" len "return length of the Vec" TYPE Num NAME _len PARAMS 
-#CMD meth Vec "access" at: "get element at index a, modulo length of Vec" TYPE Pro NAME at_ PARAMS {Num a}
-#CMD meth Vec "access" at:put:  "put element b at given a, modulo length of Vec" TYPE void NAME at_put_ PARAMS {Num a} { Pro b}
-#CMD meth Vec "access" append:,ap: "add new element ato end of Vec" TYPE void NAME append_ PARAMS {Pro a}
-
-
-#new JavaMeth(terp.tObj, "equals:", "") {
-#  public Obj apply(Frame f, Pro r, Pro[] args) {
-#    assert args.length == 1;
-#    return r.equals(args[0]) ? terp.instTrue : terp.instFalse;
-#  }
-#};
-
-
hunk ./terse-vm/src/terse/vm/wrap.tcl 37
-        #gets $f line3
-        #gets $f line4
-        #set decl "$line2 $line3 $line4"
hunk ./terse-vm/src/terse/vm/wrap.tcl 42
-	   # puts "new JavaMeth(terp.t$cls, \"$kw0\", \"$kw1\"# #"
hunk ./terse-vm/src/terse/vm/wrap.tcl 44
-	   if [string match *Cls $cls] {
+	   if [string match {[A-Za-z_]*Cls} $cls] {
hunk ./terse-vm/src/terse/vm/wrap.tcl 46
+	     puts "        Cls self = terp.wrap.cls$cls;"