static L websMadeByProgram(S progID) { ret websMadeByProgram(progID, null); } static L websMadeByProgram(S progID, Map furtherInfoMap) { if (hasMultipleCores()) ret websMadeByProgram_parallel(progID, furtherInfoMap); new L webs; // TODO: clean up file handle in case of error IterableIterator l = scanLog_unstructure_iterator(progID, "webs-made.txt"); S src = progID; for (SoftwareMadeWeb o : l) pcall { Web web = o.web; if (web == null) web = (Web) unstructure(o.structure); if (web != null) { webs.add(web_intern(web_setSourceIfEmpty(web, src))); if (o.furtherInfo != null) furtherInfoMap.put(web, o.furtherInfo); } ret webs; }