#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>

FILE *fp1;
FILE *fp2;
FILE *fp3;

char seekstr[10][82];
int  seekcnt;

main(argc,argv)
   int argc;
   char *argv[];
     {
      int  bodyflg , i ,drn;
      char hdrmot[40], hdrwrk[40], msgfil[40], offset;
      char fbuff[256], fbuff2[256];
        
      if ( argc < 5 ) { printf("param err!\n"); exit(1); }
      bodyflg = atoi(argv[3]);

      for ( i = 0 ; i < 10 ; i++ ) { seekstr[i][0] =NULL; }

      seekcnt = argc;
      seekcnt = seekcnt - 5;
      if ( seekcnt > 9 ) seekcnt = 9;
      for ( i = 0 ; i <= seekcnt ; i++ ) 
          { strcpy(seekstr[i],argv[i + 4]); }

      strcpy(hdrmot,argv[4]);
      strcpy(hdrwrk,argv[2]);
            
      fp1 = fopen(hdrmot,"r");
      fp2 = fopen(hdrwrk,"w");
      while(1)
      {  if ( fgets(fbuff,255,fp1) == NULL ) break;
         substr(fbuff,15,47,fbuff2);
         if ( hdrseek(fbuff2) )
            { if ( bodyflg)
               {  substr(fbuff,0,4,msgfil);
	 	  i = atoi(msgfil); drn = i / 100;
                  sprintf(msgfil,"%s%02d\\msg%04d",argv[1],drn,i);
		  offset = drn / 1000;
		  msgfil[0] = msgfil[0] + offset;
                  if ( bodyseek(msgfil) ) { continue; } 
                }
             else
                { continue; }
             }
         fputs(fbuff,fp2);
      }
      
      fclose(fp1); fclose(fp2);
      
      fp1 = fopen(hdrwrk,"r");
      fp2 = fopen(hdrmot,"w");
      while( fgets(fbuff,255,fp1) )
      {  fputs(fbuff,fp2); }
      fclose(fp1); fclose(fp2);
      remove(hdrwrk);
      
      exit(0);
      }

hdrseek(sent)
     char sent[];
     {
      int i,y,z;
      char seekptr[10];
      for ( z = 0 ; z < 10 ; z++ ) { *(seekptr + z) = 0; }
     
      for( i = 0 ; i < strlen(sent); i++ )
           {  if ( *(sent + i) == 0x0d ) continue;
              for ( z = 0 ; z <= seekcnt ; z++ )
               {
                 while(1)
                  {  y = *(seekptr + z);
                     if ( seekstr[z][y] == *(sent + i) )
                        { y++; *(seekptr + z) = y;
                          if ( seekstr[z][y] == NULL )
                             {  return(0); }
                          break;
                        }
                     else
                        { if ( y == 0 ) { break; }
                          else          { *(seekptr + z) = 0; }
                        }
                   }
                 }
            }
       return(1);
     }

bodyseek(bfile)
    char bfile[];
    {
      int y,z,ch;
      char seekptr[10];

      for ( z = 0 ; z < 10 ; z++ ) { *(seekptr + z) = 0; }

      if ( ( fp3 = fopen(bfile,"r") ) == NULL ) { return(1); }

      while(1)
           {  if ( feof(fp3) )  break;
              ch = fgetc(fp3);
              if ( iscntrl(ch) ) continue;
              for ( z = 0 ; z <= seekcnt ; z++ )
               {
                 while(1)
                  {  y = *(seekptr + z);
                     if ( seekstr[z][y] == (char)ch )
                        { y++; *(seekptr + z) = y;
                          if ( seekstr[z][y] == NULL )
                             {  fclose(fp3);
                                return(0); }
                          break;
                        }
                     else
                        { if ( y == 0 ) { break; }
                          else          { *(seekptr + z) = 0; }
                        }
                   }
                 }
            }
      fclose(fp3);
      return(1);
     }

    
substr(buff1,n1,n2,buff2)      /* Ó¼ÞÚÂ ÌÞÝ¶Â */
     char buff1[];
     int n1;
     int n2;
     char buff2[];
    { int i;
      int j = 0;
      for ( i = n1; j < n2; i++ )
          {  *(buff2 + j) = *(buff1 + i);
             j++;
          }
      *(buff2 + j) = NULL;
      return(0);
    }
    

