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(); }
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; }
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; }
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; }