戻る

第3章 関数とステートメント


 関数やステートメントは、基本的に標準REXXと同じです。デスクトップの「アシスタンス・センター」->「情報」->「参照とコマンド」内の「REXX 情報」に説明があります。

1.ステートメント

a.条件分岐

 基本的な条件分岐は、以下のようなIF THEN ELSE文で記述します。
もし実行内容が一行だけならば、DO ENDは省略可能です。

IF 条件式 THEN
  DO
    条件判定が真の場合の実行内容
  END
ELSE
  DO
    条件判定が偽の場合の実行内容
  END

b.繰り返しループ

 繰り返しループは、以下のようなDO END文で指定します。WHILE/UNTIL/FOREVER等を指定する事によって前方判定や後方判定を指定する事が出来ます。

DO 条件式
  実行内容
END

 この例ではcommandを5回実行します。

DO 5
  command
END
 次の例ではLoopCountを1から5まで変化させながら、commandを5回実行します。
DO LoopCount = 1 TO 5
  command
END

 WHILEを使用すると前方判定となります。条件式が真の間ループします。

DO WHILE 条件式
  実行内容
END

 UNTILを使用すると後方判定となります。条件式が真になるまで(偽の間)ループします。

DO UNTIL 条件式
  実行内容
END

 FOREVERは、無限ループを指定します。

DO FOREVER
  実行内容
END

c.複数条件分岐

 複数の条件から一つを選択する分岐をまとめて記述する場合、以下のSELECT END文を使用する事が出来ます。実行内容が複数行になる場合は、IF文の場合と同じくDO END文で囲む必要があります。

SELECT
  WHEN 条件式1
    THEN 実行内容1
  WHEN 条件式2
    THEN 実行内容2
  WHEN 条件式3
    THEN
      DO
        実行内容3
      END
  OTHERWISE
    全ての条件式にマッチしなかった場合の実行内容
END

2.演算子

3.データ型の変更

関数名 機能
B2X 2進数のストリングを16進数のストリングに変換
C2D ストリングを10進数値として返す
C2X ストリングを16進表記に変換
D2C 10進数値を該当するASCII文字に変換
D2X 10進数値を16進数のストリングに変換
X2B 16進数のストリングを2進数のストリングに変換
X2C 16進数のストリングを該当するASCII文字に変換
X2D 16進数のストリングを10進数値に変換

4.数値演算

関数名 機能
ABS 数値の絶対値を返す
MAX 指定したリストの中の最大値を返す。(最大20個)
MIN 指定したリストの中の最小値を返す。(最大20個)
RANDOM 指定した最小値と最大値の間で負でない整数の擬似乱数を返す。
SIGN 数値の符号を示す数を返す。
TRUNC 数値の整数部と指定桁数の小数部を返す。
VALUE 指定した名前の値を返す、または設定する。
BITAND 二つのストリングのANDを取る。
BITOR 二つのストリングのORを取る。
BITXOR 二つのストリングのXORを取る。

5.文字操作

関数名 機能
ABBREV 先行文字列を比較する。
COMPARE 二つのストリングを比較する。
COPIES ストリングを指定回数連結する。
DELSTR ストリングの指定位置から指定文字数の削除を行う。
DELWORD ストリングの指定語から指定語数の削除を行う。
FORMAT 数値を指定形式に丸める。
INSERT ストリングの指定位置に指定文字を挿入する。
LEFT ストリングの左端から指定文字数を返す。
LENGTH ストリングの長さを返す。
POS ストリング内の指定文字列の位置を返す。
REVERSE ストリングを逆順にして返す。
RIGHT ストリングの右端から指定文字数を返す。
SPACE ストリング内のブランクを調整する。
STRIP ストリングの先行文字と後続文字を除去する。
SUBSTR ストリングの指定位置から指定文字数を返す。
SUBWORD ストリングの指定語から指定語数を返す。
VERIFY ストリングの構成文字をチェックする。
WORD ストリングの指定語を返す。
WORDINDEX ストリングの指定語の最初の文字位置を返す。
WORDLENGTH ストリングの指定語の長さを返す。
WORDPOS 指定語のストリング内での位置を返す
WORDS ストリングの語数を返す。
XRANGE 指定文字間の全ての1バイトコードをストリングとして返す。

6.日付と時刻

関数名 機能
DATE 指定形式の日付を返す。
TIME 指定形式の時間を返す。

7.ファイル入出力

関数名 機能
CHARIN 文字入力ストリームから指定文字数を返す。
CHAROUT 文字出力ストリームに指定文字を出力する。
CHARS 文字入力ストリームに残っている文字数を返す。
LINEIN 文字入力ストリームから行単位でデータを読み込む。
LINEOUT 文字出力ストリームへ行単位でデータを書き込む。
LINES 文字入力ストリームの残りデータをチェックする。
STREAM 文字ストリームの入出力を制御する。

8.フォルダとファイル

関数名 機能
DIRECTORY 現行ディレクトリを取得/設定する。
FILESPEC 指定ファイルの指定情報を返す。

9.その他の便利な関数

 ここでは、WarpV4を基本に標準で使用可能な関数をいくつか上げます。

9-1.REXX ユーティリティ関数(RexxUtil)

 これは、REXXでファイル操作等の機能を使用するライブラリです。デスクトップの「アシスタンス・センター」->「情報」->「参照とコマンド」内の「REXX 情報」に標準REXXの説明とともに説明があります。
関数名 機能
RxMessageBox メッセージボックスの表示
SysCls テキスト画面の消去
SysCopyObject オブジェクトのコピー
SysCreateShadow シャドウの作成
SysMoveObject オブジェクトの移動
SysCreateObject オブジェクトの作成
SysCurPos テキスト画面でのカーソルの移動/位置問い合わせ
SysCurState テキスト画面でのカーソルの表示/非表示
SysDeregisterObjectClass オブジェクトクラスの定義を登録/解除
SysDestroyObject 既存オブジェクトの破棄
SysDriveInfo ドライブ情報の取得
SysDriveMap アクセス可能な全てのドライブを取得
SysDropFuncs RexxUtilの全関数をドロップする
SysFileDelete 指定ファイルの削除
SysFileTree ファイルの検出
SysFileSearch ファイル内の文字列検索
SysGetEA 名前付き拡張属性の取得
SysGetKey キー入力の取得
SysGetMessage 指定番号のメッセージを取得
SysIni INIファイルの設定/問い合わせ
SysMkDir ディレクトリの作成
SysOpenObject オブジェクトのオープン
SysOS2Ver OS/2バージョン情報の取得
SysPutEA 名前付き拡張属性の書込み
SysQueryClassList 登録されているオブジェクトクラスの全リストを取得
SysRegisterObjectClass オブジェクトクラスの定義をシステムに登録
SysRmDir ディレクトリの削除
SysSaveObject オブジェクトの保管
SysSearchPath パス指定によるファイルの検索
SysSetIcon アイコンファイルの関連付け
SysSetObjectData オブジェクトの設定変更
SysSleep 指定秒数のスリープ
SysTempFileName 固有ファイル名の取得
SysTextScreenRead テキスト画面からの文字の読取り
SysTextScreenSize テキスト画面のサイズを取得
SysWaitNamedPipe 名前付きパイプの時限待機

9-2.マルチメディア REXX ライブラリ(MciApi)

 これは、REXXでマルチメディア機能を使用するライブラリです。デスクトップの「アシスタンス・センター」->「情報」->「参照とコマンド」から「マルチメディア REXX」を参照できます。
関数名 機能
mciRxInit 初期化を行い、MCIストリングインターフェースコマンドを使用可能とする。
mciRxExit MCIストリングインターフェースを終了する。
mciRxGetDeviceID MCI装置別名と関連する装置IDを取得
mciRxGetErrorString MCIエラーストリングを取得
mciRxSendString MCIコマンドストリングを送信

9-3.TCP/IP REXX Socket ライブラリ(RxSock)

 これは、REXXでSocket機能を使用するライブラリです。デスクトップの「アシスタンス・センター」->「情報」->「参照とコマンド」から「TCP/IP REXX Sockets API 解説書」を参照できます。但し、この解説書では、説明が少なすぎるので、合わせてJ_Pocket2のWarp V4用のTCP/IPリファレンスや、他の文献を参照する必要があります。
関数名 機能
SockAccept accept()と同じ
SockBind bind()と同じ
SockClose soclose()と同じ
SockConnect connect()と同じ
SockDropFuncs REXX Socketパッケージの全関数をドロップ
SockGetHostByAddr gethostbyaddr()と同じ
SockGetHostByName gethostbyname()と同じ
SockGetHostId gethostid()と同じ
SockGetPeerName getpeername()と同じ
SockGetSockName getsockname()と同じ
SockGetSockOpt getsockopt()と同じ
SockInit sock_init()と同じ
SockIoctl ioctl()と同じ
SockListen listen()と同じ
SockLoadFuncs REXX Socketパッケージの全関数をロード
SockPSock_Errno psock_errno()と同じ
SockRecv recv()と同じ
SockRecvFrom recvfrom()と同じ
SockSelect select()と同じ
SockSend send()と同じ
SockSendTo sendto()と同じ
SockSetSockOpt setsockopt()と同じ
SockShutDown shutdown()と同じ
SockSock_Errno sock_errno()と同じ
SockSocket socket()と同じ
SockSoClose soclose()と同じ
SockVersion REXX Socketパッケージのバージョンを識別

9-4.TCP/IP REXX FTP ライブラリ(RxFtp)

 これは、REXXでFTPの機能を使用するライブラリです。デスクトップの「アシスタンス・センター」->「情報」->「参照とコマンド」から「TCP/IP REXX FTP API 解説書」を参照できます。
関数名 機能
FtpAppend ローカルファイルをリモートホスト上のファイルに追加
FtpChDir リモートホスト上の作業ディレクトリを変更
FtpDelete リモートホスト上の単一ファイルを削除
FtpDir リモートホストの現行ディレクトリの情報を得る
FtpDropFuncs REXX FTP APIパッケージの全関数をドロップ
FtpGet リモートホストから単一ファイルをローカルにコピーする。
FtpLoadFuncs REXX FTP APIパッケージの全関数をロード
FtpLogoff 全てのFTPセッションの終了
FtpLs リモートホストの現行ディレクトリの情報を得る
FtpMkDir リモートホスト上に新規ディレクトリを作成
FtpPing リモートホストにpingを送出
FtpProxy 2つのリモートサーバー間でファイルをコピー
FtpPut ローカルの単一ファイルをリモートホストにコピー
FtpPutUnique ローカルの単一ファイルをリモートホストにコピーする。
ファイル名の固有チェック有。
FtpPwd リモートホストの現行ディレクトリを取得
FtpQuote ストリングをリモートサーバーに送信
FtpRename リモートホスト上の単一ファイルの名前を変更
FtpRmDir リモートホスト上のディレクトリを削除
FtpSetBinary テキスト変換モードをバイナリー/ASCIIに切換え
FtpSetUser リモートホストのホスト名,ユーザーID,パスワード,アカウントを識別
FtpSite サイト情報をリモートホストに送信
FtpSys サーバーのオペレーティングシステム名を取得
FtpVersion REXX FTP APIパッケージのバージョンを識別

9-5.その他

 上記以外にも有料のパッケージが販売されています。また、インターネット等でフリーで手に入るものとして数値演算パッケージのMATHLIBやNETコマンド相当の機能を実現するNETUTIL等があります。J_Pocket2のRelease 3には、同じくJ_Pocket2に含まれているProTalker/2をREXXから制御する為のパッケージが含まれています。

10.DrRexx固有関数

 DrRexx環境では、各コントロールのウィンドウ・ファンクション以外にも、イベント発生時に、イベントに関連付けられたデータを取得する関数や、マルチスレッドを利用する為の関数等が用意されています。
関数名機能
ModalForモーダル・ダイアログを表示し、結果を返します。
result = ModalFor( dialog [, alias] [, registeredName] )
dialog(作成するダイアログ名を指定します)
alias(ダイアログをalias名で作成します)
registeredName(ダイアログをPMに登録し、オーナーをdesktopにします。指定の名前でウィンドウ・リストに表示されるようになります)
  • ModalForを実行すると、他の全てのダイアログがディセーブルになり、モーダル・ダイアログをクローズするまでアクセスできません。
  • ModalForを実行したイベント・ハンドラは、モーダル・ダイアログのイベント・ハンドラがRETURNステートメントを実行するまでサスペンドされます。RETURNステートメントに値が指定されていれば、ModalForファンクションのresultとして戻されます。
  • passwordモーダル・ダイアログを開く
    IF ModalFor( 'password' ) <> 'SECRET' THEN EXIT
EventData指定されたステム変数に、発生したイベントに関連付けられたデータを返します。ステム変数を省略すると、デフォルト名のEVENTDATAが使われます。
EventData( [stem] )
ステム.0には、返されるデータの数、ステム.1~nには、イベントに関連付けられているデータが戻ります。返されるイベント関連データは、各コントロールによって異なります。
  • コンテナ・コントロールのカーソル位置のアイテムをマークする例
    CALL EventData "DATA"
    IF data.2 = "+CURSOR" THEN CALL Select data.1, "MARK"
Eventイベントの名前(例えば、"Click")を返します。
event = Event()
もしイベントが発生していなければ、ヌル文字列が戻されます。
  • 発生したイベントを表示する例
    SAY Event() "occurred for" Control() "("Class()")"
Controlイベントを発生したコントロールの名前(例えば、"list")を返します。
name = Control()
もしイベントが発生していなければ、ヌル文字列が戻されます。
  • 発生したイベントを表示する例
    SAY Event() "occurred for" Control() "("Class()")"
Classイベントを発生したコントロールのクラス(例えば、"LISTBOX")を返します。
class = Class()
もしイベントが発生していなければ、ヌル文字列が戻されます。
Dialogイベントを発生したダイアログの名前を返します。
name = Dialog()
もしイベントが発生していなければ、ヌル文字列が戻されます。
Dialogsステム変数に全てのダイアログ名を返します。
Dialogs( [stem] )
ステムを指定しなければ、DIALOGSという変数名が使われます。ステム.0には返される名前の数が入り、ステム.1~nにはダイアログ名が入ります。
FilePrompt標準ファイルダイアログを開きます。
file = FilePrompt( [pattern] [, title] [, ok] [, "Open" | "Save"] )
file(選択されたファイル名が返されます)
pattern(表示するファイルのタイプを選択できます。'*'や'?'のワイルドカードが使用できます。デフォルトは"*.*"です)
title(ファイルダイアログのタイトルバーに表示する文字列を指定します)
ok:ボタンのラベルが指定できます。省略時は、オープン・ダイアログでは"Open"、セーブ・ダイアログでは"Save"になります。
Open:オープン・ダイアログ指定
Save:セーブ・ダイアログ指定
キャンセルするとヌル文字列が返されます。
  • 使用例
    file = FilePrompt( "*.BMP", "Enter name of bitmap file to open" )
Clipboard現在のクリップボードの内容を取得/設定します。
result = Clipboard( [text] )
  • クリップボードに文字列を設定する場合
    CALL Clipboard "Replace String"
ScreenSizeディスプレイのスクリーンサイズを返します。
result = ScreenSize()
  • resultの書式:width height ("1024 768")
  • ウィンドウをスクリーンの中央に配置する例
    PARSE VALUE Dialog.Position() WITH x y cx cy
    PARSE VALUE ScreenSize() WITH dx dy
    CALL Dialog.Position (dx - cx)%2, (dy - cy)%2, cx, cy
DrRexxVersionDrRexxのバージョンを返します。
result = DrRexxVersion()
  • resultの書式:v.vv mm/dd/yy exefile ("2.10 09/18/93 D:\DRDIALOG\DRREXX.EXE")
Start新しいスレッドを実行開始します。
tid = Start( label [, argument] )
tid(新しいスレッドのID)
label(新しいスレッドとして実行するプロシジャ名)
argument(プロシジャに渡す引数)
Stopスレッドの実行を停止します。
rc = Stop( tid )
tid(停止するスレッドのID)
rc(成功時は1、それ以外は0を返す)
Resultスレッドが実行終了するまで待ちます。
value = Result( [tid] )
tid(終了待ちスレッドのID)
value(スレッドのRETURN値)
NotifyNotifyイベントを指定ダイアログに通知します。
Notify( dialog [, event] [, data] )
dialog(通知先ダイアログ名)
event(EventDataファンクションで渡す事のできるイベント名)
data(EventDataファンクションで渡す事のできるデータ)
Useスレッド間での共有リソースの排他利用を設定/解除します。
rc = Use( name [, request] )
name(共有リソース名)
request(0以外ならば、共有リソースが使用可能になるまでサスペンドし、リソースを確保します。0ならば、現在確保している共有リソースを解放します。省略されると、nameで指定された共有リソースの状態を返します。)
rc(0:リソースを所有していない、1:リソースを所有している)
Valスレッド間の共有変数の値を取得/設定します。
value = Val( name [, value] )
name(共有データの名前)
value(名前に関連付けられたデータ)
Sleep指定時間の間、実行をサスペンドします。
Sleep( [time] )
time(ミリ秒で指定します。指定しなければ、次のスレッドが実行されます)

戻る