home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 1: Collection A / 17Bit_Collection_A.iso / files / 290.dms / 290.adf / quickrif.source / climain.c < prev    next >
C/C++ Source or Header  |  1989-01-31  |  3KB  |  133 lines

  1.  
  2. /* climain.c - this file handles the flow of control if playriff was
  3.    launched with some parameters from the CLI.  The next_token/pushback_token
  4.    formalism is kind of overkill if you're just reading the command line,
  5.    but thinking of expanding it soon to read from a file or maybe do wild
  6.    card expansions. */
  7.  
  8. #include <exec/types.h>
  9. #include <graphics/gfx.h>
  10. #include <intuition/intuition.h>
  11. #include <functions.h>
  12. #include <ctype.h>
  13. #include "jiff.h"
  14. #include "vcomp.h"
  15. #include "playriff.h"
  16.  
  17.  
  18. /* cl_count & cl_names are basically local copies of argc, argv as in
  19.    main(argc, argv) */
  20. int cl_count;
  21. char **cl_names;
  22.  
  23. int cl_ix;    /* index into cl_names */
  24. char *reuse_clname;    /* if want to use a name over again... */
  25.  
  26. /* pushback_token() - reuse a token from the input stream */
  27. pushback_token(token)
  28. char *token;
  29. {
  30. reuse_clname = token;
  31. }
  32.  
  33. /* next_token() - grab next token from input stream (in this case
  34.    the command line, NULL at end of stream */
  35. char *
  36. next_token()
  37. {
  38. register char *n;
  39. register char *ncl;
  40. char c;
  41. static char matched1;
  42.  
  43. if (reuse_clname != NULL)    /* check to see if pushed-back */
  44.     {
  45.     n = reuse_clname;
  46.     reuse_clname = NULL;
  47.     return(n);
  48.     }
  49. if (cl_ix >= cl_count)
  50.     return(NULL);
  51. return(cl_names[cl_ix++]);
  52. }
  53.  
  54.  
  55.  
  56. /* cli_playriff() - basically this guy is what does the stuff if we're
  57.    executed from the cli with any command line arguments. */
  58. cli_playriff(count, names)
  59. int count;
  60. char *names[];
  61. {
  62. int loops;
  63.  
  64. cl_count = count;
  65. cl_names = names;
  66. cl_ix = 1;
  67.  
  68. loops = 1;
  69. for(;;)
  70.     {
  71.     if (( name = next_token()) == NULL)    /* go fetch next argument */
  72.         break;
  73.     if (isdigit(name[0]) )    /* if it's numerical then it's a loop count */
  74.         loops = atoi(name);
  75.     else if (strcmp(name, "+") == 0)    /* an extra + from errors ... skip */
  76.         {
  77.         puts("extra plus");
  78.         }
  79.     else    /* it's a name, so figure it's a file name and go load it */
  80.         {
  81.         printf("loading %s\n", name);
  82.         /* load up head separately so can alloc screen first before
  83.            run out of memory ... */
  84.         if (!load_riff_head() )
  85.             goto loop_again;
  86.         if (!screen_for_rh())
  87.             {
  88.             puts("couldn't open %d by %d by %d screen\n",
  89.                 ns.Width, ns.Height, ns.Depth);
  90.             goto loop_again;
  91.             }
  92.         first_rh = demo_rh;
  93.         strcpy(first_name, name);    /* squirrel away a copy for error msgs */
  94.         load_riff_body();
  95.         if (!fatal_load)    /* assuming loaded one, go check to see if
  96.                             there's any more to append (ie + something),
  97.                             and if so go appending... */
  98.             {
  99.             for (;;)
  100.                 {
  101.                 if ((name = next_token()) == NULL)
  102.                     break;
  103.                 if (strcmp(name, "+") != 0)    /* if not a plus will reuse it*/
  104.                     {
  105.                     pushback_token(name);
  106.                     break;
  107.                     }
  108.                 if ((name = next_token()) == NULL)
  109.                     break;
  110.                 printf("appending %s\n", name);
  111.                 if (load_riff_head())
  112.                     {
  113.                     if (!match_res())
  114.                         continue;
  115.                     load_riff_body();
  116.                     if (fatal_load)
  117.                         {
  118.                         goto loop_again;
  119.                         }
  120.                     }
  121.                 }
  122.             pointeroff();
  123.             play_demo_riff(loops);
  124. loop_again:
  125.             free_demo_riff();
  126.             close_demo_screen();
  127.             }
  128.         }
  129.     }
  130. }
  131.  
  132.  
  133.