/* f1: this function {{{2 */ void f1(int i) { Edbg(("f1(i=%d)",i)); if(i == 0) f2(); else f3(i); Rdbg(("f1")); }
/** * S'occupe du nettoyage... */ void terminate_program() { Edbg(("terminate_program()")); destroy_cameras(); destroy_display(); Rdbg(("terminate_program")); exit(0); }
/* f3: this function {{{2 */ int f3(int j) { int res; Edbg(("f3(j=%d)",j)); for(res= 1; j; --j) { res*= j; Dprintf((2,"res*= [j=%d] =%d\n",j,res)); } Rdbg(("f3 %d",res)); return res; }
/** * Prints usage */ void print_usage(void) { Edbg(("print_usage()")); printf("Usage: fastereo <file.commands>\n" "\n" "Options:\n" " -h\t\t\tAffiche cet écran\n" " -g\t\t\tAffichage OpenGL\n" " -a <nb_keyframes>\tNombre de keyframes dans l'animation en OpenGL" " (plus la valeur est petite, plus le mouvement est rapide)\n" " -z <zoom>\t\tZoom à appliquer aux images\n" "\n" "Touches au clavier:\n" " ESC\t\t\tQuitter l'application\n" " Z\t\t\tPasser en plein écran ou revenir en mode fenêtré\n" " A\t\t\tAnime la scène\n" " S\t\t\tActive/Désactive les teintes\n" " D\t\t\tAfficher ou non les cartes de profondeurs à la place des images\n" " M\t\t\tChanger de mode d'affichage (points, carrés, triangles)\n" " F1, F2, etc\t\tAfficher ou non les images 1, 2, etc.\n" ); Rdbg(("print_usage")); }
/* f2: this function {{{2 */ void f2(void) { Edbg(("f2()")); f3(3); Rdbg(("f2")); }
/** * Fonction principale * @param argc nombre d'arguments * @param argv tableau d'arguments * @return program exit code */ int main(int argc, char *argv[]) { /* debug trace start */ Edbg(("main(argc=%d, argv=%s)", argc, argv[0])); Initdbg((&argc, argv)); int c; char display_opengl = FALSE; int ret; static struct sigaction act; /* on récupère les options */ while ( (c = getopt(argc, argv, "hga:z:")) >= 0) { switch (c) { case 'h': /* print help */ print_usage(); Rdbg(("main return EXIT_SUCCESS")); return EXIT_SUCCESS; case 'g': /* display in OpenGL */ display_opengl = TRUE; break; case 'z': /* display in OpenGL */ g_zoomim = strtod(optarg, (char **)NULL); break; case 'a': /* nombre de keyframes dans l'animation OpenGL */ g_anim_nb_keyframes = strtol(optarg, (char **)NULL, 10);; break; } } /* il faut le nom du fichier de commandes dans les arguments */ if ((argc-optind) != 1) { print_usage(); Rdbg(("main return EXIT_FAILURE")); return EXIT_FAILURE; } /* on catche le Ctrl-C */ act.sa_handler = terminate_program_catch; sigfillset(&(act.sa_mask)); sigaction(SIGINT, &act, NULL); /* on charge les commandes */ ret = execute_commands(argv[optind]); if (ret != RETURN_SUCCESS) { destroy_cameras(); return EXIT_FAILURE; } /* on vérifie qu'il y a bien au moins 2 caméras chargées */ if (g_cameras.nb < 2) { fprintf(stderr, "Il faut charger au moins 2 caméras!\n"); destroy_cameras(); return EXIT_FAILURE; } /* affichage */ if (TRUE == display_opengl) { /* on utilise atexit car glut ne dit pas quand il quitte le programme * (ce gros malin...) * cf 3.070 http://users.frii.com/martz/oglfaq/glut.htm * update: depuis j'utilise SDL mais je garde quand même atexit... */ atexit(terminate_program); init_display(); start_display(); destroy_display(); } /* nettoyage */ destroy_cameras(); /* debug trace end */ Rdbg(("main EXIT_SUCCESS")); return EXIT_SUCCESS; }