1   package fi.jyu.mit.ohj2;
2   
3   import java.io.*;
4   
5   /**
6    * Readkey.java
7    *
8    * Luokka yhden merkin lukemiseen,
9    * tarvitsee polkuun joko tiedoston
10   * libreadkey.so tai readkey.dll,
11   * muutoin vaatii enterin painalluksen
12   *
13   * @author Markku Vire, Jukka Mäntylä
14   * @version 0.96 12.2.2003
15   */
16  class Readkey
17  {
18    private static native char getCharNative();
19    private static boolean islib = false;
20    private static BufferedReader linereader;
21  
22    static {
23      try {
24        System.loadLibrary("readkey"); // NOPMD
25        islib = true;
26      }
27      // Jos ei pystytä lataamaan kirjastoa, niin
28      // käytetään default-versiota merkin lukemisessa
29      catch (UnsatisfiedLinkError e) { e.getMessage(); }
30      catch (SecurityException e)    { e.getMessage(); }
31  
32      init();
33  
34    }
35  
36    
37    /**
38     * Alustetaan lukijaluokka
39     */
40    public static void init() {
41        if (!islib) linereader = new BufferedReader(new InputStreamReader(System.in));
42    }
43    
44    /**
45     *
46     * Lukee yhden merkin näppäimistöltä
47     * @return Palauttaa luetun merkin
48     */
49    public static char getChar() {
50      if (islib) return getCharNative();
51      // default-versio:
52      String s = "";
53      try {
54        s = linereader.readLine();
55      } catch (IOException ex) { // NOPMD
56      }
57      if ( ( s == null ) || ( s.equals("") ) ) return '\n';
58      return s.charAt(0);
59    }
60  
61    /**
62     * Palauttaa tiedon siitä onko käyttöjärjestelmäkohtainen
63     * readkey-kirjasto käytössä
64     * @return Palauttaa tiedon onko readkey-kirjasto käytössä
65     */
66    public static boolean isLibLoaded() {
67      return islib;
68    }
69  
70    /** 
71     * Testataan Readkey-kirjastoa
72     * @param args ei käytössä
73     */
74    public static void main(String[] args)
75    {
76      if (isLibLoaded()) 
77        System.out.print("readkey-kirjasto ladattu.\nAnna merkki:");
78      else 
79        System.out.print("readkey-kirjastoa ei löytynyt.\nAnna kirjain ja paina enter:");
80      char c = Readkey.getChar();
81      if (isLibLoaded()) System.out.println(c);
82      System.out.println("Annoit merkin: " + c);
83    }
84  
85  }
86