File:  [LON-CAPA] / capa / capa51 / GUITools / common.funct.c
Revision 1.4: download - view: text, annotated - select for diffs
Fri Jul 7 18:25:12 2000 UTC (23 years, 11 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
- GPL notices

    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 Library 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:    Library General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Library 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 <Capa/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: "Copyright MSU Board of Trustees 1992-1999                                      \n"
  223: "No Unauthorized Commercial Use or redistribution allowed.                      \n";
  224:   fprintf(stderr,message);
  225:   exit(0);
  226: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.