File:  [LON-CAPA] / capa / capa51 / pProj / setdbheader.c
Revision 1.1: download - view: text, annotated - select for diffs
Tue Sep 28 21:26:21 1999 UTC (24 years, 11 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
Initial revision

    1: #include <stdio.h>
    2: #include <ctype.h>
    3: #include <unistd.h>
    4: #include "capaCommon.h"
    5: 
    6: void printUsage(char* progname)
    7: {
    8:   printf("USAGE: %s [-opendate opendate] [-opentime opentime] \n\
    9:            [-duedate duedate]   [-duetime duetime]  \n\
   10:            [-ansdate ansdate]   [-anstime anstime]  \n\
   11:            [-set setnumber] [-dir class-directory] [-h] \n", progname);
   12:   printf("       -h              : prints this message\n");
   13:   printf("       CAPA version %s, %s\n",CAPA_VER,COMPILE_DATE);
   14: }
   15: 
   16: /*stolen from quizzer.funct.c*/
   17: int checkDate(char* date)
   18: { 
   19:   if (date==NULL) goto wrong;
   20:   if (strlen(date)!=8) goto wrong;
   21: 
   22:   switch(date[0]) {
   23:   case '0':
   24:     if (!isdigit(date[1])) goto wrong;
   25:     break;
   26:   case '1':
   27:     if (!(
   28: 	  (date[1]=='0') ||
   29: 	  (date[1]=='1') ||
   30: 	  (date[1]=='2')
   31: 	  )
   32: 	) goto wrong;
   33:     break;
   34:   case '2':
   35:     if (!(
   36: 	  (date[1]=='0') ||
   37: 	  (date[1]=='1') ||
   38: 	  (date[1]=='2') ||
   39: 	  (date[1]=='3') ||
   40: 	  (date[1]=='4')
   41: 	  )
   42: 	) goto wrong;
   43:     break;
   44:   default:
   45:     goto wrong;
   46:     break;
   47:   }
   48:   if (date[2] != '/') goto wrong;
   49:   switch(date[3]) {
   50:   case '0':
   51:   case '1':
   52:   case '2':
   53:     if (!isdigit(date[4])) goto wrong;
   54:     break;
   55:   case '3':
   56:     if (!(
   57: 	  (date[4]=='0') ||
   58: 	  (date[4]=='1') 
   59: 	  )
   60: 	) goto wrong;
   61:     break;
   62:   default:
   63:     goto wrong;
   64:     break;
   65:   }
   66:   if (date[5] != '/') goto wrong;
   67:   if (!isdigit(date[6])) goto wrong;
   68:   if (!isdigit(date[7])) goto wrong;
   69:   goto right;
   70: wrong:
   71:   return 0;
   72: right:
   73:   return 1;
   74: }
   75: 
   76: /* stolen from quizzer.funct.c*/
   77: int checkTime(char* time)
   78: {
   79:   if (time==NULL) goto wrong;
   80:   if (strlen(time)!=5) goto wrong;
   81: 
   82:   switch(time[0]) {
   83:   case '0':
   84:     if (!isdigit(time[1])) goto wrong;
   85:     break;
   86:   case '1':
   87:     if (!(isdigit(time[1])))
   88:       goto wrong;
   89:     break;
   90:   case '2':
   91:     switch(time[1])
   92:       {
   93:       case '0':
   94:       case '1':
   95:       case '2':
   96:       case '3':
   97:       case '4':
   98: 	break;
   99:       default:
  100: 	goto wrong;
  101: 	break;
  102:       }
  103:     break;
  104:   default:
  105:     goto wrong;
  106:     break;
  107:   }
  108:   if (time[2] != ':') goto wrong;
  109:   switch (time[3]) {
  110:   case '0':
  111:   case '1':
  112:   case '2':
  113:   case '3':
  114:   case '4':
  115:   case '5':
  116:     break;
  117:   default:
  118:     goto wrong;
  119:     break;
  120:   }
  121:   if (!isdigit(time[4])) goto wrong;
  122:   goto right;
  123:   
  124: wrong:
  125:   return 0;
  126: right:
  127:   return 1;
  128: }
  129: 
  130: int main(int argc, char** argv) 
  131: {
  132:   char *openDate="01/01/98",*openTime="01/01/98",
  133:     *dueDate="01/01/99",*dueTime="01/01/99",
  134:     *ansDate="01/01/99",*ansTime="01/01/99";
  135:   char *directory=NULL,*class=NULL,cwd[FILE_NAME_LENGTH];
  136:   char *problemWeights;
  137:   char *partialCredit;
  138:   int numQuestions=0,set=1,result,i=0;  
  139:   T_header header;
  140:   T_student student;
  141:   Problem_t *headProblem,*currentProblem;
  142: 
  143:   for(i=1;i<argc-1;i++) {
  144:     if        (0==strcmp(argv[i],"-opendate")  ) { if (checkDate(argv[i+1])) openDate=argv[i+1];
  145:     } else if (0==strcmp(argv[i],"-opentime")  ) { if (checkTime(argv[i+1])) openTime=argv[i+1];
  146:     } else if (0==strcmp(argv[i],"-duedate")   ) { if (checkDate(argv[i+1])) dueDate=argv[i+1];
  147:     } else if (0==strcmp(argv[i],"-duetime")   ) { if (checkTime(argv[i+1])) dueTime=argv[i+1];
  148:     } else if (0==strcmp(argv[i],"-answerdate")) { if (checkDate(argv[i+1])) ansDate=argv[i+1];
  149:     } else if (0==strcmp(argv[i],"-answertime")) { if (checkTime(argv[i+1])) ansTime=argv[i+1];
  150:     } else if (0==strcmp(argv[i],"-set")       ) { set=atoi(argv[i+1]); 
  151:     } else if (0==strcmp(argv[i],"-dir")       ) { directory=(argv[i+1]); 
  152:     } else { printUsage(argv[0]);exit(0); }
  153:   }
  154: 
  155:   if (directory) { chdir(directory); }
  156: 
  157: #if defined(NeXT) || defined(linux)
  158:    class = getwd(cwd);
  159:    if( class == NULL ) { class = cwd; }
  160: #else
  161:    class = getcwd(NULL,255);   
  162: #endif
  163: 
  164:   printf("Creating set%d.db file in %s/records",set,class);
  165: 
  166:   result=capa_pick_student(0,&student);
  167:   if (result==-1 || result==0 ) {
  168:     printf("Unable to find a classl file.\n");
  169:     exit(-1);
  170:   }
  171:   
  172:   result = capa_parse(set,&headProblem,student.s_sn,&numQuestions);
  173:   if (result==-1) {
  174:     printf("Unable to parse the set.\n");
  175:     exit(-2);
  176:   }
  177:   
  178:   i=0;
  179:   problemWeights=capa_malloc(numQuestions, sizeof(char));
  180:   partialCredit=capa_malloc(numQuestions, sizeof(char));
  181:   currentProblem=headProblem;
  182:   while (currentProblem!=NULL) {
  183:     problemWeights[i]=((char)(currentProblem->weight))+'0';
  184:     partialCredit[i]=((char)(currentProblem->partial_cdt))+'0';
  185:     currentProblem=currentProblem->next;
  186:     i++;
  187:   }
  188:   
  189:   sprintf(header.open_date,"%s %s",openDate,openTime);
  190:   sprintf(header.due_date, "%s %s",dueDate, dueTime);
  191:   sprintf(header.answer_date,"%s %s",ansDate,ansTime);
  192:   sprintf(header.num_questions,"%d",numQuestions);
  193:   
  194:   result=capa_set_header(&header,set,problemWeights,partialCredit);
  195: 
  196:   return 0;
  197: }
  198: 
  199: 
  200: 
  201: 
  202: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>