API > OS

「API/OS」の編集履歴(バックアップ)一覧に戻る
API/OS」を以下のとおり復元します。
このページでは OS API について解説する。

参考資料:
-[[OS API>http://computercraft.info/wiki/index.php?title=OS_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.55 for Minecraft 1.6.2

----
#contents
----

*OS API
Computer/Turtleのオペレーティングシステムに関するAPI。

**version
-os.version()
-コンピュータやタートルのOSのバージョンを取得する
-戻り値:文字列型

**computerID
-os.computerID()
-コンピュータやタートルのIDを取得する
-戻り値:数値型

**getComputerLabel
-os.getComputerLabel()
-コンピュータやタートルのラベルを取得する
-戻り値:文字列型

**setComputerLabel
-os.setComputerLabel( &italic(){label} )
-コンピュータやタートルのラベルを&italic(){label}(文字列)に設定する
-戻り値:nil

**pullEvent
-os.pullEvent( [ &italic(){filter} ] )
-イベントが発生するまで待ち、発生したイベントを返す。&italic(){filter}(文字列)にイベント名を指定すると、そのイベントが発生したときのみ返る
-戻り値:文字列型, &italic(){&bold(){...}} 。一番目は発生イベント名(文字列)、その後は発生イベントごとに決まっている個数(最大5個)、型のパラメータ

強制中断(Ctrl+T長押し)によってterminateイベントは発生せず、プログラムは即終了する。
発生するイベントは[[イベント一覧>API/OS#id_aae1e50c]]を参照。

&italic(){filter}を設定した場合、&italic(){filter}のイベント発生以前に発生した他のイベントは破棄される。例えば、イベント駆動形式のスクリプトでは、イベントループ中にsleep()を入れるとイベントを取り逃す可能性がある。これは、sleep関数がos.startTimer関数とos.pullEvent("timer")関数で実装されているためで、sleep関数実行中に発生した他のイベントは破棄されてしまうからである。イベントには文字入力時のcherイベントとkeyイベントや、Rednet通信受信時のmodem_messageイベントとrednet_messageイベントのように一つの状況で複数のイベントが発生するものもあり、そのような場合に一回目のpullEvent関数の後にsleep関数や他のイベントを&italic(){filter}にしたos.pullEvent関数を呼び出すと、捕捉できなかった方のイベントが破棄されてしまう。

**pullEventRaw
-os.pullEventRaw( [ &italic(){filter} ] )
-イベントが発生するまで待ち、発生したイベントを返す。&italic(){filter}(文字列)にイベント名を指定すると、そのイベントが発生したときのみ返る
-戻り値:文字列型, &italic(){&bold(){...}} 。一番目は発生イベント名(文字列)、その後は発生イベントごとに決まっている個数(最大5個)、型のパラメータ

「Ctrl+T長押し」で発生するterminateイベントも取得できる。その後の処理はプログラム側に任せられる。
発生するイベントは[[イベント一覧>API/OS#id_aae1e50c]]を参照。

**queueEvent
-os.queueEvent( &italic(){event} , &italic(){...} )
-任意のイベントを発生させる。&italic(){event}(文字列)で発生させるイベント名を指定する。2番目以降の引数でイベントのパラメータ(0~5個)を指定する
-戻り値:nil

**clock
-os.clock()
-コンピュータやタートルの稼働時間を取得する
-戻り値:数値型。稼働時間を表す実数(秒)

**startTimer
-os.startTimer( &italic(){timeout} )
-実数&italic(){timeout}(数値)秒後にtimerイベントを発生させる
-戻り値:数値型。タイマーID

戻り値のタイマーIDとtimerイベント時に返るタイマーIDを比較することによって、どのタイマーによるtimerイベントなのかが判別可能。
一度timerイベントを発生させたタイマーは解除される。

**sleep
-os.sleep( &italic(){timeout} )&br()sleep( &italic(){timeout} )
-コンピュータやタートルの処理を&italic(){timeout}(数値)秒間停止する
-戻り値:nil

プログラムを途中で一定時間停止させるのに使う。
一般に省略形である sleep( &italic(){timeout} ) の方が使われる。
内部的にはstartTimer関数とpullEvent関数で実装されている。そのため&italic(){timeout}に0を指定しても最低1tick(0.05秒)間は停止する。

イベントシステムを使って実装されているため、スリープ中に発生した他のイベントは破棄される。

**day
【1.48-】
-os.day()
-現在のワールドのゲーム内での経過日数を取得する
-戻り値:数値型。ゲーム内での経過日数を表す整数(日)

**time
-os.time()
-Minecraftのゲーム内時間を取得する
-戻り値:数値型。ゲーム内時間を表す実数(時)

例:
 local hour, min = math.modf( os.time() )
 min = math.floor( min * 60 )
 print("The time is " .. hour .. ":" .. min)
ゲーム内時刻を取得し、「時:分」の形式で表示する。
なお、「時:分」形式への変換に[[Textutils API>API/Textutils]]を使うと以下のようになる。
 local time = os.time()
 time = textutils.formatTime( time, true )
 print("The time is " .. time)

**setAlarm
-os.setAlarm( &italic(){time} )
-Minecraftのゲーム時間で&italic(){time}(数値)時にalarmイベントを発生させる
-戻り値:数値型。アラームID

戻り値のアラームIDとalarmイベント時に返るアラームIDを比較することによって、どのアラームによるalarmイベントなのかが判別可能。
一度alarmイベントを発生させたアラームは解除される。

**shutdown
-os.shutdown()
-コンピュータやタートルをシャットダウンする
-戻り値:nil

**reboot
-os.reboot()
-コンピュータやタートルを再起動する
-戻り値:nil

**run
-os.run( &italic(){env} , &italic(){path} , ... )
-パス&italic(){path}(文字列)のプログラム(絶対パス)を実行する。&italic(){env}(テーブル)でプログラムのグローバル変数の初期値を指定できる。3番目以降の引数でプログラムに渡されるパラメータを指定できる
-戻り値:ブーリアン型。成功したらture、失敗したらfalse

[[shell.run関数>API/Shell#id_722d6494]]から内部的に呼び出されている。特に理由がなければshell.run関数を使う方が良い。

**loadAPI
-os.loadAPI( &italic(){name} )
-プログラム&italic(){name}(文字列)をAPIに追加する。プログラムファイル名がAPI名になる
-戻り値:ブーリアン型。APIの追加に成功したらtrue、失敗したらfalse。

プログラムファイル内の関数に対して、&italic(){プログラムファイル名}.foo() のようにアクセスできるようになる。
【1.4】指定プログラムが存在せず読み込みに失敗した場合でもAPI名が登録されてしまう不具合が修正された。

**unloadAPI
-os.unloadAPI( &italic(){name} )
-&italic(){name}(文字列)をAPIから外す
-戻り値:nil

*イベント一覧
pullEventおよびpullEventRawで捕捉できるイベント。
|>|>|>|>|>|CENTER:BGCOLOR(#DDD):&b(){戻り値}|CENTER:MIDDLE:BGCOLOR(#DDD):&b(){解説}|
|CENTER:BGCOLOR(#DDD):&italic(){1}|CENTER:BGCOLOR(#DDD):&italic(){2}|CENTER:BGCOLOR(#DDD):&italic(){3}|CENTER:BGCOLOR(#DDD):&italic(){4}|CENTER:BGCOLOR(#DDD):&italic(){5}|CENTER:BGCOLOR(#DDD):&italic(){6}|~|
|CENTER:&b(){"alarm"}|アラームID(数値)|nil|nil|nil|nil|アラームの指定時刻になった|
|CENTER:&b(){"char"}|文字(文字列)|nil|nil|nil|nil|文字が入力された|
|CENTER:&b(){"disk"}|方向(文字列)&br()【1.51-】名前(文字列)|nil|nil|nil|nil|ドライブにアイテムがセットされた|
|CENTER:&b(){"disk_eject"}|方向(文字列)&br()【1.51-】名前(文字列)|nil|nil|nil|nil|ドライブからアイテムが取り出された|
|CENTER:&b(){"http_failure"}|URL(文字列)|nil|nil|nil|nil|HTTPリクエスト失敗|
|CENTER:&b(){"http_success"}|URL(文字列)|[[ファイルハンドル>API/FS#id_340ee13d]](テーブル)|nil|nil|nil|HTTPリクエスト成功|
|CENTER:&b(){"key"}|キーコード(数値)|nil|nil|nil|nil|キーが押された|
|CENTER:&b(){"modem_message"}|方向(文字列)&br()【1.51-】名前(文字列)|受信チャンネル(数値)|送信者チャンネル(数値)|メッセージ(文字列)|距離(数値)|【1.5-】通信を受信した。&br()(受信時には常に発生)|
|CENTER:&b(){"monitor_resize"}|名前(文字列)|nil|nil|nil|nil|【1.51-】モニタのサイズが変更された|
|CENTER:&b(){"monitor_touch"}|方向(文字列)&br()【1.51-】名前(文字列)|タッチ位置X(数値)|タッチ位置Y(数値)|nil|nil|【1.48-】Advanced Monitor&br()画面がタッチされた|
|CENTER:&b(){"mouse_click"}|ボタン(数値)|マウス位置X(数値)|マウス位置Y(数値)|nil|nil|【1.45-】Advanced Computer/Turtle&br()GUI画面がクリックされた|
|CENTER:&b(){"mouse_drag"}|ボタン(数値)|マウス位置X(数値)|マウス位置Y(数値)|nil|nil|【1.45-】Advanced Computer/Turtle&br()GUI画面上でドラッグされた|
|CENTER:&b(){"mouse_scroll"}|スクロール方向(数値)|マウス位置X(数値)|マウス位置Y(数値)|nil|nil|【1.45-】Advanced Computer/Turtle&br()GUI画面上でホイールが動かされた。スクロール方向は奥・上が負、手前・下が正|
|CENTER:&b(){"peripheral"}|方向(文字列)&br()【1.51-】名前(文字列)|nil|nil|nil|nil|周辺機器が設置された|
|CENTER:&b(){"peripheral_detach"}|方向(文字列)&br()【1.51-】名前(文字列)|nil|nil|nil|nil|周辺機器が外された|
|CENTER:&b(){"rednet_message"}|送信者ID(数値)&br()【1.5-】送信者チャンネル(数値)|メッセージ(文字列)|距離(数値)|nil|nil|通信を受信した。&br()(受信チャンネル=受信者IDまたはbroadcastのときのみ発生)|
|CENTER:&b(){"redstone"}|nil|nil|nil|nil|nil|レッドストーン入力が変化した|
|CENTER:&b(){"timer"}|タイマーID(数値)|nil|nil|nil|nil|タイマーの指定時間が経過した|
|CENTER:&b(){"turtle_inventory"}|nil|nil|nil|nil|nil|【1.55-】Turtle&br()インベントリが変化した|
|CENTER:&b(){"turtle_response"}|コマンドID(数値)|コマンドの成否(ブーリアン)|nil|nil|nil|Turtle&br()カスタムコマンドが実行された|

上記に加えてpullEventRawで捕捉できるイベント。
|>|>|>|>|>|CENTER:BGCOLOR(#DDD):&b(){戻り値}|CENTER:MIDDLE:BGCOLOR(#DDD):&b(){解説}|
|CENTER:BGCOLOR(#DDD):&italic(){1}|CENTER:BGCOLOR(#DDD):&italic(){2}|CENTER:BGCOLOR(#DDD):&italic(){3}|CENTER:BGCOLOR(#DDD):&italic(){4}|CENTER:BGCOLOR(#DDD):&italic(){5}|CENTER:BGCOLOR(#DDD):&italic(){6}|~|
|CENTER:&b(){"terminate"}|nil|nil|nil|nil|nil|Ctrl+Tが長押しされた|

復元してよろしいですか?