Exemplo n.º 1
0
sl_def(t_main, void)
{
  gfx_init();
  gfx_resize(8, 8);

  unsigned long x;
  for (x = 0; x < 64; ++x)
    gfx_fb_set(x, ((x + x/8)%2) ? 0xffffff : 0);

  gfx_dump(0, 1, 0, 0);
  gfx_close();
}
Exemplo n.º 2
0
int
main (int    argc,
      char **argv)
{
  BReceiver        *receiver;
  BTheme           *theme;
  GError           *error = NULL;
  gchar            *theme_name   = NULL;
  gchar            *proxy_host   = NULL;
  gint              proxy_port   = B_HEARTBEAT_PORT;
  gint              bml_port     = MCU_LISTENER_PORT;
  gboolean          bml_port_set = FALSE;
  gboolean          verbose      = FALSE;
  gint              c;

  g_printerr ("blinkensim version " VERSION "\n");

  if (!gfx_init (&argc, &argv, &error))
    {
      g_printerr ("%s\n", error->message);
      return EXIT_FAILURE;
    }

  b_init ();

#ifdef HAVE_GETOPT_LONG
  while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0)
#else
  while ((c = getopt (argc, argv, option_str)) >= 0)
#endif
    {
      switch (c)
        {
        case 'l':
          g_print ("\nAvailable themes:\n");
          b_themes_foreach_theme (NULL, (GHFunc) print_theme_info, NULL);
          g_print ("\n");
          return EXIT_SUCCESS;

        case 'p':
          if (b_parse_int (optarg, &bml_port) && bml_port > 0)
            {
              bml_port_set = TRUE;
            }
          else
            {
              g_printerr ("Invalid argument (port)\n");
              return EXIT_FAILURE;
            }
          break;

        case 'v':
          verbose = TRUE;
          break;

        case '?':
          usage (argv[0]);
          return EXIT_SUCCESS;

        case 'V':
          g_printerr ("blinkensim (version %s)\n", PACKAGE, VERSION);
          return EXIT_SUCCESS;

        default:
          usage (argv[0]);
          return EXIT_FAILURE;
        }
    }

  if (optind < argc)
    {
      theme_name = argv[optind];
      optind++;
    }
  else
    {
      usage (argv[0]);
      return EXIT_FAILURE;
    }

  if (optind < argc)
    {
      gchar *arg   = argv[optind];
      gchar *colon = strrchr (arg, ':');

      if (colon)
        {
          b_parse_int (colon + 1, &proxy_port);
          *colon = '\0';
        }

      proxy_host = arg;
    }

  if (g_file_test (theme_name, G_FILE_TEST_IS_REGULAR))
    {
      theme = b_theme_new_from_file (theme_name, TRUE, &error);
      if (!theme)
        {
          g_printerr ("Error opening '%s': %s\n", theme_name, error->message);
          return EXIT_FAILURE;
        }
    }
  else
    {
      theme = b_themes_lookup_theme (theme_name, NULL, &error);
      if (!theme)
        {
          g_printerr ("\n%s\n", error->message);
          g_printerr ("Fix your spelling or try setting the "
                      "B_THEME_PATH environment variable.\n\n");
          g_printerr ("Use '%s --list' to get a list of available themes.\n",
                      argv[0]);
          return EXIT_FAILURE;
        }
      if (!b_theme_load (theme, &error))
        {
          g_printerr ("Error loading theme '%s': %s\n",
                      b_object_get_name (B_OBJECT (theme)), error->message);
          return EXIT_FAILURE;
        }
    }

  if (verbose)
    g_print ("Using theme '%s' (%dx%d, %d levels) at size %dx%d\n",
             b_object_get_name (B_OBJECT (theme)),
             theme->columns, theme->rows, theme->maxval + 1,
             theme->width, theme->height);

  setup_lut (theme);

  loop = g_main_loop_new (NULL, FALSE);

  view = gfx_view_new (theme, loop, &error);

  if (!view)
    {
      g_printerr ("%s\n", error->message);
      gfx_close ();
      return EXIT_FAILURE;
    }

  g_object_add_weak_pointer (view, (gpointer *) &view);

  if (proxy_host)
    {
      BProxyClient *client;

      if (verbose)
        g_print ("Requesting stream from blinkenproxy at %s:%d\n",
                 proxy_host, proxy_port);

      client = b_proxy_client_new (proxy_host, proxy_port,
                                   bml_port_set ? bml_port : -1,
                                   frame_callback, theme,
                                   &error);
      if (! client)
        {
          g_printerr ("Couldn't setup proxy connection: %s\n", error->message);
          return EXIT_FAILURE;
        }

      b_proxy_client_send_heartbeat (client);

      g_timeout_add (B_HEARTBEAT_INTERVAL,
                     (GSourceFunc) b_proxy_client_send_heartbeat, client);

      receiver = B_RECEIVER (client);
    }
  else
    {
      receiver = b_receiver_new (frame_callback, theme);

      b_receiver_listen (receiver, bml_port);

      if (verbose)
        g_print ("Listening on port %i for Blinkenlights packets\n", bml_port);
    }

#ifndef G_OS_WIN32
  {
    struct sigaction  sa;

    /* handle SIGINT */
    sigfillset (&sa.sa_mask);
    sa.sa_handler = sigint_handler;
    sa.sa_flags   = SA_RESTART;
    sigaction (SIGINT, &sa, NULL);
  }
#endif

  g_main_loop_run (loop);

  g_main_loop_unref (loop);

  g_object_unref (receiver);
  g_object_unref (theme);

  gfx_close ();

  return EXIT_SUCCESS;
}
Exemplo n.º 3
0
int
main(
  int		argc,			/* arg count */
  char	      * argv[]			/* arg vector */
){
  static char * context = "main(life)";
  bool2D	world;			/* world to evolve */
  int		nr, nc;			/* matrix size */
  int		iters;			/* number of iterations */
  char	      * infn = NULL;		/* input file name */
  char	      * outfn = NULL;		/* output file name */
  int		argd = 1;		/* argument index */
  void	      * args[5];

  /* arguments */
#if NUMA
  MAIN_INITENV(,32000000)
  BARINIT(GlobalBar);
#endif
  while (argd < argc){
    CHECK(argv[argd][0] == '-',
	  fail(context, "bad argument", "index", "%d", argd, NULL));
    switch(argv[argd][1]){
     case 'L' :
      iters = arg_int(context, argc, argv, argd+1, argv[argd]);
      argd += 2;
      break;
#if GRAPHICS
     case 'g' :
      gfx_open(app_life, arg_gfxCtrl(context, argc, argv, argd+1, argv[argd]));
      argd += 2;
      break;
#endif
#if PARALLEL
     case 'p' :
      DataDist = arg_dataDist(context, argc, argv, argd+1, argv[argd]);
      ParWidth = arg_int(context, argc, argv, argd+2, argv[argd]);
      argd += 3;
      break;
#endif
     case 'i' :
      infn = arg_str(context, argc, argv, argd+1, argv[argd]);
      argd += 2;
      break;
     case 'o' :
      outfn = arg_str(context, argc, argv, argd+1, argv[argd]);
      argd += 2;
      break;
     case 'u' :
      io_init(FALSE);
      argd += 1;
      break;
     default :
      fail(context, "unknown flag", "flag", "%s", argv[argd], NULL);
      break;
    }
  }

  /* setup */
  sch_init(DataDist);
  CHECK(0 < iters,
	fail(context, "non-positive number of iterations",
	     "number of iterations", "%d", iters, NULL));
  io_rdBool2D(context, infn, world, &nr, &nc);

  /* run */
  TP_any(args, 0, world);
  TP_any(args, 1, nr);
  TP_any(args, 2, nc);
  TP_any(args, 3, iters);
  thr_grp(life_thr, args);

  /* takedown */
  io_wrBool2D(context, outfn, world, nr, nc);

#if GRAPHICS
  gfx_close();
#endif
#if IEEE
  ieee_retrospective(stderr);
#endif
#if NUMA
  BARFREE(GlobalBar);
  MAIN_END;
#endif

  return 0;
}
Exemplo n.º 4
0
MAIN_ENV
#endif
#include "specific.h"

int
main(
  int		argc,			/* arg count */
  char	      * argv[]			/* arg vector */
){
  static char * context = "main(winnow)";
  int2D		matrix;			/* matrix of values */
  bool2D	mask;			/* mask on values */
  int		nr, nc, nrM, ncM;	/* sizes */
  pt1D		pt;			/* resulting point vector */
  int		npt;			/* number of points to keep */
  char	      * infnMat = NULL;		/* input matrix file name */
  char	      * infnMask = NULL;	/* input mask file name */
  char	      * outfn = NULL;		/* output file name */
  int		argd = 1;		/* argument index */

  /* arguments */
#if NUMA
  MAIN_INITENV(,32000000)
#endif
  while (argd < argc){
    CHECK(argv[argd][0] == '-',
	  fail(context, "bad argument", "index", "%d", argd, NULL));
    switch(argv[argd][1]){
     case 'N' :
      npt = arg_int(context, argc, argv, argd+1, argv[argd]);
      argd += 2;
      break;
#if GRAPHICS
     case 'g' :
      gfx_open(app_winnow, arg_gfxCtrl(context, argc, argv, argd+1, argv[argd]));
      argd += 2;
      break;
#endif
#if MIMD
     case 'p' :
      DataDist = arg_dataDist(context, argc, argv, argd+1, argv[argd]);
      ParWidth = arg_int(context, argc, argv, argd+2, argv[argd]);
      argd += 3;
      break;
#endif
     case 'i' :
      infnMat = arg_str(context, argc, argv, argd+1, argv[argd]);
      infnMask = arg_str(context, argc, argv, argd+2, argv[argd]);
      argd += 3;
      break;
     case 'o' :
      outfn = arg_str(context, argc, argv, argd+1, argv[argd]);
      argd += 2;
      break;
     case 'u' :
      io_init(FALSE);
      argd += 1;
      break;
     default :
      fail(context, "unknown flag", "flag", "%s", argv[argd], NULL);
      break;
    }
  }

  /* setup */
#if MIMD
  sch_init(DataDist);
#endif
  CHECK(npt > 0,
	fail(context, "non-positive number of points requested",
	     "number of points", "%d", npt, NULL));
  io_rdInt2D(context, infnMat, matrix, &nr, &nc);
  io_rdBool2D(context, infnMask, mask, &nrM, &ncM);
  CHECK((nr == nrM) && (nc == ncM),
	fail(context, "matrix/mask size mismatch",
	     "matrix file", "%s", infnMat,
	     "mask file", "%s", infnMask, NULL));

  /* run */
  winnow(matrix, mask, nr, nc, pt, npt);

  /* takedown */
  io_wrPt1D(context, outfn, pt, npt);

#if GRAPHICS
  gfx_close();
#endif
#if IEEE
  ieee_retrospective(stderr);
#endif
#if NUMA
  MAIN_END;
#endif

  return 0;
}