File:  [LON-CAPA] / capa / capa51 / GUITools / grader.c
Revision 1.1: download - view: text, annotated - select for diffs
Tue Sep 28 21:25:36 1999 UTC (24 years, 9 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
Initial revision

    1: /*
    2:  * grader.c
    3:  * Copyright Guy Albertelli II 1996
    4:  */
    5: #include <stdio.h>
    6: #include <tk.h>
    7: #include <stdlib.h>
    8: #include <Capa/capaCommon.h>
    9: #include <unistd.h>
   10: #include <grader.h> 
   11: 
   12: extern Tcl_Interp *gInterp;
   13: 
   14: int Grader_Init(Tcl_Interp *interp);
   15: 
   16: int main(int argc,char **argv)
   17: {
   18:   char * rDisplay,*q,buffer[BUFFER_SIZE];
   19:   char filename[BUFFER_SIZE];
   20:   int found=1;
   21: 
   22:   gInterp=Tcl_CreateInterp();
   23:   if (gInterp ==NULL)
   24:   {
   25:     fprintf(stderr,"Couldn't get a new Tcl Interp\n");
   26:     return -1;
   27:   }
   28: 
   29:   rDisplay = getenv("DISPLAY");
   30:   
   31:   if (rDisplay==NULL)
   32:   {
   33:     fprintf(stderr,"getenv for DISPLAY returned NULL\n");
   34:     return -2;
   35:   }
   36:   
   37:   if (Tcl_SetVar2 (gInterp, "env", "DISPLAY", rDisplay, TCL_GLOBAL_ONLY) == NULL) 
   38:   {
   39:     fprintf(stderr,"Couldn't set env(DISPLAY) = %s\n",rDisplay);
   40:     return -3;
   41:   }
   42: 
   43:   q = Tcl_Merge(argc-1, argv+1);
   44:   Tcl_SetVar(gInterp, "argv", q, TCL_GLOBAL_ONLY);
   45:   ckfree(q);
   46:   sprintf(buffer, "%d", argc-1);
   47:   Tcl_SetVar(gInterp, "argc", buffer, TCL_GLOBAL_ONLY);
   48:   Tcl_SetVar(gInterp, "argv0", argv[0],TCL_GLOBAL_ONLY);
   49:   Tcl_SetVar(gInterp, "tcl_interactive","0", TCL_GLOBAL_ONLY);
   50: 
   51:   if (Tcl_Init(gInterp) == TCL_ERROR) 
   52:   {
   53:     fprintf(stderr,"Tcl_Init error\n");
   54:     fprintf(stderr,"%d\n",TCL_ERROR);
   55:     fprintf(stderr,"%s\n",gInterp->result);
   56:     return -4;
   57:   }
   58:   
   59:   if (Tk_Init(gInterp) == TCL_ERROR) 
   60:   {
   61:     fprintf(stderr,"Tk_Init error\n");
   62:     fprintf(stderr,"%d\n",TCL_ERROR);
   63:     fprintf(stderr,"%s\n",gInterp->result);
   64:     return -5;  
   65:   }
   66: 
   67:   Grader_Init(gInterp);
   68: 
   69:   sprintf(filename,"./utils.tcl");
   70:   if( capa_access(filename, F_OK) == -1 ) {
   71:     sprintf(filename,"/usr/local/bin/Grader/utils.tcl");
   72:     if( capa_access(filename, F_OK) == -1 ) {
   73:       sprintf(filename,"/usr/local/lib/CAPA45/utils.tcl");
   74:       if( capa_access(filename, F_OK) == -1 ) {
   75: 	sprintf(filename,"/usr/local/lib/utils.tcl");
   76: 	if( capa_access(filename, F_OK) == -1 ) {
   77: 	  sprintf(filename,"/usr/local/lib/utils.tcl");
   78: 	  if( capa_access(filename, F_OK) == -1 ) {
   79: 	    sprintf(filename,"/usr/local/lib/CAPA45/Grader/utils.tcl");
   80: 	    if( capa_access(filename, F_OK) == -1 ) {
   81: 	      sprintf(filename,"/usr/lib/utils.tcl");
   82: 	      if( capa_access(filename, F_OK) == -1 ) { /* I gave up! */
   83: 		found=0;
   84: 	      } 
   85: 	    }
   86: 	  }
   87: 	} 
   88:       }
   89:     }
   90:   }
   91: 
   92:   if( found ) {
   93:     if (Tcl_EvalFile(gInterp, filename) != TCL_OK) 
   94:       {
   95: 	fprintf(stderr,"%s\n",gInterp->result);
   96: 	return -6;
   97:       }
   98:   } else {
   99:     fprintf(stderr,"Unable to find utils.tcl\n");
  100:     exit(-7);
  101:   }
  102: 
  103:   sprintf(filename,"./common.tcl");
  104:   if( capa_access(filename, F_OK) == -1 ) {
  105:     sprintf(filename,"/usr/local/bin/Grader/common.tcl");
  106:     if( capa_access(filename, F_OK) == -1 ) {
  107:       sprintf(filename,"/usr/local/lib/CAPA45/common.tcl");
  108:       if( capa_access(filename, F_OK) == -1 ) {
  109: 	sprintf(filename,"/usr/local/lib/common.tcl");
  110: 	if( capa_access(filename, F_OK) == -1 ) {
  111: 	  sprintf(filename,"/usr/local/lib/common.tcl");
  112: 	  if( capa_access(filename, F_OK) == -1 ) {
  113: 	    sprintf(filename,"/usr/local/lib/CAPA45/Grader/common.tcl");
  114: 	    if( capa_access(filename, F_OK) == -1 ) {
  115: 	      sprintf(filename,"/usr/lib/common.tcl");
  116: 	      if( capa_access(filename, F_OK) == -1 ) { /* I gave up! */
  117: 		found=0;
  118: 	      } 
  119: 	    }
  120: 	  }
  121: 	} 
  122:       }
  123:     }
  124:   }  
  125:   if( found ) {
  126:     if (Tcl_EvalFile(gInterp, filename) != TCL_OK) 
  127:       {
  128: 	fprintf(stderr,"%s\n",gInterp->result);
  129: 	return -6;
  130:       }
  131:   } else {
  132:     fprintf(stderr,"Unable to find common.tcl\n");
  133:     exit(-7);
  134:   }
  135: 
  136:   sprintf(filename,"./grader.tcl");
  137:   if( access(filename, F_OK) == -1 ) {
  138:     sprintf(filename,"/usr/local/lib/CAPA45/grader.tcl");
  139:     if( access(filename, F_OK) == -1 ) {
  140:       sprintf(filename,"/usr/local/lib/grader.tcl");
  141:       if( access(filename, F_OK) == -1 ) {
  142:         sprintf(filename,"/usr/local/lib/CAPA45/Grader/grader.tcl");
  143:         if( access(filename, F_OK) == -1 ) {
  144:           sprintf(filename,"/usr/lib/grader.tcl");
  145:           if( access(filename, F_OK) == -1 ) {
  146: 	    sprintf(filename,"/usr/local/bin/Grader/grader.tcl");
  147:             if( access(filename, F_OK) == -1 ) { /* I gave up! */
  148:               found=0;
  149:             } 
  150:           }
  151:         }
  152:       } 
  153:     }
  154:   }
  155:  
  156:   /*
  157:   fprintf(stderr,"HEY STILL IN DEVELOPEMENT MODE\n");
  158:   if (Tcl_EvalFile(gInterp, "grader.tcl") 
  159:       != TCL_OK) 
  160:   {
  161:     fprintf(stderr,"%s\n",gInterp->result);
  162:     return -6;
  163:   }
  164:   */
  165: 
  166:   if( found ) {
  167:     if (Tcl_EvalFile(gInterp, filename) != TCL_OK) 
  168:     {
  169:       fprintf(stderr,"%s\n",gInterp->result);
  170:       return -6;
  171:     }
  172:     while(Tcl_DoOneEvent(TCL_ALL_EVENTS));
  173:   } else {
  174: 	fprintf(stderr,"Unable to find grader.tcl\n");
  175: 	exit(-7);
  176:   }
  177:   
  178:   return 0;
  179: }
  180: 
  181: 
  182: 
  183: 

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