File:  [LON-CAPA] / capa / capa51 / GUITools / manager.funct.c
Revision 1.6: download - view: text, annotated - select for diffs
Mon Aug 7 20:47:29 2000 UTC (23 years, 9 months ago) by albertel
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, version_1_0_99, version_1_0_3, version_1_0_2, version_1_0_1, version_1_0_0, version_0_99_5, version_0_99_4, version_0_99_3, version_0_99_2, version_0_99_1, version_0_99_0, version_0_6_2, version_0_6, version_0_5_1, version_0_5, version_0_4, stable_2002_spring, stable_2002_july, stable_2002_april, stable_2001_fall, release_5-1-3, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, conference_2003, bz6209-base, bz6209, STABLE, HEAD, GCI_3, GCI_2, GCI_1, CAPA_5-1-6, CAPA_5-1-5, CAPA_5-1-4_RC1, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
- fixed license notices the reference the GNU GPL rather than the GNU LGPL

    1: /* C interfaces to CAPA for manager
    2:    Copyright (C) 1992-2000 Michigan State University
    3: 
    4:    The CAPA system is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU General Public License as
    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
   12:    General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU General Public
   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,
   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: */
   24: 
   25: /*
   26:  * manager.funct.c
   27:  * Guy Albertelli II 1996-1999
   28:  */
   29: #include <stdio.h>
   30: #include <tk.h>
   31: #include <pProj/capaCommon.h>
   32: #include <manager.h>
   33: 
   34: int capaCTcreateSummary (ClientData clientdata, Tcl_Interp *interp, int argc, char *argv[])
   35: {    
   36:   int          section, set;
   37:   int          studentCount,currentStudent;
   38:   int          setScores, termScores, validScores, termValids;
   39:   int          setIndex, maxSet=0;
   40:   int          whatSection;
   41:   char         fmt[64];
   42:   char         grades[4], sectionChar[4], *answersPtr, buf[BUFFER_SIZE], *who,*which,*sortOne,*sortTwo;
   43:   T_student   *studentPtr, *currentStudentPtr;
   44:   FILE        *outputFile;
   45: 
   46:       sprintf(buf,"summary.section.%s",argv[2]);
   47:   section = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY));
   48:       sprintf(buf,"summary.set.%s",argv[2]);
   49:   set = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY)); 
   50:       sprintf(buf,"summary.who.%s",argv[2]);
   51:   who=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
   52:       sprintf(buf,"summary.which.%s",argv[2]);
   53:   which=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
   54:       sprintf(buf,"summary.first.%s",argv[2]);
   55:   sortOne=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
   56:       sprintf(buf,"summary.second.%s",argv[2]);
   57:   sortTwo=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
   58:   maxSet=howManySetDBFile();
   59:   if (((strcmp(which,"upto") == 0) && ((set <= 0) || (set >= NUM_SET_LIMIT))) || (set > maxSet)) {
   60:     sprintf(buf,"displayError \"The set number (%d) doesn't exist.\"",set);
   61:     Tcl_Eval(interp,buf);
   62:     Tcl_ResetResult(interp);
   63:     Tcl_AppendResult(interp,"Error",NULL);
   64:     return TCL_ERROR;
   65:   }
   66:   outputFile=fopen(argv[1],"w");
   67:   if ( strcmp(who,"all") == 0 ) {
   68:     whatSection = GET_ALL_SECTIONS;
   69:   } else {
   70:     whatSection = section;
   71:   }
   72:   studentCount = capa_get_section(&studentPtr, whatSection);
   73: 
   74:   sprintf(buf,"updateStatusMessage \"Creating primary sort key\" %s",argv[2]);
   75:   if (Tcl_Eval(interp,buf) != TCL_OK) {
   76:     free_students(studentPtr);
   77:     fclose(outputFile);
   78:     return TCL_ERROR;
   79:   }
   80: 
   81:   if( studentCount > 0 ) {
   82:     switch (sortOne[1]) 
   83:       {
   84:       case 'a': /*BY_NAME*/   
   85: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
   86: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
   87: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
   88: 		  argv[2]);
   89: 	  Tcl_Eval(interp,buf);
   90: 	  sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_nm);
   91: 	}
   92: 	break;
   93:       case 'u': /*BY_NUMBER*/  
   94: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
   95: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
   96: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
   97: 		  argv[2]);
   98: 	  Tcl_Eval(interp,buf);
   99: 	  sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_sn);
  100: 	}
  101: 	break;
  102:       case 'e': /*BY_SECTION*/ 
  103: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  104: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
  105: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  106: 		  argv[2]);
  107: 	  Tcl_Eval(interp,buf);
  108: 	  sprintf(currentStudentPtr->s_key,"%03d",currentStudentPtr->s_sec);
  109: 	}
  110: 	break;
  111:       case 'r': /*BY_GRADE*/
  112: 	if(strcmp(which,"specific") == 0 ) {
  113: 	  for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  114: 	      currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  115: 	   sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  116: 		  argv[2]);
  117: 	    Tcl_Eval(interp,buf);
  118: 	    if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,
  119: 					    &validScores,&answersPtr)) == -2 ) 
  120: 	      break;
  121: 	    if( setScores < 0 ) {
  122: 	      sprintf(currentStudentPtr->s_key,"-");
  123: 	    } else {
  124: 	      sprintf(currentStudentPtr->s_key,"%03d",setScores);
  125: 	    }
  126: 	    capa_mfree(answersPtr);
  127: 	  } 
  128: 	} else {
  129: 	  for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  130: 	      currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  131: 	   sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  132: 		  argv[2]);
  133: 	    Tcl_Eval(interp,buf);
  134: 	    for(termScores=0, termValids=0, setIndex=1; setIndex <= set; setIndex++) {
  135: 	      if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
  136: 					      &validScores,&answersPtr)) >= 0 ) {
  137: 		termScores += setScores;
  138: 	      }
  139: 	      capa_mfree(answersPtr);
  140: 	      termValids += validScores; 
  141: 	    }
  142: 	    sprintf(currentStudentPtr->s_key,"%03d",termScores);
  143: 	  }
  144: 	}
  145: 	break;
  146:       }
  147: 
  148:     sprintf(buf,"updateStatusMessage \"Creating secondary sort key\" %s",argv[2]);
  149:     if (Tcl_Eval(interp,buf) != TCL_OK) {
  150:       free_students(studentPtr);
  151:       fclose(outputFile);
  152:       return TCL_ERROR;
  153:     }
  154:     switch (sortTwo[1]) 
  155:       {
  156:       case 'a':/*BY_NAME*/    
  157: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  158: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  159: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  160: 		  argv[2]);
  161: 	  Tcl_Eval(interp,buf);
  162: 	  strcat(currentStudentPtr->s_key,currentStudentPtr->s_nm);
  163: 	}
  164: 	break;
  165:       case 'u':/*BY_NUMBER*/  
  166: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  167: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  168: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  169: 		  argv[2]);
  170: 	  Tcl_Eval(interp,buf);
  171: 	  strcat(currentStudentPtr->s_key,currentStudentPtr->s_sn);
  172: 	}
  173: 	break;
  174:       case 'e':/*BY_SECTION*/ 
  175: 	for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  176: 	    currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  177: 	  sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  178: 		  argv[2]);
  179: 	  Tcl_Eval(interp,buf);
  180: 	  sprintf(sectionChar,"%03d",currentStudentPtr->s_sec); 
  181: 	  strcat(currentStudentPtr->s_key,sectionChar);
  182: 	}
  183: 	break;
  184:       case 'r':/*BY_GRADE*/
  185: 	if(strcmp(which,"specific") == 0 ) {
  186: 	  for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  187: 	      currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  188: 	   sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  189: 		  argv[2]);
  190: 	    Tcl_Eval(interp,buf);
  191: 	    if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,
  192: 					    &answersPtr) ) == -2 ) {
  193: 	      break;
  194: 	    }
  195: 	    if( setScores < 0 ) {
  196: 	      strcat(currentStudentPtr->s_key,"-");
  197: 	    } else {
  198: 	      sprintf(grades,"%03d",setScores);
  199: 	      strcat(currentStudentPtr->s_key,grades);
  200: 	    }
  201: 	    capa_mfree(answersPtr);
  202: 	  } 
  203: 	} else {
  204: 	  for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  205: 	      currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  206: 	   sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  207: 		  argv[2]);
  208: 	    Tcl_Eval(interp,buf);
  209: 	    for (termScores=0, termValids=0, setIndex=1;setIndex<=set;setIndex++) {
  210: 	      if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
  211: 					      &validScores,&answersPtr) ) >= 0 ) {
  212: 		termScores += setScores;
  213: 	      }
  214: 	      capa_mfree(answersPtr);
  215: 	      termValids += validScores; 
  216: 	    }
  217: 	    sprintf(grades,"%03d",termScores);
  218: 	    strcat(currentStudentPtr->s_key,grades);
  219: 	  }
  220: 	}
  221: 	break;
  222:       }
  223:     sprintf(buf,"updateStatusMessage \"Sorting\" %s",argv[2]);
  224:     if (Tcl_Eval(interp,buf) != TCL_OK) {
  225:       free_students(studentPtr);
  226:       fclose(outputFile);
  227:       return TCL_ERROR;
  228:     }
  229:     msort_main(&studentPtr);
  230:     Tcl_ResetResult(interp);
  231:     
  232:     sprintf(fmt,"%%-%ds\t%%-%ds %%2d\t", MAX_NAME_CHAR,MAX_STUDENT_NUMBER);
  233:     sprintf(buf,"updateStatusMessage \"Creating Report\" %s",argv[2]);
  234:     if (Tcl_Eval(interp,buf) != TCL_OK) {
  235:       free_students(studentPtr);
  236:       fclose(outputFile);
  237:       return TCL_ERROR;
  238:     }
  239:     for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
  240: 	currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
  241:       
  242:       sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
  243: 	      argv[2]);
  244:       Tcl_Eval(interp,buf);
  245:       fprintf(outputFile,fmt,currentStudentPtr->s_nm,currentStudentPtr->s_sn,
  246: 	      currentStudentPtr->s_sec);
  247:       if( strcmp(which,"specific") == 0) {
  248: 	setScores = 0; validScores = 0;
  249: 	if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,&answersPtr) ) == -2 ) {
  250: 	  break;
  251: 	}
  252: 	if( setScores < 0 ) {
  253: 	  fprintf(outputFile, "  -\t%3d\n", validScores);
  254: 	} else {
  255: 	  fprintf(outputFile, "%3d\t%3d\n",setScores, validScores);
  256: 	}
  257: 	capa_mfree(answersPtr);
  258:       } else {
  259: 	for( setScores=0, validScores=0, termScores = 0, termValids = 0, setIndex = 1; 
  260: 	     setIndex <= set; setIndex++) {
  261: 	  if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
  262: 					  &validScores,&answersPtr) ) >= 0 ) {
  263: 	    termScores += setScores;
  264: 	  }
  265: 	  capa_mfree(answersPtr);
  266: 	  termValids += validScores;
  267: 	  if( setScores >= 0 ) {
  268: 	    fprintf(outputFile, "%3d ",setScores);
  269: 	  } else {
  270: 	    fprintf(outputFile, "  - ");
  271: 	  }
  272: 	}
  273: 	fprintf(outputFile, "\t %3d\t%3d\n",termScores,termValids);
  274:       }
  275:     }
  276:     free_students(studentPtr);
  277:   }
  278:   fclose(outputFile);
  279:   return TCL_OK;
  280: }

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