Annotation of capa/capa51/pProj/qzparse.c, revision 1.1
1.1 ! albertel 1: /* ======================================================================== */
! 2: /* Feb. 10 1997 Isaac Tsai */
! 3: /* ======================================================================== */
! 4:
! 5: #ifdef NeXT
! 6: #include <stdlib.h>
! 7: #include <sys/types.h>
! 8: #include <sys/stat.h>
! 9: #include <bsd/curses.h>
! 10: #else
! 11: #include <curses.h>
! 12: #include <malloc.h>
! 13: double atof();
! 14: #endif
! 15:
! 16: #include <stdio.h>
! 17: #include <ctype.h>
! 18: #include <sys/types.h>
! 19: #include <sys/stat.h>
! 20: #include <signal.h>
! 21: #include <time.h>
! 22: #include <math.h>
! 23: #include <string.h>
! 24:
! 25:
! 26: #define YES 1
! 27:
! 28: #include "capaParser.h"
! 29: #include "capaCommon.h"
! 30: #include "ranlib.h"
! 31:
! 32: char *progname;
! 33:
! 34: void free_header(T_header* header)
! 35: {
! 36: capa_mfree(header->weight);
! 37: capa_mfree(header->partial_credit);
! 38: }
! 39:
! 40: void setdb_error(int set)
! 41: {
! 42: fprintf(stderr,"Set #%d has not had it's DB Header set. Please run Quizzer and set the DB Header.\n",set);
! 43: exit(-1);
! 44: }
! 45:
! 46: void
! 47: print_header(int mode,FILE *o_fp,int sec,int set,char *stu_nam,char *stu_num)
! 48: {
! 49: extern char *StartText_p;
! 50: int capaid = capa_PIN(stu_num,set,0);
! 51:
! 52: switch(mode) {
! 53: case TeX_MODE:
! 54: fprintf(o_fp, "Section %d {\\Large %s}\\hspace*{1in}",sec,stu_nam);
! 55: fprintf(o_fp, "{\\large %s}, CAPAID: %d, set %d",stu_num, capaid, set);
! 56: fprintf(o_fp, "\n\\begin{enumerate}\n");
! 57: break;
! 58: case ASCII_MODE:
! 59: fprintf(o_fp, "Section %d %s ", sec,stu_nam);
! 60: fprintf(o_fp, "%s, CAPAID: %d set %d\n\n",stu_num, capaid, set);
! 61: break;
! 62: case HTML_MODE:
! 63: fprintf(o_fp, "<H2>Section %d %s, ", sec,stu_nam);
! 64: fprintf(o_fp, "%s, CAPAID:%d set %d</H2>\n", stu_num,capaid,set);
! 65: fprintf(o_fp, "<OL>\n");
! 66: break;
! 67: }
! 68: if( StartText_p != NULL ) {
! 69: fprintf(o_fp, "%s", StartText_p);
! 70: }
! 71:
! 72: }
! 73:
! 74: void
! 75: print_begin_item(int mode,FILE *o_fp,int q_idx)
! 76: {
! 77:
! 78: switch(mode) {
! 79: case TeX_MODE:
! 80: fprintf(o_fp, "\\item ");
! 81: break;
! 82: case ASCII_MODE:
! 83: fprintf(o_fp, "%d) ", q_idx);
! 84: break;
! 85: case HTML_MODE:
! 86: fprintf(o_fp, "<LI> ");
! 87: break;
! 88: }
! 89: }
! 90:
! 91:
! 92: void
! 93: unit_toHTML(char *u_str, char *r)
! 94: {
! 95: int i;
! 96: char *ch;
! 97:
! 98:
! 99: while(isspace(*ch)) ch++;
! 100: while( isalnum(*ch) ) {
! 101: r[i++] = *ch; ch++;
! 102: }
! 103: if( *ch == '^' ) {
! 104: r[i++] = '<'; r[i++]='s';r[i++]='u';r[i++]='p';r[i++]='>';
! 105: ch++; while(isspace(*ch)) ch++;
! 106: while( isalnum(*ch) ) {
! 107: r[i++] = *ch; ch++;
! 108: }
! 109: r[i++] = '<'; r[i++]='/'; r[i++]='s';r[i++]='u';r[i++]='p';r[i++]='>';
! 110: } else {
! 111: r[i++] = *ch; ch++;
! 112: }
! 113:
! 114:
! 115: }
! 116:
! 117: void
! 118: print_footer(int mode,FILE *o_fp)
! 119: {
! 120: extern char *EndText_p;
! 121:
! 122: switch(mode) {
! 123: case TeX_MODE:
! 124: fprintf(o_fp, "\n\\end{enumerate}\n");
! 125: break;
! 126: case ASCII_MODE:
! 127: fprintf(o_fp, "\n");
! 128: break;
! 129: case HTML_MODE:
! 130: fprintf(o_fp, "</OL>\n");
! 131: break;
! 132: }
! 133: if( EndText_p != NULL ) {
! 134: fprintf(o_fp, "%s", EndText_p);
! 135: }
! 136: }
! 137:
! 138: /* ============================================================== */
! 139: /* qz --> tex -Tq */
! 140: /* qz --> html -Ha */
! 141: /* qz --> ascii -Ab */
! 142: /* question only q */
! 143: /* answer only a */
! 144: /* both b */
! 145: /* for entire class -C */
! 146: /* for a range of sections -Sec 2:6 */
! 147: /* for a section -Sec 2 */
! 148: /* for a student -Stu 12345678 */
! 149: /* output a set -Set 2 */
! 150: /* output a range of sets -Set 1:6 */
! 151: /* output blocksize -b 30 */
! 152: /* ============================================================== */
! 153:
! 154: void usage()
! 155: {
! 156: printf("USAGE: %s [ -[T|H|A][a|b] ] [-Sec [n|n:m] | -Stu sn [-o filename] ]\n",progname);
! 157: printf(" [ -Set [n|n:m] ] [-c path_to_class] [-d outputdirectory]\n");
! 158: printf(" Example 1: %s -Tb -sec 2:3 -set 2:5\n", progname);
! 159: printf(" will generate tex files with both questions and answers\n");
! 160: printf(" for sections 2 to 3, sets 2 to 5\n");
! 161: printf(" Example 2: %s -Ha -stu A12345678 -set 3\n", progname);
! 162: printf(" will generate html files with answer only \n");
! 163: printf(" for student A12345678 set 3\n");
! 164: printf(" -T = tex mode\n");
! 165: printf(" -H = html mode\n");
! 166: printf(" -A = ascii mode\n");
! 167: printf(" = default question only\n");
! 168: printf(" a = answer only\n");
! 169: printf(" b = both question and answer\n");
! 170: printf(" -nopagebreak = don't put a \\clearpage between assignments\n");
! 171: printf(" -Sec 3 = for section 3\n");
! 172: printf(" -Sec 3:7 = from section 3 to section 7\n");
! 173: printf(" -Stu A12345678 = for a specified student\n");
! 174: printf(" -Set 1 = output set 1\n");
! 175: printf(" -Set 3:4 = output from set 3 to set 4\n");
! 176: printf(" -c class_path\n");
! 177: printf(" -o output_filename_with_absolute_path (only for a student)\n");
! 178: printf(" -d directory_to_create_files_in (default is class_path/TeX)\n");
! 179: printf("-------This is version %s @ %s\n",CAPA_VER,COMPILE_DATE);
! 180: printf("------------------------------------------------------\n");
! 181: }
! 182:
! 183: #define Q_ONLY 1
! 184: #define A_ONLY 2
! 185: #define QA_BOTH 3
! 186: #define F_CLASS 1
! 187: #define F_SECTIONS 2
! 188: #define F_STUDENT 3
! 189:
! 190:
! 191:
! 192: /* filter out the number to be [1:999] */
! 193: int scan_num(char *num_str,int *first, int *second) {
! 194: char tmp_str[SMALL_LINE_BUFFER], *ch;
! 195: int ii=0, a_num, b_num, result=0;
! 196:
! 197: ch = num_str;
! 198: tmp_str[ii] = 0;
! 199: while( isspace(*ch) ) ch++;
! 200: while(isdigit(*ch)) { tmp_str[ii++] = *ch; ch++; }
! 201: tmp_str[ii] = 0;
! 202: sscanf(tmp_str,"%d",&a_num);
! 203: if( a_num < 0 || a_num > 999 ) a_num = 1;
! 204: *first = a_num;
! 205: result = 1;
! 206: while( isspace(*ch) ) ch++;
! 207: if( *ch == ':' ) {
! 208: ch++;
! 209: while( isspace(*ch) ) ch++;
! 210: ii=0; tmp_str[ii] = 0;
! 211: while( isdigit(*ch) ) { tmp_str[ii++] = *ch; ch++; }
! 212: tmp_str[ii] = 0;
! 213: sscanf(tmp_str,"%d",&b_num);
! 214: if( b_num < 0 || b_num > 999 ) b_num = 1;
! 215: if( a_num > b_num ) b_num = a_num;
! 216: *second = b_num;
! 217: result = 2;
! 218: }
! 219: return (result);
! 220: }
! 221:
! 222: int main (int argc, char **argv)
! 223: {
! 224: extern int Parsemode_f;
! 225: extern char *EndText_p;
! 226: extern char *StartText_p;
! 227: extern char *ErrorMsg_p;
! 228: extern int ErrorMsg_count;
! 229:
! 230: Problem_t *first_prob,*p;
! 231: T_student *students_p,*s_p, a_student;
! 232: int num_students, q_cnt, result, inputNotOK = 1,
! 233: ii, sectionIdx, setIdx = 1, q_idx, outputFlag = 0;
! 234: char filename[FILE_NAME_LENGTH], path[FILE_NAME_LENGTH];
! 235: FILE *dfp;
! 236: int tmp_num, first_stu, file_specified, directory_specified;
! 237: int ForWhat = F_SECTIONS, pagebreak=1,
! 238: StartSec = 1, EndSec = 1, StartSet = 1, EndSet = 1;
! 239: char StuNum[MAX_STUDENT_NUMBER+1];
! 240: char out_filename[FILE_NAME_LENGTH],out_directory[FILE_NAME_LENGTH];
! 241: char cmd[SMALL_LINE_BUFFER], *ans_str;
! 242:
! 243: /* qz --> tex -T */
! 244: /* qz --> html -Ha */
! 245: /* qz --> ascii -Ab */
! 246: /* answer only a */
! 247: /* both b */
! 248: /* for entire class -C */
! 249: /* for a range of sections -Sec 2:6 */
! 250: /* for a section -Sec 2 */
! 251: /* for a student -Stu 12345678 */
! 252: /* output a set -Set 2 */
! 253: /* output a range of sets -Set 1:6 */
! 254:
! 255: /* default */
! 256: Parsemode_f = TeX_MODE; ForWhat = F_SECTIONS; outputFlag=Q_ONLY;
! 257: file_specified=0;
! 258: out_filename[0]='\0';
! 259: directory_specified=0;
! 260: out_directory[0]='\0';
! 261: for( progname = *argv++; --argc; argv++) {
! 262: if ( argv[0][0] == '-' ) {
! 263: switch(argv[0][1]) {
! 264: case 'T': Parsemode_f = TeX_MODE;
! 265: outputFlag=(argv[0][2] == 'a' ? A_ONLY :(argv[0][2] == 'b' ? QA_BOTH : Q_ONLY));
! 266: break;
! 267: case 'H': Parsemode_f = HTML_MODE;
! 268: outputFlag=(argv[0][2] == 'a' ? A_ONLY :(argv[0][2] == 'b' ? QA_BOTH : Q_ONLY));
! 269: break;
! 270: case 'A': Parsemode_f = ASCII_MODE;
! 271: outputFlag=(argv[0][2] == 'a' ? A_ONLY :(argv[0][2] == 'b' ? QA_BOTH : Q_ONLY));
! 272: break;
! 273: case 'S':
! 274: case 's': if( strncasecmp(argv[0],"-sec",4) == 0 ) {
! 275: tmp_num = scan_num(argv[1],&StartSec,&EndSec);
! 276: if( tmp_num == 1 ) { EndSec = StartSec; }
! 277: ForWhat = F_SECTIONS;
! 278: } else if( strncasecmp(argv[0],"-stu",4) == 0 ) {
! 279: for(ii=0;ii<MAX_STUDENT_NUMBER;ii++) {
! 280: StuNum[ii] = argv[1][ii];
! 281: }
! 282: StuNum[ii]=0;
! 283: ForWhat = F_STUDENT;
! 284: } else if( strncasecmp(argv[0],"-set",4) == 0 ) {
! 285: tmp_num = scan_num(argv[1],&StartSet,&EndSet);
! 286: if( tmp_num == 1 ) { EndSet = StartSet; }
! 287: } else {
! 288: usage();
! 289: }
! 290: break;
! 291: case 'c': strcpy(path, argv[1]);
! 292: if(capa_access(path, F_OK) == -1) {
! 293: inputNotOK = 1;
! 294: } else {
! 295: inputNotOK = 0;
! 296: }
! 297: break;
! 298: case 'o':
! 299: if (argc == 1 || argv[1][0] == '-') {
! 300: usage(); return 0;
! 301: } else {
! 302: strcpy(out_filename, argv[1]); file_specified=1; break;
! 303: }
! 304: case 'd':
! 305: if (argc == 1 || argv[1][0] == '-') {
! 306: usage(); return 0; break;
! 307: } else {
! 308: strcpy(out_directory, argv[1]); directory_specified=1; break;
! 309: }
! 310: case 'n':
! 311: pagebreak=0;break;
! 312: case 'u': case 'h': default: usage(); return(0); break;
! 313: }
! 314: }
! 315: }
! 316: printf(" %s running in %s mode, %s for %s, ", progname,
! 317: (Parsemode_f == TeX_MODE ? "TeX" : (Parsemode_f == ASCII_MODE ? "ASCII" : "HTML")),
! 318: (outputFlag==A_ONLY ? "answer only" : (outputFlag==QA_BOTH? "question and answer" : "question only")),
! 319: (ForWhat == F_STUDENT ? "a student" : "section" ) );
! 320: if( ForWhat == F_STUDENT ) {
! 321: printf(" for student %s,",StuNum);
! 322: } else {
! 323: if(StartSec==EndSec) {
! 324: printf(" for section %d,", StartSec);
! 325: }
! 326: else {
! 327: printf(" from section %d to %d,",StartSec, EndSec);
! 328: }
! 329: }
! 330: if(StartSet==EndSet) { printf(" set %d\n",StartSet); } else { printf(" from set %d to %d\n", StartSet, EndSet); }
! 331:
! 332: while ( inputNotOK ) {
! 333: puts("Enter the ABSOLUTE path of class");
! 334: scanf("%s", path);
! 335: if( capa_access(path, F_OK) == -1 ) {
! 336: } else {
! 337: sprintf(filename,"%s/classl",path);
! 338: if( capa_access(filename, F_OK) == -1 ) {
! 339: puts("There isn't a classl file in this CLASS directory\nPlease Specify another class");
! 340: } else {
! 341: inputNotOK = 0;
! 342: }
! 343: }
! 344: }
! 345:
! 346: if( (ForWhat == F_STUDENT) && strlen(StuNum) == 0 ) {
! 347: inputNotOK = 1;
! 348: while ( inputNotOK ) {
! 349: puts("Enter student number"); scanf("%s", StuNum);
! 350: if( strlen(StuNum) == MAX_STUDENT_NUMBER ) { inputNotOK = 0; }
! 351: }
! 352: }
! 353: if ( file_specified == 0) {
! 354: if ( directory_specified == 0) {
! 355: switch( Parsemode_f ) {
! 356: case TeX_MODE: sprintf(filename,"%s/TeX",path); break;
! 357: case ASCII_MODE: sprintf(filename,"%s/ASCII",path); break;
! 358: case HTML_MODE: sprintf(filename,"%s/HTML",path); break;
! 359: default: sprintf(filename,"%s/TeX",path); Parsemode_f = TeX_MODE; break;
! 360: }
! 361: } else {
! 362: sprintf(filename,"%s",out_directory);
! 363: }
! 364: if( capa_access(filename, F_OK) == -1 ) {
! 365: if ( mkdir(filename, S_IREAD | S_IWRITE | S_IEXEC ) == -1 ) {
! 366: printf("Unable to write to %s\n",filename);
! 367: printf("Please check this directory and run %s again.\n",progname);
! 368: return(-1);
! 369: }
! 370: }
! 371:
! 372: } else {
! 373: if ( directory_specified == 0) {
! 374: } else {
! 375: sprintf(filename,"%s",out_directory);
! 376: }
! 377: }
! 378: chdir(path);
! 379:
! 380: if ( ForWhat == F_SECTIONS ) {
! 381: T_dates* dates;
! 382: T_header header;
! 383: for(ii=StartSet;ii<=EndSet;ii++) {
! 384: if (capa_get_header(&header,ii)<0) {
! 385: setdb_error(ii);
! 386: }
! 387: free_header(&header);
! 388: if (capa_get_all_dates(ii,&dates)<0) {
! 389: setdb_error(ii);
! 390: }
! 391: free_dates(dates);
! 392: }
! 393: }
! 394:
! 395: if( ForWhat == F_STUDENT ) {
! 396: result = capa_get_student(StuNum, &a_student);
! 397: if ( result == 0 ) {
! 398: fprintf(stderr,"Unable to find student %s in %s/classl",StuNum,path);
! 399: exit(-1);
! 400: } else {
! 401: if (result == -1 ) {
! 402: fprintf(stderr,"Unable to read %s/classl",path);
! 403: exit(-1);
! 404: }
! 405: }
! 406: if ( file_specified == 0) {
! 407: if ( directory_specified == 0) {
! 408: switch( Parsemode_f ) {
! 409: case TeX_MODE: sprintf(filename,"TeX/%s.tex",StuNum); break;
! 410: case ASCII_MODE: sprintf(filename,"ASCII/%s.ascii",StuNum); break;
! 411: case HTML_MODE: sprintf(filename,"HTML/%s.html",StuNum); break;
! 412: }
! 413: } else {
! 414: switch( Parsemode_f ) {
! 415: case TeX_MODE: sprintf(filename,"%s/%s.tex",out_directory,StuNum); break;
! 416: case ASCII_MODE: sprintf(filename,"%s/%s.ascii",out_directory,StuNum); break;
! 417: case HTML_MODE: sprintf(filename,"%s/%s.html",out_directory,StuNum); break;
! 418: }
! 419: }
! 420: } else {
! 421: if (directory_specified == 0 ) {
! 422: sprintf(filename,"%s",out_filename);
! 423: } else {
! 424: sprintf(filename,"%s/%s",out_directory,out_filename);
! 425: }
! 426: }
! 427: switch ( Parsemode_f ) {
! 428: case TeX_MODE: sprintf(cmd, "cp TeXheader %s\n",filename); system(cmd); break;
! 429: default: sprintf(cmd,"rm %s\n",filename);system(cmd); break;
! 430: }
! 431: if((dfp=fopen(filename,"a"))==NULL) {
! 432: fprintf(stdout,"File error! Cannot open [%s].\n",filename);
! 433: return -1;
! 434: }
! 435: for(setIdx=StartSet; setIdx <= EndSet; setIdx++) {
! 436: result = capa_parse(setIdx, &first_prob, StuNum, &q_cnt, NULL);
! 437: if ( result != 0 ) { p = first_prob;
! 438: switch(outputFlag) {
! 439: case Q_ONLY:
! 440: if( StartText_p != NULL) {
! 441: fprintf(dfp, "%s", StartText_p); fflush(dfp);
! 442: }
! 443: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 444: fprintf(dfp, "%s", p->question); p = p->next;
! 445: }
! 446: if( EndText_p != NULL) {
! 447: fprintf(dfp, "%s", EndText_p); fflush(dfp);
! 448: }
! 449: break;
! 450: case A_ONLY:
! 451: print_header(Parsemode_f, dfp,a_student.s_sec,setIdx,a_student.s_nm, StuNum);
! 452: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 453: print_begin_item(Parsemode_f,dfp,q_idx+1);
! 454: ans_str = answers_string(Parsemode_f,p);
! 455: fprintf(dfp, "%s",ans_str); fflush(dfp);
! 456: capa_mfree((char *)ans_str);
! 457: p = p->next;
! 458: }
! 459: print_footer(Parsemode_f, dfp);
! 460: break;
! 461: case QA_BOTH:
! 462: if( StartText_p != NULL ) {
! 463: fprintf(dfp, "%s", StartText_p);
! 464: }
! 465: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 466: fprintf(dfp, "%s", p->question); fflush(dfp);
! 467: ans_str = answers_string(Parsemode_f,p);
! 468: fprintf(dfp, "%s",ans_str); fflush(dfp);
! 469: capa_mfree((char *)ans_str);
! 470: p = p->next;
! 471: }
! 472: if( EndText_p != NULL ) {
! 473: fprintf(dfp, "%s", EndText_p);
! 474: }
! 475: break;
! 476: }
! 477:
! 478: }
! 479: free_problems(first_prob);
! 480: if( setIdx < EndSet ) {
! 481: if( Parsemode_f == TeX_MODE && pagebreak ) {
! 482: fprintf(dfp, "\\clearpage\n\\setcounter{page}{1}\n");
! 483: } else {
! 484: printf("\n");
! 485: }
! 486: }
! 487: if( ErrorMsg_count > 0 ) {
! 488: printf("%s",ErrorMsg_p);
! 489: }
! 490: }
! 491: fflush(dfp); fclose(dfp);
! 492:
! 493: switch( Parsemode_f ) {
! 494: case TeX_MODE: sprintf(cmd, "cat TeXfooter >> %s\n", filename); system(cmd); break;
! 495: }
! 496: printf("\n DONE Student %s\n",StuNum);
! 497: } else { /* For section(s) */
! 498: for(sectionIdx = StartSec; sectionIdx <= EndSec; sectionIdx++ ) {
! 499: num_students = capa_sorted_section(&students_p, sectionIdx);
! 500: printf("Section %2d: %d students\n",sectionIdx,num_students);
! 501: if( num_students > 0 ) {
! 502: for(setIdx=StartSet; setIdx <= EndSet; setIdx++) {
! 503:
! 504: if (directory_specified == 0 ) {
! 505: switch( Parsemode_f ) {
! 506: case TeX_MODE: sprintf(cmd, "cp TeXheader TeX/section%d-set%d.tex\n", sectionIdx,setIdx);
! 507: system(cmd);
! 508: sprintf(filename,"TeX/section%d-set%d.tex",sectionIdx,setIdx); break;
! 509: case ASCII_MODE: sprintf(filename,"ASCII/section%d-set%d.ascii",sectionIdx,setIdx); break;
! 510: case HTML_MODE: sprintf(filename,"HTML/section%d-set%d.text",sectionIdx,setIdx); break;
! 511: }
! 512: } else {
! 513: switch( Parsemode_f ) {
! 514: case TeX_MODE: sprintf(cmd, "cp TeXheader %s/section%d-set%d.tex\n", out_directory,
! 515: sectionIdx,setIdx);
! 516: system(cmd);
! 517: sprintf(filename,"%s/section%d-set%d.tex",out_directory,
! 518: sectionIdx,setIdx); break;
! 519: case ASCII_MODE: sprintf(filename,"%s/section%d-set%d.ascii",out_directory,
! 520: sectionIdx,setIdx); break;
! 521: case HTML_MODE: sprintf(filename,"%s/section%d-set%d.text",out_directory,
! 522: sectionIdx,setIdx); break;
! 523: }
! 524: }
! 525: if((dfp=fopen(filename,"a"))==NULL) { printf("File error\n"); return -1; }
! 526: for(s_p = students_p,first_stu=1; s_p ; s_p = s_p->s_next ) {
! 527: s_p->s_sn[MAX_STUDENT_NUMBER]=0;
! 528: printf(" Student: %s%s set %d",s_p->s_nm,s_p->s_sn,setIdx);
! 529: result = capa_parse(setIdx, &first_prob, s_p->s_sn, &q_cnt, NULL);
! 530: if ( result != 0 ) {
! 531: p = first_prob;
! 532: switch(outputFlag) {
! 533: case Q_ONLY:
! 534: if( StartText_p != NULL ) {
! 535: fprintf(dfp, "%s", StartText_p); fflush(dfp);
! 536: }
! 537: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 538: fprintf(dfp, "%s", p->question); fflush(dfp); p = p->next;
! 539: }
! 540: if( EndText_p != NULL ) {
! 541: fprintf(dfp, "%s", EndText_p); fflush(dfp);
! 542: }
! 543: break;
! 544: case A_ONLY:
! 545: print_header(Parsemode_f,dfp,s_p->s_sec,setIdx,s_p->s_nm,s_p->s_sn);
! 546: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 547: print_begin_item(Parsemode_f,dfp,q_idx+1);
! 548: ans_str = answers_string(Parsemode_f,p);
! 549: fprintf(dfp, "%s",ans_str); fflush(dfp);
! 550: capa_mfree((char *)ans_str);
! 551: p = p->next;
! 552: }
! 553: print_footer(Parsemode_f,dfp);
! 554: break;
! 555: case QA_BOTH:
! 556: if( StartText_p != NULL ) {
! 557: fprintf(dfp, "%s", StartText_p); fflush(dfp);
! 558: }
! 559: for( q_idx = 0; q_idx < q_cnt; printf("."),fflush(stdout), q_idx++ ) {
! 560: fprintf(dfp, "%s", p->question); fflush(dfp);
! 561: ans_str = answers_string(Parsemode_f,p);
! 562: fprintf(dfp, "%s",ans_str); fflush(dfp);
! 563: capa_mfree((char *)ans_str);
! 564: p = p->next;
! 565: }
! 566: if( ( EndText_p != NULL) ) {
! 567: fprintf(dfp, "%s", EndText_p);
! 568: }
! 569: break;
! 570: }
! 571: if( s_p->s_next != NULL ) {
! 572: if(Parsemode_f == TeX_MODE && pagebreak) {
! 573: fprintf(dfp, "\\clearpage\n\\setcounter{page}{1}\n"); fflush(dfp);
! 574: }
! 575: printf("\n");
! 576: }
! 577: free_problems(first_prob);
! 578: }
! 579: }
! 580: fflush(dfp); fclose(dfp);
! 581: if(Parsemode_f == TeX_MODE) {
! 582: if (directory_specified==0) {
! 583: sprintf(cmd, "cat TeXfooter >> TeX/section%d-set%d.tex\n", sectionIdx,setIdx); system(cmd);
! 584: } else {
! 585: sprintf(cmd, "cat TeXfooter >> %s/section%d-set%d.tex\n", out_directory,
! 586: sectionIdx,setIdx); system(cmd);
! 587: }
! 588: }
! 589: printf("\n DONE set%2d\n",setIdx);
! 590: }
! 591:
! 592: }
! 593: printf("\n DONE section%2d\n",sectionIdx);
! 594: }
! 595: free_students(students_p);
! 596: }
! 597: printf("ALL DONE\n");
! 598: return (0);
! 599: }
! 600:
! 601:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>