Annotation of capa/capa51/pProj/setdbheader.c, revision 1.4

1.2       albertel    1: /* broken start on an command line method for setting the DB Header
                      2:    Copyright (C) 1992-2000 Michigan State University
                      3: 
                      4:    The CAPA system is free software; you can redistribute it and/or
1.4     ! albertel    5:    modify it under the terms of the GNU General Public License as
1.2       albertel    6:    published by the Free Software Foundation; either version 2 of the
                      7:    License, or (at your option) any later version.
                      8: 
                      9:    The CAPA system is distributed in the hope that it will be useful,
                     10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1.4     ! albertel   12:    General Public License for more details.
1.2       albertel   13: 
1.4     ! albertel   14:    You should have received a copy of the GNU General Public
1.2       albertel   15:    License along with the CAPA system; see the file COPYING.  If not,
                     16:    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1.3       albertel   17:    Boston, MA 02111-1307, USA.
                     18: 
                     19:    As a special exception, you have permission to link this program
                     20:    with the TtH/TtM library and distribute executables, as long as you
                     21:    follow the requirements of the GNU GPL in regard to all of the
                     22:    software in the executable aside from TtH/TtM.
                     23: */
1.2       albertel   24: 
1.1       albertel   25: #include <stdio.h>
                     26: #include <ctype.h>
                     27: #include <unistd.h>
                     28: #include "capaCommon.h"
                     29: 
                     30: void printUsage(char* progname)
                     31: {
                     32:   printf("USAGE: %s [-opendate opendate] [-opentime opentime] \n\
                     33:            [-duedate duedate]   [-duetime duetime]  \n\
                     34:            [-ansdate ansdate]   [-anstime anstime]  \n\
                     35:            [-set setnumber] [-dir class-directory] [-h] \n", progname);
                     36:   printf("       -h              : prints this message\n");
                     37:   printf("       CAPA version %s, %s\n",CAPA_VER,COMPILE_DATE);
                     38: }
                     39: 
                     40: /*stolen from quizzer.funct.c*/
                     41: int checkDate(char* date)
                     42: { 
                     43:   if (date==NULL) goto wrong;
                     44:   if (strlen(date)!=8) goto wrong;
                     45: 
                     46:   switch(date[0]) {
                     47:   case '0':
                     48:     if (!isdigit(date[1])) goto wrong;
                     49:     break;
                     50:   case '1':
                     51:     if (!(
                     52: 	  (date[1]=='0') ||
                     53: 	  (date[1]=='1') ||
                     54: 	  (date[1]=='2')
                     55: 	  )
                     56: 	) goto wrong;
                     57:     break;
                     58:   case '2':
                     59:     if (!(
                     60: 	  (date[1]=='0') ||
                     61: 	  (date[1]=='1') ||
                     62: 	  (date[1]=='2') ||
                     63: 	  (date[1]=='3') ||
                     64: 	  (date[1]=='4')
                     65: 	  )
                     66: 	) goto wrong;
                     67:     break;
                     68:   default:
                     69:     goto wrong;
                     70:     break;
                     71:   }
                     72:   if (date[2] != '/') goto wrong;
                     73:   switch(date[3]) {
                     74:   case '0':
                     75:   case '1':
                     76:   case '2':
                     77:     if (!isdigit(date[4])) goto wrong;
                     78:     break;
                     79:   case '3':
                     80:     if (!(
                     81: 	  (date[4]=='0') ||
                     82: 	  (date[4]=='1') 
                     83: 	  )
                     84: 	) goto wrong;
                     85:     break;
                     86:   default:
                     87:     goto wrong;
                     88:     break;
                     89:   }
                     90:   if (date[5] != '/') goto wrong;
                     91:   if (!isdigit(date[6])) goto wrong;
                     92:   if (!isdigit(date[7])) goto wrong;
                     93:   goto right;
                     94: wrong:
                     95:   return 0;
                     96: right:
                     97:   return 1;
                     98: }
                     99: 
                    100: /* stolen from quizzer.funct.c*/
                    101: int checkTime(char* time)
                    102: {
                    103:   if (time==NULL) goto wrong;
                    104:   if (strlen(time)!=5) goto wrong;
                    105: 
                    106:   switch(time[0]) {
                    107:   case '0':
                    108:     if (!isdigit(time[1])) goto wrong;
                    109:     break;
                    110:   case '1':
                    111:     if (!(isdigit(time[1])))
                    112:       goto wrong;
                    113:     break;
                    114:   case '2':
                    115:     switch(time[1])
                    116:       {
                    117:       case '0':
                    118:       case '1':
                    119:       case '2':
                    120:       case '3':
                    121:       case '4':
                    122: 	break;
                    123:       default:
                    124: 	goto wrong;
                    125: 	break;
                    126:       }
                    127:     break;
                    128:   default:
                    129:     goto wrong;
                    130:     break;
                    131:   }
                    132:   if (time[2] != ':') goto wrong;
                    133:   switch (time[3]) {
                    134:   case '0':
                    135:   case '1':
                    136:   case '2':
                    137:   case '3':
                    138:   case '4':
                    139:   case '5':
                    140:     break;
                    141:   default:
                    142:     goto wrong;
                    143:     break;
                    144:   }
                    145:   if (!isdigit(time[4])) goto wrong;
                    146:   goto right;
                    147:   
                    148: wrong:
                    149:   return 0;
                    150: right:
                    151:   return 1;
                    152: }
                    153: 
                    154: int main(int argc, char** argv) 
                    155: {
                    156:   char *openDate="01/01/98",*openTime="01/01/98",
                    157:     *dueDate="01/01/99",*dueTime="01/01/99",
                    158:     *ansDate="01/01/99",*ansTime="01/01/99";
                    159:   char *directory=NULL,*class=NULL,cwd[FILE_NAME_LENGTH];
                    160:   char *problemWeights;
                    161:   char *partialCredit;
                    162:   int numQuestions=0,set=1,result,i=0;  
                    163:   T_header header;
                    164:   T_student student;
                    165:   Problem_t *headProblem,*currentProblem;
                    166: 
                    167:   for(i=1;i<argc-1;i++) {
                    168:     if        (0==strcmp(argv[i],"-opendate")  ) { if (checkDate(argv[i+1])) openDate=argv[i+1];
                    169:     } else if (0==strcmp(argv[i],"-opentime")  ) { if (checkTime(argv[i+1])) openTime=argv[i+1];
                    170:     } else if (0==strcmp(argv[i],"-duedate")   ) { if (checkDate(argv[i+1])) dueDate=argv[i+1];
                    171:     } else if (0==strcmp(argv[i],"-duetime")   ) { if (checkTime(argv[i+1])) dueTime=argv[i+1];
                    172:     } else if (0==strcmp(argv[i],"-answerdate")) { if (checkDate(argv[i+1])) ansDate=argv[i+1];
                    173:     } else if (0==strcmp(argv[i],"-answertime")) { if (checkTime(argv[i+1])) ansTime=argv[i+1];
                    174:     } else if (0==strcmp(argv[i],"-set")       ) { set=atoi(argv[i+1]); 
                    175:     } else if (0==strcmp(argv[i],"-dir")       ) { directory=(argv[i+1]); 
                    176:     } else { printUsage(argv[0]);exit(0); }
                    177:   }
                    178: 
                    179:   if (directory) { chdir(directory); }
                    180: 
                    181: #if defined(NeXT) || defined(linux)
                    182:    class = getwd(cwd);
                    183:    if( class == NULL ) { class = cwd; }
                    184: #else
                    185:    class = getcwd(NULL,255);   
                    186: #endif
                    187: 
                    188:   printf("Creating set%d.db file in %s/records",set,class);
                    189: 
                    190:   result=capa_pick_student(0,&student);
                    191:   if (result==-1 || result==0 ) {
                    192:     printf("Unable to find a classl file.\n");
                    193:     exit(-1);
                    194:   }
                    195:   
                    196:   result = capa_parse(set,&headProblem,student.s_sn,&numQuestions);
                    197:   if (result==-1) {
                    198:     printf("Unable to parse the set.\n");
                    199:     exit(-2);
                    200:   }
                    201:   
                    202:   i=0;
                    203:   problemWeights=capa_malloc(numQuestions, sizeof(char));
                    204:   partialCredit=capa_malloc(numQuestions, sizeof(char));
                    205:   currentProblem=headProblem;
                    206:   while (currentProblem!=NULL) {
                    207:     problemWeights[i]=((char)(currentProblem->weight))+'0';
                    208:     partialCredit[i]=((char)(currentProblem->partial_cdt))+'0';
                    209:     currentProblem=currentProblem->next;
                    210:     i++;
                    211:   }
                    212:   
                    213:   sprintf(header.open_date,"%s %s",openDate,openTime);
                    214:   sprintf(header.due_date, "%s %s",dueDate, dueTime);
                    215:   sprintf(header.answer_date,"%s %s",ansDate,ansTime);
                    216:   sprintf(header.num_questions,"%d",numQuestions);
                    217:   
                    218:   result=capa_set_header(&header,set,problemWeights,partialCredit);
                    219: 
                    220:   return 0;
                    221: }
                    222: 
                    223: 
                    224: 
                    225: 
                    226: 

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