private boolean processURL(URL url, String baseDir, StatusWindow status) throws IOException {
   if (processedLinks.contains(url)) {
     return false;
   } else {
     processedLinks.add(url);
   }
   URLConnection connection = url.openConnection();
   InputStream in = new BufferedInputStream(connection.getInputStream());
   ArrayList list = processPage(in, baseDir, url);
   if ((status != null) && (list.size() > 0)) {
     status.setMaximum(list.size());
   }
   for (int i = 0; i < list.size(); i++) {
     if (status != null) {
       status.setMessage(Utils.trimFileName(list.get(i).toString(), 40), i);
     }
     if ((!((String) list.get(i)).startsWith("RUN"))
         && (!((String) list.get(i)).startsWith("SAVE"))
         && (!((String) list.get(i)).startsWith("LOAD"))) {
       processURL(
           new URL(url.getProtocol(), url.getHost(), url.getPort(), (String) list.get(i)),
           baseDir,
           status);
     }
   }
   in.close();
   return true;
 }
 /**
  * Scans the html string and checks for <A HREF= > tags, then adds them to a ArrayList and returns
  * the modified html string.
  */
 private String checkForLinks(String htmlStr, ArrayList urlList) {
   String STARTTAG = "<A HREF=\"";
   String ENDTAG = "\">";
   String urlString;
   int startTag = 0;
   int endTag = 0;
   while ((startTag != -1) && (endTag != -1)) {
     startTag = htmlStr.toUpperCase().indexOf(STARTTAG, endTag);
     endTag = htmlStr.indexOf(ENDTAG, startTag);
     if ((startTag != -1) && (endTag != -1)) {
       urlString = htmlStr.substring(startTag + STARTTAG.length(), endTag);
       urlList.add(urlString);
       // now nicify this link
       StringBuffer htmlStrBuffer = new StringBuffer(htmlStr);
       htmlStrBuffer.replace(startTag + STARTTAG.length(), endTag, niceifyLink(urlString));
       htmlStr = htmlStrBuffer.toString();
       endTag = htmlStr.indexOf(ENDTAG, startTag) + ENDTAG.length();
     }
   }
   return htmlStr;
 }