//import java.io.*;
import java.lang.String ;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Stringmatching extends Applet implements ActionListener{
 
 int MAX_LENGTH = 10;
 int STR_LENGTH = 4;
 
 char master[] = new char[10];
 char substr[] = new char[4];
 
 String Master = new String(master);
 String Substr = new String(substr);
 
 TextField mas,sub;
 
 Thread t = null;
 boolean stopFlag;
 
 Button str;
 
 String ans="Press Start to Start the applet ";
 
 int result=0;
 int a=1;
 
public void stringcomp(int ms, int ss) {
	 result = 0;
     while((ms<Master.length())&&(ss<Substr.length())) {
           if(substr[ss]=='*') {
             
            ss++;
           if(ss==Substr.length()-1){
                 result=1;  break;
            }
           while((substr[ss]!=master[ms])&&(ms<Master.length())) ms++;
            }//end * if
     
           if(substr[ss]=='?') {
              if(ss==Substr.length()-1){
                 result=1;  break;
               }
              ms++;ss++;
              }//end? if
          else{
           if(substr[ss]== master[ms]){
              if(ss==Substr.length()-1){
                 result=1;  break;
                   }
              ms++;ss++; 
            }//
          else {
               ms++;ss=0;
             }
            }//end of else
             
      }//end of while 
    } //end of strngcomp

 public void init(){
 
 Label masterp = new Label("Master String: ", Label.RIGHT);
 Label subp = new Label("Sub String: ", Label.RIGHT); 
 
  mas = new TextField(MAX_LENGTH);
  sub = new TextField(STR_LENGTH);
  
  add(masterp);
  add(mas);
  add(subp);
  add(sub);
  
  mas.addActionListener(this);
  sub.addActionListener(this);
  
  
  str = new Button("Start");
  add(str);
  str.addActionListener(this);

  setBackground(Color.pink);
  setForeground(Color.black);
  repaint();
  
  }// end init

  public void actionPerformed(ActionEvent ae){
    String command = ae.getActionCommand();
   
    if( !command.equals("Start")) return;
         
        Master = mas.getText();
        Substr = sub.getText();
  
        Master.getChars(0,Master.length(),master,0);
        Substr.getChars(0,Substr.length(),substr,0);
  	stringcomp(0,0);
  
    if(result==1) ans= " Pattern exist in the Master String";
    else ans = " Pattern does not exist in the String ";

    repaint();
    }

 public void paint(Graphics g){
   
   Master = "The Master String is : " + Master;
   g.drawString(Master,50,50);
   
   Substr = "The Sub. String  is : " + Substr;
   g.drawString(Substr, 50,80);
   
   g.drawString(ans,120,120);

    }//end of paint

 public void stop(){
  stopFlag = true;
  t= null;
 }// end stop

 }//end of String Matching