/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class it_kya_io_KeyBoard */
#ifndef _Included_it_kya_io_KeyBoard
#define _Included_it_kya_io_KeyBoard
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: it_kya_io_KeyBoard
* Method: read
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_it_kya_io_KeyBoard_read
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
A questo punto non ci rimane che implementare le funzioni in codice C, il prossimo passo sarα, quindi, quello di creare un file KeyBoard.c contenente le funzioni dichiarate nellÆheader.
Bisogna dire che una funzione scritta in C non Φ portabile e richiede quindi che venga ricompilata sui diversi sistemi operativi e visto che la portabilitα Φ un punto di forza di Java bisognerα, quantomeno, fornire una libreria per Windows e una per Linux.
Essendo LÆI/O generalmente legato al sistema operativo, in particolare la lettura dalla tastiera, avremo bisogno di librerie diverse per i due sistemi. Per Windows useremo conio.h, per Linux curses.h, utilizzeremo le macro per gestire una compilazione sul medesimo file, quindi nel file KeyBoard.c scriveremo:
#if defined _WIN32
# include
#elif defined __linux__
# include
#else
# error Operating system is undefined or unknown!
#endif
#include
#include "KeyBoard.h"
JNIEXPORT jint JNICALL Java_it_kya_io_KeyBoard_read
(JNIEnv *env, jobject obj)
{
jint ch;
#if defined _WIN32
ch = _getch();
#elif defined __linux__
initscr();
cbreak();
noecho();
ch = getchar();
echo();
endwin();
if(ch == ERR)
{
jclass newExc = (*env)->FindClass(env, "IOException");
if (newExc != NULL)
{
(*env)->ThrowNew(env, newExc, "I/O Input error");
}
(*env)->DeleteLocalRef(env, newExc);
}
#endif
return ch;
}
|