Archive arFrString(String name) { static Table tbl = 0; Archive ar; FileName fn; arDEBUG(dbOut, "Looking for archive \"%s\"\n", name); if (tbl == 0) tbl = tblNew((TblHashFun) strAHash, (TblEqFun) strAEqual); if ((ar = (Archive) tblElt(tbl, (TblKey) name, (TblElt) 0)) != 0) return ar; if ((fn = fileRdFind(libSearchPath(), name, FTYPE_AR_INT)) != 0) ar = arRead(fn); else if (fileIsOpenable((fn = arFileNameFrPath(name)), "r")) { ar = arRead(fn); } else { comsgWarning(NULL, ALDOR_W_CantUseArchive, name); ar = 0; } tblSetElt(tbl, (TblKey) name, (TblElt) ar); return ar; }
static StringList uclExpandLibs(StringList path0, StringList libs, String ext) { StringList res = listNil(String); while (libs != listNil(String)) { String basename = car(libs); StringList path = path0; basename = strConcat("lib", basename); while (path != listNil(String)) { FileName name = fnameNew(car(path), basename, ext); if (fileIsOpenable(name, osIoRdMode)) { res = listCons(String)(fnameUnparse(name), res); break; } path = cdr(path); } if (path == listNil(String)) printf("Warning: %s not found\n", basename); strFree(basename); libs = cdr(libs); } return listNReverse(String)(res); }