* @param languageAoptions
   * @return boolean
   */
  public static boolean translateSystem(String systemname, Cons languageAoptions) {
    { Cons options = languageAoptions;
      Keyword language = (Stella.getQuotedTree("((:COMMON-LISP :CPP :JAVA) \"/STELLA\")", "/STELLA").memberP(options.value) ? ((Keyword)(options.value)) : Stella.runningInLanguage());
      PropertyList plist = Stella_Object.vetOptions(((options.value == language) ? options.rest : options), Stella.getQuotedTree("((:TWO-PASS? :FORCE-TRANSLATION? :PRODUCTION-SETTINGS? :DEVELOPMENT-SETTINGS? :LANGUAGE :ACTION) \"/STELLA\")", "/STELLA"));
      boolean twopassP = false;
      boolean forcetranslationP = false;
      boolean productionmodeP = true;

      language = ((Keyword)(plist.lookupWithDefault(Stella.KWD_LANGUAGE, language)));
      plist.insertAt(Stella.KWD_LANGUAGE, language);
      plist.insertAt(Stella.KWD_ACTION, plist.lookupWithDefault(Stella.KWD_ACTION, Stella.KWD_TRANSLATE_SYSTEM));
      { Stella_Object key = null;
        Stella_Object value = null;
        Cons iter000 = plist.thePlist;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest.rest) {
          key = iter000.value;
          value = iter000.rest.value;
          { GeneralizedSymbol testValue000 = ((GeneralizedSymbol)(key));

            if (testValue000 == Stella.KWD_TWO_PASSp) {
              twopassP = Stella_Object.eqlP(value, Stella.TRUE_WRAPPER);
            }
            else if (testValue000 == Stella.KWD_FORCE_TRANSLATIONp) {
              forcetranslationP = Stella_Object.eqlP(value, Stella.TRUE_WRAPPER);
            }
            else if (testValue000 == Stella.KWD_PRODUCTION_SETTINGSp) {
              productionmodeP = Stella_Object.eqlP(value, Stella.TRUE_WRAPPER);
            }
            else if (testValue000 == Stella.KWD_DEVELOPMENT_SETTINGSp) {
              productionmodeP = !Stella_Object.eqlP(value, Stella.TRUE_WRAPPER);
            }
            else {
            }
          }
        }
      }
      { Object old$Translatoroutputlanguage$000 = Stella.$TRANSLATOROUTPUTLANGUAGE$.get();
        Object old$Translationphase$000 = Stella.$TRANSLATIONPHASE$.get();
        Object old$Safety$000 = Stella.$SAFETY$.get();
        Object old$RecyclingEnabledP$000 = Stella.$RECYCLING_ENABLEDp$.get();
        Object old$CurrentStellaFeatures$000 = Stella.$CURRENT_STELLA_FEATURES$.get();
        Object old$CurrentSystemAction$000 = Stella.$CURRENT_SYSTEM_ACTION$.get();

        try {
          Native.setSpecial(Stella.$TRANSLATOROUTPUTLANGUAGE$, ((Keyword)(Stella.$TRANSLATOROUTPUTLANGUAGE$.get())));
          Native.setSpecial(Stella.$TRANSLATIONPHASE$, null);
          Native.setIntSpecial(Stella.$SAFETY$, ((Integer)(Stella.$SAFETY$.get())).intValue());
          Native.setBooleanSpecial(Stella.$RECYCLING_ENABLEDp$, !(language == Stella.KWD_JAVA));
          Native.setSpecial(Stella.$CURRENT_STELLA_FEATURES$, ((List)(Stella.$CURRENT_STELLA_FEATURES$.get())).copy());
          Native.setSpecial(Stella.$CURRENT_SYSTEM_ACTION$, plist.copy());
          if (!Stella.systemLoadedOrStartedUpP(systemname)) {
            twopassP = true;
          }
          Stella.$GENSYM_COUNTER$ = -1;
          Stella.setStellaFeature(Cons.cons(Stella.KWD_TRANSLATE_WITH_COPYRIGHT_HEADER, Cons.cons(Stella.KWD_WARN_ABOUT_MISSING_METHODS, Cons.cons(Stella.KWD_WARN_ABOUT_UNDEFINED_METHODS, Stella.NIL))));
          Stella.unsetStellaFeature(Cons.cons(Stella.KWD_USE_HARDCODED_SYMBOLS, Stella.NIL));
          Keyword.setTranslatorOutputLanguage(language);
          { Object old$Currentsystemdefinition$000 = Stella.$CURRENTSYSTEMDEFINITION$.get();
            Object old$Currentsystemdefinitionsubdirectory$000 = Stella.$CURRENTSYSTEMDEFINITIONSUBDIRECTORY$.get();

            try {
              Native.setSpecial(Stella.$CURRENTSYSTEMDEFINITION$, Stella.getSystemDefinition(systemname));
              Native.setSpecial(Stella.$CURRENTSYSTEMDEFINITIONSUBDIRECTORY$, ((((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get())) != null) ? ((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get())).directory : null));
              if (((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get())) != null) {
                {
                  SystemDefinition.computeOptimizationLevels(((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get())), productionmodeP);
                  { Cons files = Cons.filesPlusSystemStartup(SystemDefinition.systemDefinitionSourceFiles(((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get()))));
                    boolean translatedsomethingP = false;

                    if (forcetranslationP ||
                        Stella.systemNeedsTranslationP(systemname, language)) {
                      SystemDefinition.createSystemStartupFile(((SystemDefinition)(Stella.$CURRENTSYSTEMDEFINITION$.get())));
                      translatedsomethingP = Cons.helpTranslateSystem(files, twopassP, forcetranslationP);
                    }
                    Keyword.transferNativeSystemFiles(language);
                    Keyword.transferDataFiles(language);
                    return (translatedsomethingP);
                  }
                }
              }
              else {
                {
                  Stella.STANDARD_WARNING.nativeStream.println("Warning: Can't find a system named `" + systemname + "'");
                  Stella.STANDARD_WARNING.nativeStream.println();
                }
;
              }

            } finally {
              Stella.$CURRENTSYSTEMDEFINITIONSUBDIRECTORY$.set(old$Currentsystemdefinitionsubdirectory$000);
              Stella.$CURRENTSYSTEMDEFINITION$.set(old$Currentsystemdefinition$000);
            }
          }
          return (false);

        } finally {
          Stella.$CURRENT_SYSTEM_ACTION$.set(old$CurrentSystemAction$000);
          Stella.$CURRENT_STELLA_FEATURES$.set(old$CurrentStellaFeatures$000);
          Stella.$RECYCLING_ENABLEDp$.set(old$RecyclingEnabledP$000);
          Stella.$SAFETY$.set(old$Safety$000);
          Stella.$TRANSLATIONPHASE$.set(old$Translationphase$000);
          Stella.$TRANSLATOROUTPUTLANGUAGE$.set(old$Translatoroutputlanguage$000);
        }
      }
    }
  }