サイエンス社発行の, ヒューマンコンピュータインタラクション入門 (Computer Science Library 11) の, 著者によるサポートページです. 誤りなどの訂正情報や, 講義などで使っていただくための図版, プログラムのソースコード, 音声ファイルなどを提供していきます.
サイエンス社 ( http://www.saiensu.co.jp/ ) のサポートページもご覧ください.
また,サイエンス社からも,本書に掲載されている図をまとめたPDFが, 講義用資料として用意されています. 必要な方は,ご連絡先を明記の上,サイエンス社編集部( rikei@saiensu.co.jp )までご連絡ください.
署名が間違っていました.(誤:梶尾,正:椎尾)
#include <time.h>
#include <sys/time.h>
#include <stdio.h>
double gettimeofday_sec()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + (double)tv.tv_usec*1e-6;
}
int main(void) {
double t1, t2;
sleep(5);
printf("hit now");
t1=gettimeofday_sec();
getchar();
t2=gettimeofday_sec();
printf("time = %10.30f\n", t2 - t1);
return 0;
}
byte result; //スイッチの状態を読み込む変数
while(1) { //以下を無限に繰り返す
result=inb(100); //スイッチの状態を読み込む
if((0x01 & result)==0) outb(1, 101); //スイッチオンで点灯
else outb(0,101); //スイッチオフで消灯
usleep(30000L); //30ms待つ
}
main(void) {
int paraport;
unsigned char value;
paraport= open("/dev/para",O_RDWR);
if(paraport < 0) exit(1); //openに失敗したら中止
for (;;) { //無限ループ
usleep(100000L); //0.1秒待つ
if ( read(paraport, &value, 1) <= 0 ) break;
print("value is %x・n", value);
usleep(100000L); //0.1秒待つ
if((value & 0x10) == 0)
value=value | 0x01; //LSBを1にする
else
value=value & 0xFE; //LSBを0にする
write(paraport, &value, 1); //ポートに書き出す
}
close(paraport);
}
static unsigned int busy = 0;
static int para_open (struct inode * inode, struct file * file) {
if (busy) return -1;//使用中だったら中止
request_region(0x378,1, "para"); //never fails
busy = 1;//使用中であるフラグを立てる
return 0;
}
static int para_release (struct inode * inode, struct file * file) {
release_region(0x378, 1);
busy = 0;//使用中であるフラグを下ろす
return 0;
}
static ssize_t para_read
(struct file * file, char * buf, size_t count, loff_t * ploff) {
int i;
char result;
result = inb(0x378);//ポートから読む
i = verify_area (VERIFY_WRITE, buf, count); //利用可能?
if (i) return i;
copy_to_user (buf, &result, 1);//bufの場所へ読んだ結果を書く
return 1;
}
static ssize_t para_write
(struct file * file, const char * buf, size_t count, loff_t * ploff) {
char value, data;
copy_from_user (&value, buf, 1);//bufの値を読む
outb(value, 0x378); //ポートに書き込む
return 1;
}
static struct file_operations para_fops = { //関数対応表
NULL, //struct module *owner
NULL, //lseek
para_read, //read
para_write, //write
NULL, //readdir
NULL, //select
NULL, ///ioctl
NULL, //mmap
para_open, //open
NULL, //flush
para_release, //release
NULL, //fsync
NULL, //fasync
NULL, //lock
NULL, //readv
NULL //writev
};
int init_module (void) {//デバイスドライバと対応表を登録
int i;
i = register_chrdev (63, "para", & para_fops);
if (i) return - EIO;
return 0;
}
void cleanup_module (void) {
unregister_chrdev (63, "para");
}
\#include <X11/Xlib.h>
\#include <stdio.h>
int main (){
Display *display = XOpenDisplay (NULL);
XEvent event;
Window window = XCreateSimpleWindow(display, DefaultRootWindow(display),0,0,150,100,0,0,0);
XSelectInput(display,window,KeyPressMask | ButtonPressMask);
XMapWindow(display, window);
XFlush(display);
while(1) { //無限ループ
XNextEvent(display,&event); //イベントを受け取る
switch (event.type) { //イベントの内容に従って分岐
case KeyPress: //キーボードが押されたら
printf("key\n"); //keyと表示
break;
case ButtonPress: //マウスボタンが押されたら
printf("button\n"); //buttonと表示
break;
}
}
return 0;
}
import java.awt.*; //GUI関連のクラスを利用することの宣言
public class SimpleWindow { //クラスSimpleWindowの記述
public static void main(String args[]) { //クラスメソッドmainの記述
Frame f; //クラスFrameのインスタンスを参照する変数
f = new Frame(); //Frameクラスからインスタンスを生成,fに代入
f.setTitle("hello world");//インスタンスメソッド呼び出し
f.setSize(300,200); //インスタンスメソッド呼び出し
f.setVisible(true); //インスタンスメソッド呼び出し
}
}
import java.awt.*;
public class SimpleWindow extends Frame {//Frameクラスを継承
public void initialize (String title) {//インスタンスメソッドの記述
setTitle(title); //スーパークラスのインスタンスメソッドを呼び出し
setSize(300,200); //これもスーパークラスのインスタンスメソッド
setVisible(true); //これもスーパークラスのインスタンスメソッド
}
public static void main(String args[]) {//クラスメソッドmainの記述
SimpleWindow f;//SimpleWindowのインスタンス格納用変数
f=new SimpleWindow(); //インスタンスを生成,fに代入
f.initialize("hello world");//インスタンスメソッド呼び出し
}
}
import java.awt.*;
import java.awt.event.*;
public class SimpleWindow extends Frame implements ActionListener {
//Frameクラスを継承し,ActionListenerを実装する
public void initialize (String title) {//インスタンスメソッドの記述
setTitle(title); //スーパークラスのインスタンスメソッド呼び出し
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
Button b = new Button("Push Me!!"); //インスタンスを作ってbに代入
b.addActionListener(this); //イベント受取り先に本インスタンスを登録
add(b); //本インスタンスにボタンを貼り付け
setSize(200,100); //インスタンスメソッドsetSizeを呼び出し
setVisible(true); //インスタンスメソッドsetVisibleを呼び出し
}
public void actionPerformed(ActionEvent e) { //イベントハンドラー
System.out.println("thank you."); //ボタン押されたら文字を表示
}
public static void main(String args[]) {//クラスメソッドの記述
SimpleWindow f;//SimpleWindowクラスのインスタンスを参照する変数
f=new SimpleWindow(); //インスタンスを生成,fに代入
f.initialize("Simple Button");//インスタンスメソッド呼び出し
}
}
\#import "FCConverter.h"
@implementation FCConverter
- (IBAction)takeIntValueFrom:(id)sender {
}
@end
\#import "FCConverter.h"
@implementation FCConverter
- (IBAction)takeIntValueFrom:(id)sender {
int degreeF; //華氏の値を保持する変数
float degreeC; //摂氏の値を保持する変数
degreeF = [sender intValue]; //スライダから値を得る
[fText setIntValue: degreeF]; //華氏の文字フィールドに書出す
degreeC=(float)(degreeF-32) * 5.0 / 9.0; //華氏摂氏換算計算
[cText setFloatValue: degreeC]; //摂氏の文字フィールドに書出す
}
@end
public class SampleWindow extends Frame {
public static void main(String args[]) {
SampleWindow w = new SampleWindow();
w.setVisible(true);
}
}
ご質問,ご要望などは siio@is.ocha.ac.jp までお寄せください.