Annotation of capa/capa51/pProj/allcapaid.c, revision 1.1

1.1     ! albertel    1: 
        !             2: /* ========================================================================== */
        !             3: /* ========================================================================== */
        !             4: /*            allcapaid.c    created by Isaac Tsai                            */
        !             5: /*                                1998, 1999 copyrighted by Isaac Tsai        */
        !             6: /**************************************************************************** */
        !             7: #ifdef NeXT
        !             8: #include <stdlib.h>
        !             9: #include <sys/types.h>
        !            10: #include <sys/stat.h>  
        !            11: #else
        !            12: #include <malloc.h>
        !            13: double atof();
        !            14: #endif
        !            15: 
        !            16: #include <stdio.h>
        !            17: #include <ctype.h>
        !            18: #include <sys/types.h>
        !            19: #include <sys/stat.h>  
        !            20:  
        !            21: #include <signal.h>
        !            22: #include <time.h>
        !            23: #include <math.h>
        !            24: #include <string.h>
        !            25: #ifdef NeXT
        !            26: #include <bsd/curses.h>
        !            27: #else
        !            28: #include <curses.h>
        !            29: #endif
        !            30: #define   YES    1
        !            31: 
        !            32: #include "capaCommon.h"
        !            33: #include "ranlib.h"
        !            34: 
        !            35: char  *progname;
        !            36: 
        !            37: /* filter out the number to be [1:999] */
        !            38: int  scan_num(char *num_str,int *first, int *second) {
        !            39:   char  tmp_str[SMALL_LINE_BUFFER], *ch;
        !            40:   int   ii=0, a_num, b_num, result=0;
        !            41:   
        !            42:   ch = num_str;
        !            43:   tmp_str[ii] = 0;
        !            44:   while( isspace(*ch) ) ch++;
        !            45:   while(isdigit(*ch)) { tmp_str[ii++] = *ch; ch++; }
        !            46:   tmp_str[ii] = 0;
        !            47:   sscanf(tmp_str,"%d",&a_num);
        !            48:   if( a_num < 0 || a_num > 999 ) a_num = 1;
        !            49:   *first = a_num;
        !            50:   result = 1;
        !            51:   while( isspace(*ch) ) ch++;
        !            52:   if( *ch == ':' ) {
        !            53:     ch++;
        !            54:     while( isspace(*ch) ) ch++;
        !            55:     ii=0; tmp_str[ii] = 0;
        !            56:     while( isdigit(*ch) ) { tmp_str[ii++] = *ch; ch++; }
        !            57:     tmp_str[ii] = 0;
        !            58:     sscanf(tmp_str,"%d",&b_num);
        !            59:     if( b_num < 0 || b_num > 999 ) b_num = 1;
        !            60:     if( a_num > b_num )           b_num = a_num;
        !            61:     *second = b_num;
        !            62:     result = 2;
        !            63:   }
        !            64:   return (result);
        !            65: }
        !            66: 
        !            67: void print_capaidplus (FILE *out,char* stunum,int set,int plus) 
        !            68: {
        !            69:   char fmt[SMALL_LINE_BUFFER];
        !            70:   sprintf(fmt,"%%%dc",4+plus);
        !            71:   fprintf(out,"%s ", capa_id_plus(stunum, set, plus));
        !            72: }
        !            73: 
        !            74: void print_capaidplus_header1(FILE *dfp,int StartSet,int EndSet,int plus)
        !            75: {
        !            76:   int pluscnt,setIdx;
        !            77:   for(setIdx = StartSet; setIdx <= EndSet; setIdx++)   
        !            78:     {
        !            79:       fprintf(dfp,"%3d",setIdx);
        !            80:       for(pluscnt=0; pluscnt < (plus+2); pluscnt++)
        !            81: 	fprintf(dfp," ");
        !            82:     }
        !            83: }
        !            84: 
        !            85: void print_capaidplus_header2(FILE *dfp,int StartSet,int EndSet,int plus)
        !            86: {
        !            87:   int setIdx,pluscnt;
        !            88:   for(setIdx = StartSet; setIdx <= EndSet; setIdx++) {
        !            89:     for(pluscnt=0; pluscnt < (plus+4); pluscnt++)
        !            90:       fprintf(dfp,"-");
        !            91:     fprintf(dfp,"|");
        !            92:   }
        !            93: }
        !            94: 
        !            95: void usage()
        !            96: {
        !            97:   printf("USAGE: %s [-s start-set] [-e end-set] [-stu student-number] [-c class-directory] [-d output-directory] [-h] [-i] [-p number] [-sec [n|n:m]]\n", progname);
        !            98:   printf("       start-set : default 1\n");
        !            99:   printf("       end-set   : default 10\n");
        !           100:   printf("       student-number  : no default\n");
        !           101:   printf("       class-directory : no default\n");
        !           102:   printf("       output-directory: class-directory/capaID\n");
        !           103:   printf("       -Sec 3          : for section 3\n");
        !           104:   printf("       -Sec 3:7        : from section 3 to section 7\n");
        !           105:   printf("       -i              : don't create files, print to the screen\n");
        !           106:   printf("       -p 2            : output 6 charatcer capaidplus instead of capaid\n");
        !           107:   printf("       -h              : prints this message\n");
        !           108:   printf("       CAPA version %s, %s\n",CAPA_VER,COMPILE_DATE);
        !           109: }
        !           110: #define  F_CLASS       1
        !           111: #define  F_SECTIONS    2
        !           112: #define  F_STUDENT     3
        !           113: int main (int argc, char  **argv) 
        !           114: {
        !           115:   T_student  *students_p,*s_p;
        !           116:   int         i, setIdx, numStudents, count, tmp_num, StartSec=1,EndSec=999;
        !           117:   int         StartSet = 1, EndSet = 10, classnameOK=0,outputDir=0,plus=0;
        !           118:   int         SecCntArry[MAX_SECTION_COUNT], sectionIdx;   
        !           119:   char        filename[MAX_BUFFER_SIZE], path[MAX_BUFFER_SIZE], 
        !           120:     outputPath[MAX_BUFFER_SIZE], fullpath[MAX_BUFFER_SIZE];
        !           121:   char        StuNum[MAX_STUDENT_NUMBER+1];
        !           122:   int         ForWhat=F_CLASS, interactive=0;
        !           123:   FILE       *dfp;
        !           124:   
        !           125:   if( argc == 0 ) {
        !           126:     usage();
        !           127:     exit(0);
        !           128:   }
        !           129:   
        !           130:   for( progname = *argv++; --argc; argv++) {
        !           131:     if ( argv[0][0] == '-' && (strlen(argv[0]) > 1 ) ) {
        !           132:       switch(argv[0][1]) {
        !           133:       case 'S':
        !           134:       case 's':
        !           135: 	if( strncasecmp(argv[0],"-stu",4) == 0 ) {
        !           136: 	  for(i=0;i<MAX_STUDENT_NUMBER;i++) {
        !           137: 	    StuNum[i] = argv[1][i];
        !           138: 	  }
        !           139: 	  StuNum[i]=0;
        !           140: 	  ForWhat = F_STUDENT;
        !           141: 	} else if( strncasecmp(argv[0],"-sec",4) == 0 ) {
        !           142: 	  tmp_num = scan_num(argv[1],&StartSec,&EndSec);
        !           143: 	  if (tmp_num == 1 ) { EndSec = StartSec;  }
        !           144: 	  ForWhat = F_SECTIONS;
        !           145: 	} else if( strncasecmp(argv[0],"-s",2) == 0 ) {
        !           146: 	  StartSet = atol(argv[1]);
        !           147: 	  if( StartSet <= 0 ) StartSet = 1;
        !           148: 	}
        !           149: 	break;
        !           150:       case 'p':
        !           151:         plus = atol(argv[1]);
        !           152: 	break;
        !           153:       case 'e':
        !           154: 	EndSet = atol(argv[1]);
        !           155: 	if( EndSet > 999 ) EndSet = 99;
        !           156: 	break;
        !           157:       case 'c':
        !           158: 	strcpy(path,argv[1]);
        !           159: 	if( capa_access(path, F_OK) == -1 ) {
        !           160: 	  printf("No such class [%s] please specify it again:\n",path);
        !           161: 	  classnameOK = 0;
        !           162: 	} else {
        !           163: 	  classnameOK = 1;
        !           164: 	}
        !           165: 	break;
        !           166:       case 'i':
        !           167: 	interactive = 1; 
        !           168: 	break;
        !           169:       case 'd':
        !           170: 	strcpy(outputPath,argv[1]);
        !           171: 	outputDir=1;
        !           172: 	break;
        !           173:       case 'u': case 'h': default:
        !           174: 	usage(); 
        !           175: 	exit(0);
        !           176: 	break;
        !           177:       }
        !           178:     }
        !           179:   }
        !           180:   if( StartSet > EndSet ) StartSet = EndSet;
        !           181:   while ( !classnameOK ) {
        !           182:     puts("Enter the ABSOLUTE path of class from root (/)");
        !           183:     scanf("%s", path);
        !           184:     if( capa_access(path, F_OK) == -1 ) {
        !           185:       printf("No such class, please specify it again:\n");
        !           186:     } else {
        !           187:       classnameOK = 1;
        !           188:     }
        !           189:   }
        !           190:   
        !           191:   if (!interactive) {
        !           192:     if (outputDir) {
        !           193:       sprintf(fullpath,"%s",outputPath);
        !           194:     } else {
        !           195:       sprintf(fullpath,"%s/capaID",path);
        !           196:     }
        !           197:     if( capa_access(fullpath, F_OK) == -1 ) {
        !           198:       if ( mkdir(fullpath, S_IREAD | S_IWRITE | S_IEXEC ) == -1 ) {
        !           199: 	printf("Unable to write to %s\n",fullpath);
        !           200: 	printf("Please check this directory and run %s again.\n",progname);
        !           201: 	return(-1);
        !           202:       }
        !           203:     }
        !           204:   }
        !           205:   
        !           206:   chdir(path);
        !           207:   switch(ForWhat) {
        !           208:   case F_STUDENT:
        !           209:     printf("\n");
        !           210:     for(setIdx = StartSet; setIdx <= EndSet; setIdx++) {
        !           211:       printf("%4d ", setIdx );
        !           212:     }
        !           213:     printf("\n");
        !           214:     for(setIdx = StartSet; setIdx <= EndSet; setIdx++) {
        !           215:       if (plus) 
        !           216: 	print_capaidplus(stdout,StuNum,setIdx,plus);
        !           217:       else 
        !           218: 	printf("%4d ", capa_PIN(StuNum, setIdx,0) );
        !           219:     }
        !           220:     printf("\n"); fflush(stdout);
        !           221:     break;
        !           222:   case F_CLASS:
        !           223:     StartSec=1;EndSec=999;
        !           224:   case F_SECTIONS:
        !           225:     if ((count = capa_get_section_count( SecCntArry )) != 0 ) {
        !           226:       if (count == -1 ) {
        !           227: 	printf("classl file not found in %s\n",path);
        !           228: 	exit (-1);
        !           229:       }
        !           230:       for(sectionIdx = StartSec; 
        !           231: 	  (sectionIdx <= SecCntArry[0]) && (sectionIdx <= EndSec);
        !           232: 	  sectionIdx++) {
        !           233: 	if( SecCntArry[sectionIdx] > 0 ) {
        !           234: 	  if ( interactive ) {
        !           235: 	    dfp=stdout;
        !           236: 	  } else {
        !           237: 	    sprintf(filename,"%s/section%d.capaid",fullpath,sectionIdx);
        !           238: 	    if((dfp=fopen(filename,"w"))==NULL) {
        !           239: 	      printf("Unable to create %s\n",filename);
        !           240: 	      exit(-2);
        !           241: 	    }
        !           242: 	  }
        !           243: 	  
        !           244: 	  numStudents = capa_get_section(&students_p, sectionIdx);
        !           245: 	  printf("Section %d, %d students\n",
        !           246: 		 sectionIdx, numStudents);
        !           247: 	  
        !           248: 	  fprintf(dfp,"Section %d   Student    NAME      NUMBER   ",sectionIdx);
        !           249: 	  if (plus) {
        !           250: 	    print_capaidplus_header1(dfp,StartSet,EndSet,plus);
        !           251: 	  } else {
        !           252: 	    for(setIdx = StartSet; setIdx <= EndSet; setIdx++)   
        !           253: 	      fprintf(dfp,"%3d  ",setIdx);
        !           254: 	  }
        !           255: 	  
        !           256: 	  fprintf(dfp,"\n");
        !           257: 	  fprintf(dfp,"------------------------------|----------|");
        !           258: 	  if (plus) {
        !           259: 	    print_capaidplus_header2(dfp,StartSet,EndSet,plus);
        !           260: 	  } else {
        !           261: 	    for(setIdx = StartSet; setIdx <= EndSet; setIdx++) 
        !           262: 	      fprintf(dfp,"----|");
        !           263: 	  }
        !           264: 	  fprintf(dfp,"\n");
        !           265: 	  for(s_p = students_p; s_p ; s_p = s_p->s_next ) {
        !           266: 	    fprintf(dfp,"%s %s  ",s_p->s_nm, s_p->s_sn);
        !           267: 	    for(setIdx = StartSet; setIdx <= EndSet; setIdx++) {
        !           268: 	      if (plus) 
        !           269: 		print_capaidplus(dfp,s_p->s_sn,setIdx,plus);
        !           270: 	      else 
        !           271: 		fprintf(dfp,"%4d ", capa_PIN(s_p->s_sn, setIdx,0) );
        !           272: 	    }
        !           273: 	    fprintf(dfp,"\n");
        !           274: 	  }
        !           275: 	  fflush(dfp);
        !           276: 	  if (!interactive) fclose(dfp); 
        !           277: 	}
        !           278:       }
        !           279:     }
        !           280:   }
        !           281:   return (0);
        !           282: }
        !           283: 

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