import java.util.concurrent.*;
import java.util.concurrent.locks.*;

public class CardReader{
    Byte[] Card = new Byte[80];
    Lock mutex = new ReentrantLock();
    int index = 0;
    boolean isEmpty = true;
    Condition bufferIsEmpty = mutex.newCondition();
    Condition bufferHasData = mutex.newCondition();

    public void putCard(Byte[] card) throws InterruptedException{
        int i;
        mutex.lock();
        try{
          while (!isEmpty) bufferIsEmpty.await();
          for (i=0; i<80; i++) Card[i] = card[i];
          isEmpty=false;
          bufferHasData.signal();
	}
	finally{
	      mutex.unlock();
	}
    }

    public Byte getChar() throws InterruptedException{
        Byte actual;
	mutex.lock();
        try{
          while (isEmpty) bufferHasData.await();
          actual = Card[index];
          index++;
          if (index >= 80) {
	      index = 0;
              isEmpty = true;
              bufferIsEmpty.signal();
	  }
          return actual;
	}
	  finally{
	      mutex.unlock();
	  }
    }
}
