Example #1
0
int main(int argc, char **argv) 
{
     scheme sc;
     FILE *fin;
     char *file_name = INITFILE;
     int isfile = 1;
     
     if (argc == 1) {
          printf(BANNER);
     }

     if (argc == 2 && strcmp(argv[1], "-?") == 0) {
          usage();

          return 1;
     }

     if (!scheme_init(&sc)) {
          fprintf(stderr, "Could not initialize!\n");

          return 2;
     }

     scheme_set_input_port_file(&sc, stdin);
     scheme_set_output_port_file(&sc, stdout);

#if USE_DL
     scheme_define(&sc, sc.global_env, 
                   mk_symbol(&sc, "load-extension"), 
                   mk_foreign_func(&sc, scm_load_ext));
#endif

     argv++;

     if (access(file_name, 0) != 0) {
          char *p = getenv("TINYSCHEMEINIT");

          if (p != 0) {
               file_name = p;
          }
     }

     do {
          if (strcmp(file_name, "-") == 0) {
               fin = stdin;
          } else if (strcmp(file_name, "-1") == 0 || 
                     strcmp(file_name, "-c") == 0) {
               pointer args = sc.NIL;

               isfile = file_name[1] == '1';
               file_name = *argv++;

               if (strcmp(file_name, "-") == 0) {
                    fin = stdin;
               } else if (isfile) {
                    fin = fopen(file_name, "r");
               }

               for (; *argv; argv++) {
                    pointer value = mk_string(&sc, *argv);

                    args = cons(&sc, value, args);
               }

               args = reverse_in_place(&sc, sc.NIL, args);
               scheme_define(&sc, sc.global_env, 
                             mk_symbol(&sc, "*args*"), args);
               
          } else {
               fin = fopen(file_name, "r");
          }

          if (isfile && fin == 0) {
               fprintf(stderr, "Could not open file %s\n", file_name);
          } else {
               if (isfile) {
                    scheme_load_named_file(&sc, fin, file_name);
               } else {
                    scheme_load_string(&sc, file_name);
               }

               if (!isfile || fin != stdin) {
                    if (sc.retcode != 0) {
                         fprintf(stderr, "Errors encountered reading %s\n", file_name);
                    }

                    if (isfile) {
                         fclose(fin);
                    }
               }
          }

          file_name = *argv++;

     } while (file_name != 0);

     if (argc == 1) {
          scheme_load_named_file(&sc, stdin, 0);
     }

     scheme_deinit(&sc);
     
     return sc.retcode;
}
ShellService::ShellService()
  : d(new Impl)
{
  if (d->m_Scheme == nullptr)
  {
    throw std::runtime_error("Could not initialize Scheme interpreter");
  }
  scheme_set_output_port_file(d->m_Scheme, stdout);

  BundleResource schemeInitRes = GetBundleContext().GetBundle().GetResource("tinyscheme/init.scm");
  if (schemeInitRes)
  {
    this->LoadSchemeResource(schemeInitRes);
  }
  else
  {
    std::cerr << "Scheme file init.scm not found";
  }

  std::vector<BundleResource> schemeResources = GetBundleContext().GetBundle().FindResources("/", "*.scm", false);
  for (std::vector<BundleResource>::iterator iter = schemeResources.begin(),
       iterEnd = schemeResources.end(); iter != iterEnd; ++iter)
  {
    if (*iter)
    {
      this->LoadSchemeResource(*iter);
    }
  }

  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-bundle-ids"), mk_foreign_func(d->m_Scheme, us_bundle_ids));
  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-bundle-info"), mk_foreign_func(d->m_Scheme, us_bundle_info));
  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-display-bundle-info"), mk_foreign_func(d->m_Scheme, us_display_bundle_info));
  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-bundle-start"), mk_foreign_func(d->m_Scheme, us_bundle_start));
  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-bundle-stop"), mk_foreign_func(d->m_Scheme, us_bundle_stop));
  scheme_define(d->m_Scheme, d->m_Scheme->global_env, mk_symbol(d->m_Scheme, "us-install"), mk_foreign_func(d->m_Scheme, us_install));
}
Example #3
0
File: plugin.c Project: aure/Sporth
void init_plugin(scheme *sc) 
{
    scheme_define(sc, sc->global_env, 
        mk_symbol(sc, "plugin"), 
        mk_foreign_func(sc, plugin_function));
}