Diff for /capa/capa51/GUITools/manager.funct.c between versions 1.1 and 1.6

version 1.1, 1999/09/28 21:25:36 version 1.6, 2000/08/07 20:47:29
Line 0 Line 1
   /* C interfaces to CAPA for manager
      Copyright (C) 1992-2000 Michigan State University
   
      The CAPA system is free software; you can redistribute it and/or
      modify it under the terms of the GNU General Public License as
      published by the Free Software Foundation; either version 2 of the
      License, or (at your option) any later version.
   
      The CAPA system is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      General Public License for more details.
   
      You should have received a copy of the GNU General Public
      License along with the CAPA system; see the file COPYING.  If not,
      write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      Boston, MA 02111-1307, USA.
   
      As a special exception, you have permission to link this program
      with the TtH/TtM library and distribute executables, as long as you
      follow the requirements of the GNU GPL in regard to all of the
      software in the executable aside from TtH/TtM.
   */
   
   /*
    * manager.funct.c
    * Guy Albertelli II 1996-1999
    */
   #include <stdio.h>
   #include <tk.h>
   #include <pProj/capaCommon.h>
   #include <manager.h>
   
   int capaCTcreateSummary (ClientData clientdata, Tcl_Interp *interp, int argc, char *argv[])
   {    
     int          section, set;
     int          studentCount,currentStudent;
     int          setScores, termScores, validScores, termValids;
     int          setIndex, maxSet=0;
     int          whatSection;
     char         fmt[64];
     char         grades[4], sectionChar[4], *answersPtr, buf[BUFFER_SIZE], *who,*which,*sortOne,*sortTwo;
     T_student   *studentPtr, *currentStudentPtr;
     FILE        *outputFile;
   
         sprintf(buf,"summary.section.%s",argv[2]);
     section = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY));
         sprintf(buf,"summary.set.%s",argv[2]);
     set = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY)); 
         sprintf(buf,"summary.who.%s",argv[2]);
     who=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
         sprintf(buf,"summary.which.%s",argv[2]);
     which=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
         sprintf(buf,"summary.first.%s",argv[2]);
     sortOne=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
         sprintf(buf,"summary.second.%s",argv[2]);
     sortTwo=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
     maxSet=howManySetDBFile();
     if (((strcmp(which,"upto") == 0) && ((set <= 0) || (set >= NUM_SET_LIMIT))) || (set > maxSet)) {
       sprintf(buf,"displayError \"The set number (%d) doesn't exist.\"",set);
       Tcl_Eval(interp,buf);
       Tcl_ResetResult(interp);
       Tcl_AppendResult(interp,"Error",NULL);
       return TCL_ERROR;
     }
     outputFile=fopen(argv[1],"w");
     if ( strcmp(who,"all") == 0 ) {
       whatSection = GET_ALL_SECTIONS;
     } else {
       whatSection = section;
     }
     studentCount = capa_get_section(&studentPtr, whatSection);
   
     sprintf(buf,"updateStatusMessage \"Creating primary sort key\" %s",argv[2]);
     if (Tcl_Eval(interp,buf) != TCL_OK) {
       free_students(studentPtr);
       fclose(outputFile);
       return TCL_ERROR;
     }
   
     if( studentCount > 0 ) {
       switch (sortOne[1]) 
         {
         case 'a': /*BY_NAME*/   
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_nm);
    }
    break;
         case 'u': /*BY_NUMBER*/  
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_sn);
    }
    break;
         case 'e': /*BY_SECTION*/ 
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++)  {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     sprintf(currentStudentPtr->s_key,"%03d",currentStudentPtr->s_sec);
    }
    break;
         case 'r': /*BY_GRADE*/
    if(strcmp(which,"specific") == 0 ) {
     for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
         currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
      sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
       Tcl_Eval(interp,buf);
       if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,
       &validScores,&answersPtr)) == -2 ) 
         break;
       if( setScores < 0 ) {
         sprintf(currentStudentPtr->s_key,"-");
       } else {
         sprintf(currentStudentPtr->s_key,"%03d",setScores);
       }
       capa_mfree(answersPtr);
     } 
    } else {
     for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
         currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
      sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
       Tcl_Eval(interp,buf);
       for(termScores=0, termValids=0, setIndex=1; setIndex <= set; setIndex++) {
         if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
         &validScores,&answersPtr)) >= 0 ) {
    termScores += setScores;
         }
         capa_mfree(answersPtr);
         termValids += validScores; 
       }
       sprintf(currentStudentPtr->s_key,"%03d",termScores);
     }
    }
    break;
         }
   
       sprintf(buf,"updateStatusMessage \"Creating secondary sort key\" %s",argv[2]);
       if (Tcl_Eval(interp,buf) != TCL_OK) {
         free_students(studentPtr);
         fclose(outputFile);
         return TCL_ERROR;
       }
       switch (sortTwo[1]) 
         {
         case 'a':/*BY_NAME*/    
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     strcat(currentStudentPtr->s_key,currentStudentPtr->s_nm);
    }
    break;
         case 'u':/*BY_NUMBER*/  
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     strcat(currentStudentPtr->s_key,currentStudentPtr->s_sn);
    }
    break;
         case 'e':/*BY_SECTION*/ 
    for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
       currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
     sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
     Tcl_Eval(interp,buf);
     sprintf(sectionChar,"%03d",currentStudentPtr->s_sec); 
     strcat(currentStudentPtr->s_key,sectionChar);
    }
    break;
         case 'r':/*BY_GRADE*/
    if(strcmp(which,"specific") == 0 ) {
     for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
         currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
      sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
       Tcl_Eval(interp,buf);
       if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,
       &answersPtr) ) == -2 ) {
         break;
       }
       if( setScores < 0 ) {
         strcat(currentStudentPtr->s_key,"-");
       } else {
         sprintf(grades,"%03d",setScores);
         strcat(currentStudentPtr->s_key,grades);
       }
       capa_mfree(answersPtr);
     } 
    } else {
     for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
         currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
      sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
     argv[2]);
       Tcl_Eval(interp,buf);
       for (termScores=0, termValids=0, setIndex=1;setIndex<=set;setIndex++) {
         if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
         &validScores,&answersPtr) ) >= 0 ) {
    termScores += setScores;
         }
         capa_mfree(answersPtr);
         termValids += validScores; 
       }
       sprintf(grades,"%03d",termScores);
       strcat(currentStudentPtr->s_key,grades);
     }
    }
    break;
         }
       sprintf(buf,"updateStatusMessage \"Sorting\" %s",argv[2]);
       if (Tcl_Eval(interp,buf) != TCL_OK) {
         free_students(studentPtr);
         fclose(outputFile);
         return TCL_ERROR;
       }
       msort_main(&studentPtr);
       Tcl_ResetResult(interp);
       
       sprintf(fmt,"%%-%ds\t%%-%ds %%2d\t", MAX_NAME_CHAR,MAX_STUDENT_NUMBER);
       sprintf(buf,"updateStatusMessage \"Creating Report\" %s",argv[2]);
       if (Tcl_Eval(interp,buf) != TCL_OK) {
         free_students(studentPtr);
         fclose(outputFile);
         return TCL_ERROR;
       }
       for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
    currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
         
         sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
         argv[2]);
         Tcl_Eval(interp,buf);
         fprintf(outputFile,fmt,currentStudentPtr->s_nm,currentStudentPtr->s_sn,
         currentStudentPtr->s_sec);
         if( strcmp(which,"specific") == 0) {
    setScores = 0; validScores = 0;
    if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,&answersPtr) ) == -2 ) {
     break;
    }
    if( setScores < 0 ) {
     fprintf(outputFile, "  -\t%3d\n", validScores);
    } else {
     fprintf(outputFile, "%3d\t%3d\n",setScores, validScores);
    }
    capa_mfree(answersPtr);
         } else {
    for( setScores=0, validScores=0, termScores = 0, termValids = 0, setIndex = 1; 
        setIndex <= set; setIndex++) {
     if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
     &validScores,&answersPtr) ) >= 0 ) {
       termScores += setScores;
     }
     capa_mfree(answersPtr);
     termValids += validScores;
     if( setScores >= 0 ) {
       fprintf(outputFile, "%3d ",setScores);
     } else {
       fprintf(outputFile, "  - ");
     }
    }
    fprintf(outputFile, "\t %3d\t%3d\n",termScores,termValids);
         }
       }
       free_students(studentPtr);
     }
     fclose(outputFile);
     return TCL_OK;
   }

Removed from v.1.1  
changed lines
  Added in v.1.6


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