コマンドラインツール bcscan
masuidrive さんのコメントに触発されてつくってみた。とりあえず動くレベルはあっさり終了。
「起動する -> バーコード読む -> 標準出力に値を出力」が可能。
ダウンロード
- bcscan-20070215.tgz (ソースコード/28kB) MD5 - 473b1d9aec8f6588c46d84d0a4f57601
- bcscan-bin-20070215.dmg (ユニバーサルバイナリ/388kB) MD5 - d07393822bb38852f9c5da53e2f23ab8
ソースのコンパイルには、RubyCocoa が必要。バイナリは RubyCocoa 0.5.0 を同梱しているので、RubyCocoa を別途インストールする必要はない。
使いかた
実装は HMDT の Coral 方式。アプリケーションの bcscan.app とそのラッパーシェルスクリプト bcscan の2つで構成される。
- bcscan.app - /Applications/ にコピー
- bcscan - 実行可能なパス ${HOME}/bin や /usr/local/bin にコピー
bcscan.app のインストール位置が /Applications でないときは、シェルスクリプト bcscan をそれに合わせて変更すること。
ちなみに RubyCocoa 側のコードはこんだけ。
require 'osx/cocoa'
OSX.ns_import :MyBarcodeScanner
class AppDelegate < OSX::NSObject
def awakeFromNib
scanner = OSX::MyBarcodeScanner.sharedInstance
scanner.setStaysOpen(false)
scanner.setDelegate(self)
scanner.setMirrored(false)
# start scan
scanner.scanForBarcodeWindow(nil)
OSX::NSApplication.sharedApplication.activateIgnoringOtherApps(true)
end
# MyBarcodeScanner delegate methods
def gotBarcode(barcode)
$stdout.puts barcode.to_s
OSX::NSApplication.sharedApplication.terminate(self)
end
end
これしかないので、C/Objective-C で書いてもよかったのだけれど、今後コマンドラインオプションを追加しようと思ったときに getopt(3) より Ruby の optparse のほうがやりやすいかなあという理由で Ruby/RubyCocoa を選択。
今後の予定
- exit status をきちんと(中止時などは 0 以外に)
- オプションの追加
- 読み込み値の検証(指定された桁数や形式の値を読み込むまで終了しない)
- タイムアウトの指定
- UI の改善(優先度低。めんどくさいから)
あんまりがんばるつもりはないので、興味のある人の開発引き取りを歓迎します。