/**
  * Lookup a Software product and return it or return a new one if not found.
  *
  * @param name the name of the software product to lookup
  * @return a new or existing Software product associated with this Company
  */
 public Software lookupOrCreateSoftware(String name) {
   Software s = (Software) lnkSoftware.get(name);
   if (s == null) {
     s = new Software(name);
     lnkSoftware.put(s.getName(), s);
   }
   return s;
 }
 protected static boolean reportError(
     final Electronics me,
     final Software controlI,
     final MOB mob,
     final String literalMessage,
     final String controlMessage) {
   if ((mob != null)
       && (mob.location() == CMLib.map().roomLocation(me))
       && (literalMessage != null)) mob.tell(literalMessage);
   if (controlMessage != null) {
     if (controlI != null) controlI.addScreenMessage(controlMessage);
     else if ((mob != null) && (me != null))
       mob.tell(CMLib.lang().L("A panel on @x1 reports '@x2'.", me.name(mob), controlMessage));
   }
   return false;
 }