private static List loadDatabase() { InStream input = null; List quantityNames = new List(Sys.StrType); try { // parse etc/sys/units.fog as big serialized list which contains // lists for each quantity (first item being the name) String path = "etc/sys/units.txt"; input = Env.cur().findFile(path).@in(); // parse each line string curQuantityName = null; List curQuantityList = null; string line; while ((line = input.readLine()) != null) { // skip comment and blank lines line = line.Trim(); if (line.StartsWith("//") || line.Length == 0) { continue; } // quanity sections delimited as "-- name (dim)" if (line.StartsWith("--")) { if (curQuantityName != null) { m_quantities[curQuantityName] = curQuantityList.toImmutable(); } curQuantityName = line.Substring(2, line.IndexOf('(') - 2).Trim(); curQuantityList = new List(Sys.UnitType); quantityNames.add(curQuantityName); continue; } // must be a unit try { Unit unit = Unit.define(line); curQuantityList.add(unit); } catch (Exception e) { System.Console.WriteLine("WARNING: Init unit in etc/sys/units.txt: " + line); System.Console.WriteLine(" " + e); } } m_quantities[curQuantityName] = curQuantityList.toImmutable(); } catch (Exception e) { try { input.close(); } catch (Exception) {} System.Console.WriteLine("WARNING: Cannot load lib/units.txt"); Err.dumpStack(e); } return((List)quantityNames.toImmutable()); }