home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / c / lpc05b.zip / CPARSER.C < prev    next >
C/C++ Source or Header  |  1992-05-22  |  2KB  |  123 lines

  1. /*
  2. *-----------------------------------------------------------------------------
  3. *    file:    cparser.c
  4. *    desc:    simple command parser
  5. *    by:    patrick ko
  6. *    date:    22 aug 91
  7. *    revi:    26 feb 92 ; response file feature
  8. *-----------------------------------------------------------------------------
  9. */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12.  
  13. #ifdef __TURBOC__
  14. #include <mem.h>
  15. #include <ctype.h>
  16. #endif
  17.  
  18. #include "cparser.h"
  19.  
  20. CMDTBL    cmdtbl[] =
  21.     {
  22.     {CMD_LPCORDER,    "-order="},
  23.     {CMD_LPCWSIZE,    "-wsize="},
  24.     {CMD_LPCWOVER,    "-wover="},
  25.     {CMD_DTYPEU8,    "-dtype=ulaw8"},
  26.     {CMD_DTYPEP16,    "-dtype=pcm16"},
  27.     {CMD_MSGQIN,    "-msgqin="},
  28.     {CMD_MSGQOUT,    "-msgqout="},
  29.     {CMD_STDOUT,    "-stdout"},
  30.     {CMD_NOACFILE,    "-noacfile"},
  31.     {CMD_AUTOCOR,    "-autocor"},
  32.     {CMD_COVAR,    "-covar"},
  33.     {CMD_CEPSTRUM,    "-cepstrum"},
  34.     {CMD_PARCOR,    "-parcor"},
  35.     {CMD_COMMENT,    "//"}
  36.     };
  37.  
  38. static int    cmdtblsize = 0;
  39. static int    cmdargc = 0;
  40. static int    cmdcnt = 0;
  41. static char    **cmdargv;
  42. static FILE     *frsp = NULL;
  43. int cmdsearch( str, rest )
  44. char    *str;
  45. char    *rest;
  46. {
  47.     int    i, l;
  48.     
  49.     for (i=0; i<cmdtblsize; i++)
  50.         {
  51.         l = strlen( cmdtbl[i].cmdstr );
  52.         if (!memcmp(str, cmdtbl[i].cmdstr, l))
  53.             {
  54.             strcpy( rest, str + l );
  55.             return (cmdtbl[i].cmdno);
  56.             }
  57.         }
  58.     strcpy( rest, str );
  59.     return (CMD_NULL);
  60. }
  61.  
  62. int cmdinit( argc, argv )
  63. int    argc;
  64. char    **argv;
  65. {
  66.     cmdtblsize = sizeof(cmdtbl) / sizeof(cmdtbl[0]);
  67.     cmdargc = argc;
  68.     cmdargv = argv;
  69. }
  70.  
  71. int cmdget( rest )
  72. char     *rest;
  73. {
  74.     int    i, j;
  75.     char    nstr[129];
  76.     char    *rspname;
  77.  
  78.     if ((cmdcnt >= cmdargc - 1) && (frsp == NULL))
  79.         {
  80.         return (-1);
  81.         }
  82.     else
  83.         {
  84.         /* test for response file */
  85.         if (frsp == NULL)
  86.             {
  87.             rspname = *(cmdargv + cmdcnt + 1);
  88.             if (*rspname == '@')
  89.                 {
  90.                 rspname++;
  91.                 cmdcnt++;
  92.                 if ((frsp = fopen(rspname, "r")) == NULL)
  93.                 {
  94.                 fprintf(stderr, "rsp file open fails\n");
  95.                 exit (1);
  96.                 }
  97.                 }
  98.             }
  99.         if (frsp != NULL)
  100.             {
  101.             *nstr = 0;
  102.             for (;!strlen(nstr)&&!feof(frsp);)
  103.                 {
  104.                 fgets(nstr, 128, frsp);
  105.                 for (i=j=0; i<strlen(nstr); i++)
  106.                     {
  107.                     if (!isspace(nstr[i]))
  108.                         {
  109.                         nstr[j++] = nstr[i];
  110.                         }
  111.                     }
  112.                 nstr[j] = 0;
  113.                 }
  114.             if (strlen(nstr))
  115.                 return (cmdsearch( nstr, rest ));
  116.             fclose(frsp);
  117.              frsp = NULL;
  118.             if (cmdcnt >= cmdargc - 1) return (-1);
  119.             }    
  120.         return (cmdsearch( *(cmdargv + ++cmdcnt), rest ));
  121.         }
  122. }
  123.