!636 !modern main { static S programID; static S searchFor; static int count; psvm { if (args.length == 0) { print("I search for files under the current directory."); print("Syntax: " + programID + " filetosearch"); } searchFor = args[0]; scan("."); if (count == 0) print("No results."); } static void scan(S file) { scan(new File(file)); } static S makeSearchPattern(S pat) { return pat.replace(".", "\\.").replace("*", ".*"); // rough... } static boolean match(S pat, File f) { return Pattern.compile(makeSearchPattern(pat), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(f.getName()).matches(); } static void scan(File f) { if (match(searchFor, f)) { print("Found " + (f.isFile() ? "file" : "dir") + ": " + f.getPath()); ++count; } if (f.isDirectory()) { File[] l = f.listFiles(); if (l != null) for (File x : l) scan(x); } } }