home *** CD-ROM | disk | FTP | other *** search
- #include <stdlib.h>
- #include <stdio.h>;
- #include <time.h>;
- #include "ctype.h";
- #include "tolower.c"
- #include "toupper.c"
- #include "vntype.c"
- #include "wildmatc.c"
-
-
- main(argc,argv)
- int argc; char *argv[];
- {
- FILE *infile; int argno;
- int initial_mode = 1; int find_file = 0;
- if (argc <2 ) { printf("Usage: %s filename \n",argv[0]);exit(1);}
- for (argno = 1; argno < argc; argno++) {
- if (strcmp(argv[argno],"-M")==0) {initial_mode = 0; continue;}
- if (strcmp(argv[argno],"-m")==0) {initial_mode = 0; continue;}
- if (strcmp(argv[argno],"-V")==0) {initial_mode = 1; continue;}
- if (strcmp(argv[argno],"-v")==0) {initial_mode = 1; continue;}
- if (!find_file) find_file = 1;
- if ((infile = fopen(argv[argno], "r")) == NULL)
- { fprintf(stderr, "%s: Can't open '%s' for input.\n",
- argv[0],argv[argno]);
- }
- else
- { sevento8(infile,initial_mode);
- fclose(infile);
- }
- }/*for*/
- if (!find_file) sevento8(stdin,initial_mode);
- }
-
- int readln(file,buffer,mat)
- FILE *file;
- char *buffer;
- int mat;
- {
- char buffer1[256];
- int i,c;
- buffer1[0] = '\0';
- if (fgets(buffer1,256,file) != NULL)
- {
- if (mat)
- for (i=0;buffer1[i] !='\n';i++)
- buffer1[i] = buffer1[i] - 1;
- for (i=0;i<= strlen(buffer1);i++)
- if (buffer1[i]!= ' ' && buffer1[i] != '\t') break;
- strcpy(buffer,&buffer1[i]);
- strcpy(buffer1,buffer);
- buffer[0] = '\0';
- sscanf(buffer1,"%[^\n]%*c",buffer);
- return 1;
- }
- else return 0;
- }
-
- sevento8(file)
- FILE *file;
-
- {
- int num_answer=1, retry = 0, total_score=0, re_read = 0;
- int print_answer=0;
- int num_question=0,correct = 0;
- int mat;
- int i,j,k,l;
- char c,ch,buffer[256],oldbuffer[256];
- char answer[10][80];
- time_t t;
-
- c = getc(file);
- if (c==1) mat = 1;
- else {ungetc(c,file); mat = 0;}
- while (1)
- {
- if (re_read) {re_read = 0;strcpy(buffer,oldbuffer);}
- else {if (readln(file,buffer,mat)==0) break;strcpy(oldbuffer,buffer);}
- if (wildmat(buffer,".question"))
- { ++num_question;
- while (readln(file,buffer,mat)){
- if (buffer[0]=='.') {strcpy(oldbuffer,buffer);
- re_read = 1; break;}
- else printf("%s\n",buffer);
- }
- }
- else if (wildmat(buffer,".answer"))
- {num_answer=0;
- while (readln(file,buffer,mat))
- {
- if (buffer[0] == '.') {strcpy(oldbuffer,buffer);
- re_read =1; break;}
- else
- {
- if (strcmp(buffer,"") != 0)
- {
- for(i=0;i<=strlen(buffer);i++) if (isupper(buffer[i])){
- c = tolower(buffer[i]); buffer[i] = c;}
- strcpy(answer[++num_answer],buffer);
- }
- }
- }
- j = 0;
- again:
- buffer[0] = '\0';
- scanf(" %[^\n]%*c",buffer);
- for(i=0;i<=strlen(buffer);i++) if (isupper(buffer[i])){
- c = tolower(buffer[i]); buffer[i] = c;}
- for (k=1; k<= num_answer;k++)
- if (correct = wildmat(buffer,answer[k])) break;
-
- if (!correct && (++j <= retry)){
- printf("Try again\n"); goto again;}
- if (correct) total_score ++;
- if (print_answer)
- {
- if (correct) printf(">>>>>>> Good ! <<<<<<<\n\n");
- printf("Correct answer is : %s \n",answer[1]);
- for (i=2;i<= num_answer;i++)
- printf(" or : %s \n",answer[i]);
- printf("\n\n\n");
- }
- }/*end if .answer*/
- else if (wildmat(buffer,".retry*")) sscanf(buffer,".retry %d",&retry);
- else if (wildmat(buffer,".print*")) print_answer =1;
-
- } /* while 1 */
- printf("\n\nEND OF TEST\n\n");
- srand((unsigned) time(&t));
- if (mat)
- printf("Your score is :%#02d%#03d%#02d\n\n",rand()%100,total_score,
- rand()%100);
- else
-
- printf("Your score is: %d/%d\n\n",
- total_score,num_question);
- }
-
-