Annotation of capa/capa51/GUITools/common.funct.c, revision 1.7

1.4       albertel    1: /* general functionality for all parts of GUI CAPA
                      2:    Copyright (C) 1992-2000 Michigan State University
                      3: 
                      4:    The CAPA system is free software; you can redistribute it and/or
1.7     ! albertel    5:    modify it under the terms of the GNU General Public License as
1.4       albertel    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
1.7     ! albertel   12:    General Public License for more details.
1.4       albertel   13: 
1.7     ! albertel   14:    You should have received a copy of the GNU General Public
1.4       albertel   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: 
1.1       albertel   25: /*
                     26:  * common.funct.c
1.4       albertel   27:  * Created Guy Albertelli II 1998
1.1       albertel   28:  */
                     29: #include <stdio.h>
                     30: #include <tk.h>
1.6       albertel   31: #include <pProj/capaCommon.h>
1.1       albertel   32: #include <common.h>
                     33: #include <ctype.h>
                     34: #include <time.h>
                     35: #include <sys/types.h>
                     36: #include <sys/wait.h>
                     37: 
                     38: /* Used by the parse front end to escape any special characters in TCL */
                     39: /* arguments are source buffer, destination buffer, and where to start */
                     40: /* in the destination buffer                                           */
                     41: int capaPrepareBuffer(char *buf,char *buf2,int j)
                     42: {
                     43:   int i;
                     44:   for(i=0;i<strlen(buf);i++,j++)
                     45:     {
                     46:       switch(buf[i])
                     47: 	{
                     48: 	case '$':case '[': case ']': case '{': case '}': case '\\': case '"':
                     49: 	  buf2[j]='\\';
                     50: 	  j++;
                     51: 	  buf2[j]=buf[i];
                     52: 	  break;
                     53: 	default:
                     54: 	  buf2[j]=buf[i];
                     55: 	  break;
                     56: 	}
                     57:     }
                     58:   buf2[j]='\0';
                     59:   return j;
                     60: }
                     61: 
                     62: int bufInsert(Tcl_Interp*interp,char*window,char*string) 
                     63: {
                     64:   char *buf;
                     65:   char *buf2;
                     66: #ifdef _UPDATE
                     67:   char *update=";update";
                     68: #else
                     69:   char *update=" ";
                     70: #endif
                     71: 
                     72:   buf=capa_malloc(BUFFER_SIZE+strlen(string)*2,1);
                     73:   buf2=capa_malloc(BUFFER_SIZE+strlen(string)*3,1);
                     74:   capaPrepareBuffer(string,buf,0);
                     75:   sprintf(buf2,"%s insert end \"%s\" answer%s",window,buf,update);
                     76:   if (Tcl_Eval(interp,buf2) != TCL_OK) { fprintf(stderr,"problem with bufInsert\n"); }
                     77:   capa_mfree(buf);
                     78:   capa_mfree(buf2);
                     79: }
                     80: 
                     81: void print_begin_item(int mode,Tcl_Interp *interp,char *window,int q_idx)
                     82: {
                     83:   char buf[BUFFER_SIZE];
                     84:   switch(mode) {
                     85:     case TeX_MODE: bufInsert(interp,window, "\\item "); break;
                     86:     case ASCII_MODE:
                     87:           sprintf(buf, "%d) ", q_idx); 
                     88: 	  bufInsert(interp,window,buf); break;
                     89:     case HTML_MODE: bufInsert(interp,window, "<LI> "); break;
                     90:   }
                     91: }
                     92: 
                     93: void capaInsertAnswer(Problem_t *p,Tcl_Interp *interp, char *window) {
                     94:   extern int Parsemode_f;
                     95:   char* answer;
                     96: 
                     97:   answer=answers_string(Parsemode_f,p);
                     98:   bufInsert(interp,window,answer);
                     99:   capa_mfree(answer);
                    100: }
                    101: 
                    102: /* updates the gDate var with the current date and reregisters itself
                    103:  * to run in .8 seconds
                    104:  */
                    105: 
                    106: int capaDateUpdate(ClientData clientdata, Tcl_Interp *interp, int argc, 
                    107: 		   char *argv[])
                    108: {
                    109:   time_t rightNow=time(NULL);
                    110: 
                    111:   if (Tcl_SetVar(interp,"gDate",asctime(localtime(&rightNow)),
                    112: 		 TCL_GLOBAL_ONLY) == NULL)
                    113:     {
                    114:       fprintf(stderr,"Tcl_Eval error\n");
                    115:       fprintf(stderr,"%s\n",interp->result);
                    116:       return TCL_ERROR;
                    117:     }
                    118: 
                    119:   if (Tcl_Eval(interp,"after 800 { dateUpdate } ") != TCL_OK)
                    120:     {
                    121:       fprintf(stderr,"Tcl_Eval error\n");
                    122:       fprintf(stderr,"%s\n",interp->result);
                    123:       return TCL_ERROR;
                    124:     }
                    125:   return TCL_OK;
                    126: }
                    127: 
                    128: int capaGetExistingSections(ClientData clientdata, Tcl_Interp *interp, 
                    129: 			int argc, char *argv[])
                    130: {
                    131:   int i=0,result,sectionArray[MAX_SECTION_COUNT];
                    132:   char buf[BUFFER_SIZE];
                    133: 
                    134:   Tcl_ResetResult(interp);
                    135:   result=capa_get_section_count(sectionArray);
                    136:   if (result==-1)
                    137:     {
                    138:       Tcl_AppendElement(interp,"Unable to find a classl file.\n");
                    139:       return TCL_ERROR;
                    140:     }
                    141:   for(i=1;i<=sectionArray[0];i++) 
                    142:     {
                    143:       if ( sectionArray[i] !=0 ) 
                    144: 	{
                    145: 	  sprintf(buf,"%d %d",i, sectionArray[i]);
                    146: 	  Tcl_AppendElement(interp,buf);
                    147: 	}
                    148:     }
                    149:   return TCL_OK;
                    150: }
                    151: 
1.2       albertel  152: /* finds how many set.db files there are */
                    153: int howManySetDBFile()
                    154: {
                    155:   char     filename[BUFFER_SIZE], *pathName;
                    156:   int     ii;
                    157:   
                    158:   pathName=getcwd(NULL,BUFFER_SIZE);
                    159:   ii=1;
                    160:   sprintf(filename,"%s/records/set%d.db",pathName,ii);
                    161:   while(!access(filename, F_OK)) {
                    162:     ii++;
                    163:     sprintf(filename,"%s/records/set%d.db",pathName,ii);
                    164:   }
                    165:   free(pathName);
                    166:   return (ii-1);
                    167: }
                    168: 
1.3       albertel  169: /* argv[1] is student number argv[2] is setnumber */
                    170: int capaGetSpecifiCapaId(ClientData clientdata, Tcl_Interp *interp, int argc, 
                    171: 			 char *argv[])
                    172: {
                    173:   char buf[MAX_BUFFER_SIZE];
                    174:   if (argc==3) {
                    175:     sprintf(buf,"%d",capa_PIN(argv[1],atoi(argv[2]),0));
                    176:     Tcl_AppendElement(interp,buf);
                    177:   } else {
                    178:     sprintf(buf,"Usage: %s StudentNumber SetNumber",argv[0]);
                    179:     Tcl_AppendElement(interp,buf);
                    180:   }
                    181:   return TCL_OK;
                    182: }
                    183: 
                    184: /* argv[1] is student number argv[2] is section number argv[3] is setnumber */
                    185: int capaIsSetOpen(ClientData clientdata, Tcl_Interp *interp, int argc, 
                    186: 			 char *argv[])
                    187: {
                    188:   char buf[MAX_BUFFER_SIZE];
                    189:   if (argc==4) {
                    190:     sprintf(buf,"%d",capa_check_date(CHECK_OPEN_DATE,argv[1],atoi(argv[2]),atoi(argv[3])));
                    191:     Tcl_AppendElement(interp,buf);
                    192:   } else {
                    193:     sprintf(buf,"Usage: %s StudentNumber SectionNumber SetNumber",argv[0]);
                    194:     Tcl_AppendElement(interp,buf);
                    195:   }
                    196:   return TCL_OK;
                    197: }
1.2       albertel  198: 
1.1       albertel  199: void message()
                    200: {
1.3       albertel  201:   signed char *message=
1.1       albertel  202: "*****                *****        ************        *****               *****\n"
                    203: "******              ******     ******************     *****               *****\n"
                    204: " ******            ******    ****              ****    ****               **** \n"
                    205: " *******          *******   ****                ****   ****               **** \n"
                    206: " ********        ********   ****                ****   ****               **** \n"
                    207: " **** ****      **** ****   ****                       ****               **** \n"
                    208: " ****  ****    ****  ****   ****                       ****               **** \n"
                    209: " ****   ****  ****   ****   ****                       ****               **** \n"
                    210: " ****    ********    ****    ****                      ****               **** \n"
                    211: " ****     ******     ****      ***************         ****               **** \n"
                    212: " ****      ****      ****         ***************      ****               **** \n"
                    213: " ****       **       ****                      ****    ****               **** \n"
                    214: " ****                ****                       ****   ****               **** \n"
                    215: " ****                ****                       ****   ****               **** \n"
                    216: " ****                ****                       ****   ****               **** \n"
                    217: " ****                ****   ****                ****   ****               **** \n"
                    218: " ****                ****   ****                ****   ****               **** \n"
                    219: " ****                ****    ****              ****     ****             ****  \n"
                    220: "*****                *****     ******************         *****************    \n"
                    221: "*****                *****        ************               ***********       \n"
1.5       albertel  222: "CAPA comes with ABSOLUTELY NO WARRANTY                                         \n"
                    223: "This is free software, and you are welcome                                     \n"
                    224: "to redistribute it under certain conditions; check the COPYING file.           \n";
1.1       albertel  225:   fprintf(stderr,message);
                    226:   exit(0);
                    227: }

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