apt-get install ruby ruby1.8-devぐらいで良いでしょう. Tkを使う場合には,
apt-get install libtk-ruby tk8.4とでもしておきます.
apt-get install gpib-modules-source apt-get install kernel-headers-2.6.8-3-686 apt-get install module-assistant debhelper m-a a-i gpib apt-get install libgpib0 libgpib-bin libgpib0-devそして,/usr/src/にできたgpib-modulesをdpkg -iでインストールします.
なぜか,Etchには,gpibのパッケージが無いようですので,ソースを取ってきてコンパイルします. Debianのページを参考にして下さい.
一般ユーザーが使えるようにするためには,/etc/groupを編集して,gpibグループに加えて下さい. また,必要に応じて/etc/gpib.confを編集して下さい. とりあえずは,ボードの設定のところのboad_typeとnameだけで良いと思います. ボードが一枚ならname="dev0"です. あとは,立ち上げのときに組み込まれるように設定しておきます.
echo "alias char-major-160 gpib_common" >>/etc/modprobe.d/gpib echo "alias gpib0 tnt4882" >>/etc/modprobe.d/gpib echo "install tnt4882 /sbin/modprobe --ignore-install tnt4882;/usr/sbin/gpib_config --minor 0" >>/etc/modprobe.d/gpib
wget http://www009.upp.so-net.ne.jp/sakura_home/gpib-ruby.tgz tar xfz gpib-ruby.tgz cd gpib-ruby ruby ./extconf.rb --with-gpib-include=/usr/include/gpib make make installこのとき,ruby1.8-devとflexが必要なようです.
require "gpib" adrs=3 g=Gpib::new(adrs) g.write(command)てな感じです.
mknod /dev/parport0 c 99 0 chgrp lp /dev/parport0 chmod 660 /dev/parport0一般ユーザーが使えるようにするためには,/etc/groupを編集して,lpグループに加えて下さい.
require "parport" p=ParPort::new() p.strobe=1 p.command() p.write(0x20)というように使えます. 詳しくはソースを見てもらえば分かるのでは無いでしょうか. readするためには,BIOSの設定で,プリンターポートのモードををbi-directionalまたはEPPに設定する必要があります.
s=open("/dev/ttyS0","r+") system("stty raw -echo -crtscts 9600 cs7 parenb -parodd </dev/ttyS0") # 9600bps 7bit, 1 stop bit, even parity s.write("write") r=s.gets("\x0d\x0a")改行がLinuxと機器で異なる場合には,あからさまに指定して下さい.
apt-get install libtk-ruby tk8.4
require 'tk' include Tk Tk.mainloop新しいwindowをつくるときには,TkToplevelを作ります.
TkToplevel.newtitleメソッドでタイトルを指定できます.
f=TkFrame.new(nil,"relief"=>"ridge","borderwidth"=>2).pack('side'=>'left') f1=TkFrame.new(f,"relief"=>"groove","borderwidth"=>2).pack('side'=>'left') f2=TkFrame.new(f,"relief"=>"groove","borderwidth"=>2).pack('side'=>'left') TkLabel.new(f1){text("label1")}.pack('side'=>'top') TkLabel.new(f1){text("label2")}.pack('side'=>'top') TkLabel.new(f2){text("label3")}.pack('side'=>'top') TkLabel.new(f2){text("label4")}.pack('side'=>'top')reliefの種類としては,raised, sunken, flat, groove, ridgeなどがあるようです.
TkLabel.new{text("label")}.pack('side'=>'top')
e=TkEntry.new{width(10)}.pack('side'=>'top') e.value="entry"
TkButton.new{text('line');command(proc{exit})}.pack('side'=>'top')
v=TkVariable.new(0) TkRadiobutton.new{text('a');value(0);variable(v)}.pack('side'=>'top') TkRadiobutton.new{text('b');value(1);variable(v)}.pack('side'=>'top')
v=TkVariable.new(0) TkCheckbutton.new{text("a");variable(v);onvalue(1);offvalue(0)}.pack('side'=>'top')
l=TkListbox.new{width(30);height(15); selectmode('multiple');exportselection(0); }.pack('fill'=>'both','expand'=>true,'side'=>'left') l.insert('end','first') l.insert('end','third') l.insert(1,'second')insertメソッドで項目を加えていきます. 項目を消したいときは,deleteメソッドを使います. 選択されているものは,curselectionメソッドを使うと番号の配列として得られます. selection_setやselection_clearでプログラムから指定したり,はずしたりできます.
menu=[ [['File',0], ['Load',proc{file_load()},0], '---', ['Quit',proc{exit},0], ], ] TkMenubar.new(nil,menu,'tearoff'=>false,'foreground'=>'blue', 'activeforeground'=>'red').pack('side'=>'top','fill'=>'x')最初のnilは,親wedgetの指定を無視したものです. optionとして指定しているものは,configureオプションを使っても変えることができます. ここで,配列の中の数字は,メニューに表示する文字の下線が引かれるものの指定です. 細かい指定の仕方は,/usr/lib/ruby/1.8/tk/menuspec.rbを見て下さい.