/* * Bioinfo Animal Pictures Archive - Search CGI script * APAsrch.c - Using GET method * Resulting program : APAsrch.cgi * Kim, Jinsuk [jskim@bioinfo.kordic.re.kr] */ #include #include #include #define LIST "sizeANDlist" /* file name list by '\ls -FCs > sizeANDlist' */ #define ARCH_DIR "animal" /* virtual directory of the archive */ #define WEB_MASTER "jskim@bioinfo.kordic.re.kr" /* Web master's email */ #define ACC_NUM_FILE "log/cgi_counter.dat" void strlower(char *org_s) /* small capitalize a string */ { char c, buf[256]; int i; for(i=0; i<=strlen(org_s); i++) { if ( isalpha(org_s[i]) && isupper(org_s[i]) ) org_s[i] = org_s[i] + 32; } buf[i] = '\0'; } int APAsrch(char *fname, int flag) { FILE *fp; /* file pointers to open index files */ int i, j; /* general purposes */ int k=0; /* number of retrieval in a index file */ int fsize; /* file size in Kbytes */ char *query, target[255], buf[255]; query = getenv("QUERY_STRING"); /* get string of GET method */ query = query+3; strlower(query); /* File Open Error detection */ if ( (fp=fopen(fname, "r")) == NULL ) { printf("List file open error.

\n"); printf("Contact ", WEB_MASTER); printf("Web master.

\n"); exit(1); } fgets( buf, 255, fp); /* remove first line of LIST1 */ if ( !strcmp(query, "all") ) { while (!feof(fp)) { fscanf(fp, "%d %s", &fsize, target); printf("

  • ", ARCH_DIR, flag, target); printf("%s (%dKb)\n", target, fsize); k++; } } else { while (!feof(fp)) { fscanf(fp, "%d %s", &fsize, target); strcpy(buf, target); strlower(target); if ( strstr(target, query) ) { printf("
  • ", ARCH_DIR, flag, buf); printf("%s%d/%s (%dKb)\n", ARCH_DIR, flag, buf, fsize); k++; } } } fclose(fp); return k; } main() { char *target; int num_retrieval=0; long int n; FILE *fp; target=getenv("QUERY_STRING"); /* get string of GET method */ if (strstr(target, "qt=")) target=target+3; else target="\0"; printf("Content-type: text/html%c%c",10,10); printf(""); printf("\n"); printf("Bioinfo Animal Pictures Archive Search \"%s\"\n", target); printf("\n"); printf("\n"); printf("
    \n"); printf("
    This CGI program is old-fashioned. Try new\n"); printf("", target); printf("APAsrch2.cgi,\n"); printf("which supports searching with wild card characters, \n"); printf("downloading image through mail, image preview, \n"); printf("and enhanced image view.\n"); printf("
    \n"); if (strlen(target) > 0) { printf("
      \n"); num_retrieval += APAsrch("sizeANDlist1", 1); num_retrieval += APAsrch("sizeANDlist2", 2); num_retrieval += APAsrch("sizeANDlist3", 3); num_retrieval += APAsrch("sizeANDlist4", 4); num_retrieval += APAsrch("sizeANDlist5", 5); num_retrieval += APAsrch("sizeANDlist6", 6); num_retrieval += APAsrch("sizeANDlist7", 7); printf("
    \n"); if (num_retrieval <= 0) { printf("Sorry, currently this archive has no "); printf("%s image.

    \n", target); } else { printf("%d images and descritions of ", num_retrieval); printf("%s found.

    \n", target); } } else { printf("

    Enter Search Keywords\n"); } printf("

    \n"); printf("
    \n"); printf("\n\n"); printf("\n"); printf("\n\n\n"); printf("\n"); printf("\n
    Search:\n"); printf("\n"); printf("
    Tips:Case-insensitive; Partial words will be matched; Use singular noun
    \n"); printf("
    \n

    \n


    \n"); printf("

    \n"); printf("[ BIOINFO HOME ]
    \n"); printf("[ Animal Pictures Archive Home ]
    \n"); printf("[ Animal Movies ]
    \n"); printf("


    \n"); printf("
    \n"); printf("
    \n"); printf("
    \n"); printf(""); if((fp=fopen(ACC_NUM_FILE, "r"))==NULL){ printf("OOPS! Counter File Open Error"); exit(1); } fscanf(fp,"%d",&n); fclose(fp); if((fp=fopen(ACC_NUM_FILE, "w"))==NULL){ printf("OOPS! Counter File Open Error"); exit(1); } fprintf(fp,"%d\n",n+1); fclose(fp); exit(0); }