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 (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: /* 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
    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:  * common.funct.c
   27:  * Created Guy Albertelli II 1998
   28:  */
   29: #include <stdio.h>
   30: #include <tk.h>
   31: #include <pProj/capaCommon.h>
   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: 
  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: 
  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: }
  198: 
  199: void message()
  200: {
  201:   signed char *message=
  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"
  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";
  225:   fprintf(stderr,message);
  226:   exit(0);
  227: }

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