File:
[LON-CAPA] /
capa /
capa51 /
GUITools /
common.funct.c
Revision
1.7:
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
/* general functionality for all parts of GUI CAPA
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.
*/
/*
* common.funct.c
* Created Guy Albertelli II 1998
*/
#include <stdio.h>
#include <tk.h>
#include <pProj/capaCommon.h>
#include <common.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <sys/wait.h>
/* Used by the parse front end to escape any special characters in TCL */
/* arguments are source buffer, destination buffer, and where to start */
/* in the destination buffer */
int capaPrepareBuffer(char *buf,char *buf2,int j)
{
int i;
for(i=0;i<strlen(buf);i++,j++)
{
switch(buf[i])
{
case '$':case '[': case ']': case '{': case '}': case '\\': case '"':
buf2[j]='\\';
j++;
buf2[j]=buf[i];
break;
default:
buf2[j]=buf[i];
break;
}
}
buf2[j]='\0';
return j;
}
int bufInsert(Tcl_Interp*interp,char*window,char*string)
{
char *buf;
char *buf2;
#ifdef _UPDATE
char *update=";update";
#else
char *update=" ";
#endif
buf=capa_malloc(BUFFER_SIZE+strlen(string)*2,1);
buf2=capa_malloc(BUFFER_SIZE+strlen(string)*3,1);
capaPrepareBuffer(string,buf,0);
sprintf(buf2,"%s insert end \"%s\" answer%s",window,buf,update);
if (Tcl_Eval(interp,buf2) != TCL_OK) { fprintf(stderr,"problem with bufInsert\n"); }
capa_mfree(buf);
capa_mfree(buf2);
}
void print_begin_item(int mode,Tcl_Interp *interp,char *window,int q_idx)
{
char buf[BUFFER_SIZE];
switch(mode) {
case TeX_MODE: bufInsert(interp,window, "\\item "); break;
case ASCII_MODE:
sprintf(buf, "%d) ", q_idx);
bufInsert(interp,window,buf); break;
case HTML_MODE: bufInsert(interp,window, "<LI> "); break;
}
}
void capaInsertAnswer(Problem_t *p,Tcl_Interp *interp, char *window) {
extern int Parsemode_f;
char* answer;
answer=answers_string(Parsemode_f,p);
bufInsert(interp,window,answer);
capa_mfree(answer);
}
/* updates the gDate var with the current date and reregisters itself
* to run in .8 seconds
*/
int capaDateUpdate(ClientData clientdata, Tcl_Interp *interp, int argc,
char *argv[])
{
time_t rightNow=time(NULL);
if (Tcl_SetVar(interp,"gDate",asctime(localtime(&rightNow)),
TCL_GLOBAL_ONLY) == NULL)
{
fprintf(stderr,"Tcl_Eval error\n");
fprintf(stderr,"%s\n",interp->result);
return TCL_ERROR;
}
if (Tcl_Eval(interp,"after 800 { dateUpdate } ") != TCL_OK)
{
fprintf(stderr,"Tcl_Eval error\n");
fprintf(stderr,"%s\n",interp->result);
return TCL_ERROR;
}
return TCL_OK;
}
int capaGetExistingSections(ClientData clientdata, Tcl_Interp *interp,
int argc, char *argv[])
{
int i=0,result,sectionArray[MAX_SECTION_COUNT];
char buf[BUFFER_SIZE];
Tcl_ResetResult(interp);
result=capa_get_section_count(sectionArray);
if (result==-1)
{
Tcl_AppendElement(interp,"Unable to find a classl file.\n");
return TCL_ERROR;
}
for(i=1;i<=sectionArray[0];i++)
{
if ( sectionArray[i] !=0 )
{
sprintf(buf,"%d %d",i, sectionArray[i]);
Tcl_AppendElement(interp,buf);
}
}
return TCL_OK;
}
/* finds how many set.db files there are */
int howManySetDBFile()
{
char filename[BUFFER_SIZE], *pathName;
int ii;
pathName=getcwd(NULL,BUFFER_SIZE);
ii=1;
sprintf(filename,"%s/records/set%d.db",pathName,ii);
while(!access(filename, F_OK)) {
ii++;
sprintf(filename,"%s/records/set%d.db",pathName,ii);
}
free(pathName);
return (ii-1);
}
/* argv[1] is student number argv[2] is setnumber */
int capaGetSpecifiCapaId(ClientData clientdata, Tcl_Interp *interp, int argc,
char *argv[])
{
char buf[MAX_BUFFER_SIZE];
if (argc==3) {
sprintf(buf,"%d",capa_PIN(argv[1],atoi(argv[2]),0));
Tcl_AppendElement(interp,buf);
} else {
sprintf(buf,"Usage: %s StudentNumber SetNumber",argv[0]);
Tcl_AppendElement(interp,buf);
}
return TCL_OK;
}
/* argv[1] is student number argv[2] is section number argv[3] is setnumber */
int capaIsSetOpen(ClientData clientdata, Tcl_Interp *interp, int argc,
char *argv[])
{
char buf[MAX_BUFFER_SIZE];
if (argc==4) {
sprintf(buf,"%d",capa_check_date(CHECK_OPEN_DATE,argv[1],atoi(argv[2]),atoi(argv[3])));
Tcl_AppendElement(interp,buf);
} else {
sprintf(buf,"Usage: %s StudentNumber SectionNumber SetNumber",argv[0]);
Tcl_AppendElement(interp,buf);
}
return TCL_OK;
}
void message()
{
signed char *message=
"***** ***** ************ ***** *****\n"
"****** ****** ****************** ***** *****\n"
" ****** ****** **** **** **** **** \n"
" ******* ******* **** **** **** **** \n"
" ******** ******** **** **** **** **** \n"
" **** **** **** **** **** **** **** \n"
" **** **** **** **** **** **** **** \n"
" **** **** **** **** **** **** **** \n"
" **** ******** **** **** **** **** \n"
" **** ****** **** *************** **** **** \n"
" **** **** **** *************** **** **** \n"
" **** ** **** **** **** **** \n"
" **** **** **** **** **** \n"
" **** **** **** **** **** \n"
" **** **** **** **** **** \n"
" **** **** **** **** **** **** \n"
" **** **** **** **** **** **** \n"
" **** **** **** **** **** **** \n"
"***** ***** ****************** ***************** \n"
"***** ***** ************ *********** \n"
"CAPA comes with ABSOLUTELY NO WARRANTY \n"
"This is free software, and you are welcome \n"
"to redistribute it under certain conditions; check the COPYING file. \n";
fprintf(stderr,message);
exit(0);
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>