Index: lang/javascript/blosxom.rhino/blosxom.rhino.js
===================================================================
--- lang/javascript/blosxom.rhino/blosxom.rhino.js (revision 3053)
+++ lang/javascript/blosxom.rhino/blosxom.rhino.js (revision 3055)
@@ -25,6 +25,35 @@
 			return b.datetime.valueOf() - a.datetime.valueOf();
 		});
+
+		var path_info = this.getenv("PATH_INFO") || "/intro";
+		if (path_info.match(RegExp("^/(\\d{4})(?:/(\\d\\d)(?:/(\\d\\d))?)?"))) {
+			var year = +RegExp.$1, month = RegExp.$2 - 1, day = +RegExp.$3;
+			entries = entries.filter(function (i) {
+				return [
+					{k:"getFullYear",v:year},
+					{k:"getMonth", v:month},
+					{k:"getDate",v:day}
+				].every(function (j) {
+					// p([j.k, i.datetime[j.k](), j.v]);
+					return (j.v <= 0) || i.datetime[j.k]() == j.v
+				});
+			});
+		} else {
+			try {
+				entries = entries.filter(function (i) {
+					if (i.name == path_info) throw ["only-match", i];
+					return RegExp("^"+path_info).test(i.name);
+				});
+			} catch (e) {
+				if (e[0] != "only-match") throw e;
+				// only match
+				entries = [e[1]];
+			}
+		}
+
+
 		var template = new EJS(this._readLines("template.html").join("\n"));
-		// p(entries);
+//		p(entries);
+//		return;
 
 		System.out.println(template.run({
@@ -83,5 +112,5 @@
 
 	getenv : function (name) {
-		return String(System.getenv(name));
+		return String(System.getenv(name) || "");
 	},
 };
@@ -114,5 +143,5 @@
 
 new BlosxomRhino({
-	title    : "Blosxo.Rhino!",
+	title    : "Blosxom.Rhino!",
 	data_dir : "data",
 }).run();
