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 (24 years, 3 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_5_msu,
version_2_11_5,
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
/* 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;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>