int main(int argc, char** argv) {
    //argument format <quizname> <question> <answer> <norepeat(Y)>
    srand(time(NULL));
    setCommandArgs(argc, argv);
    if(argc > 1)
    {
        if(strcmp(argv[1], "listquiz") == 0)
        {
            printQuizFiles();
            freeMemory();
            return (EXIT_SUCCESS);
        }
    } 
    selectQuizFile();
    freeMemory();
    return (EXIT_SUCCESS);
}
Exemple #2
0
Command* makeCommand()
{
   char buffer[1024];
   int  i = 0;
   char ch,*ptr;
   printf("%%");fflush(stdout);
   while(i < sizeof(buffer) && (ch = getchar()) != '\n' && ch != EOF) 
      buffer[i++] = ch;      
   
   buffer[i] = 0;   
   ptr = buffer+i-1;
   while(ptr>=buffer && isspace(*ptr)) ptr--,i--;
   *++ptr = 0;
   Command* c = allocCommand(ptr);
   if(ch==EOF) 
      return setCommand(c,exitCMD,"exit");   
   else {
      int mode = R_NONE;
      char input[1024];
      char output[1024];
      *input = *output = 0;
      int len = strlen(buffer);
      int ok = extractRedirect(buffer,&len,&mode,input,output);
      c->_mode = mode;
      c->_input = strdup(input);
      c->_output = strdup(output);
      len = trimString(buffer,len);
      if (ok) {
         char* sc = skipWS(buffer);
         char* ec = cutWord(sc);
         if (strcmp(sc,"cd")==0) {
            char* a0 = skipWS(ec);
            char* a1 = cutWord(a0);
            return setCommand(c,cdCMD,sc);
         } else if (strcmp(sc,"pwd")==0) {
            return setCommand(c,pwdCMD,sc);
         } else if (strcmp(sc,"ln") == 0) {
            char* a0 = skipWS(ec);
            char* a1 = skipWS(cutWord(a0));
            char* a2 = cutWord(a1);
            char* args[2] = {a0,a1};
            return setCommandArgs(setCommand(c,linkCMD,sc),2,args);
         } else if (strcmp(sc,"rm") == 0) {
            char* a0 = skipWS(ec);
            char* a1 = cutWord(a0);
            char* args[1] = {a0};
            return setCommandArgs(setCommand(c,rmCMD,sc),1,args);
         } else if (strcmp(sc,"exit") == 0) {
            return setCommand(c,exitCMD,sc);
         } else {                  
            if (*sc) {
               if (strchr(ec,'|') != NULL) {
                  // This is a pipeline.
                  char*  args[512];
                  Stage* stages[512];
                  int nbs = 0;
                  args[0] = sc;
                  char* arg = skipWS(ec);
                  int nba = 1;
                  setCommand(c,pipelineCMD,"");
                  while(arg && *arg) {
                     char* p = *arg == '|' ? arg : 0;
                     if (p) {
                        *p = 0;
                        addCommandStage(c,allocStage(nba,args));
                        args[0] = arg = skipWS(p+1);
                        arg = cutWord(arg);
                        nba = 1;                     
                     } else {
                        args[nba++] = arg;
                        arg = skipWS(cutWord(arg));
                     }
                  }
                  return addCommandStage(c,allocStage(nba,args));
               } else {
                  char*  args[1024];
                  args[0] = sc;
                  char* arg = ec;
                  int nba = 1;
                  while(arg && *arg) {
                     args[nba++] = arg;
                     arg = skipWS(cutWord(arg));
                     assert(nba < 1024);
                  }
                  return setCommandArgs(setCommand(c,basicCMD,args[0]),nba,args);
               }
            }
         }
      }
      return c;
   }
   
}