SYXSEL SYXファイルからSYXメッセージを抜き出す

書法

SYXSEL [filename]* [option]*

SHELLMODE

@記述、!記述、^記述

詳細

SYXファイルをメッセージ単位で検定し、抜き出して出力する。
ファイル名を省略すると標準入力を扱う。ファイル名を複数書けば順に取り扱う。
通常は、SYXメッセージを標準出力するが、 オプション(-C)の指定で、ファイル名出力モードに切り替えることができる。
オプション(-E)の指定で、部分出力モードに切り替えることができる。
検定条件はオプション(-S)で記述する。 条件が複数書いた場合は、それらの条件全てのORANDを取ることができる。 デフォルトは、ORである。

ファイル名出力モード

オプション(-C)を指定するとファイル名出力モードになる。 該当するSYXメッセージを一つでも含めば、そのファイル名を標準出力する。
オプション(-CT)を指定すると、入力した全てのファイルについて検定を行い、 以下の形式で出力する。
ファイル名 TAB 総メッセージ数 TAB 該当メッセージ数 EOL
なお、このときは、入力したすべてのファイルに対して出力することに注意すること。

部分出力モード

オプション(-E)を指定すると部分出力モードになる。
部分出力モードでは、SYXメッセージの代わりに検索条件に埋めこまれた出力範囲({})の内容を出力する。 以下の制限があるので留意すること
  1. 条件否定(-V)が指定されていると出力しない。
  2. 出力範囲は複数書けるが、入れ子にすることは出来ない。
  3. 範囲指定が開いたまま検索条件を終えるとメッセージ最後のF7の手前までが範囲となる。
  4. 検索条件が複数書かれた場合は、最後に評価された検索条件での範囲が有効になる。
    OR条件では、最初に成立した条件。AND条件では最後に成立した条件となる。 混乱を避けるために、条件は一つだけ用いることを勧める。

検索条件記述

検索条件は、検索要素の羅列である。要素の区切りは、半角スペースやtab,eol等である。 メッセージの先頭と末尾(0xf00xf7)を 除いた部分に対して、先頭から検定を行う。 検索要素全てが一致すれば、成立とする(検索要素がメッセージより短くてもこの場合は成立)。
バイトデータ
通常は16進数で書く。 先頭に&をつけると10進数。 先頭に%をつけると2進数。 値は、127以下であること。
現在のデータとバイトで比較する。
文字列
引用符("')で囲んだ文字列はそのまま一致を検定する。
文字列は半角でそのコードが0x80未満であること。 文字列中に引用符を重ねて二つ書けば、一つの引用符に変換する。
?+
?の数だけ任意の1バイトと一致する
/
ここでチェックサムの計算を初期化する。メッセージとの比較は行わない。
{
範囲指定の始まり
}
範囲指定の終わり
.TAIL
末尾指定。この要素が現れたときが、メッセージの末尾であれば成立する。
.BLK(length)
長さで指定した任意のバイトと一致する。 長さは、16進表記、あるいは、&で始まる10進表記である。
.SUM7
データとチェックサム比較を行う。
.CSUM7
データと2の補数によるチェックサム比較を行う。(ROLAND対応)
.KSUM7
データとチェックサム+0xa5の比較を行う。(KAWAI対応)
.XLEN(length)
.XBLKで使用する長さをデータから読み出して設定する。
lengthは長さ表記自体のバイト長で、1-4。 このバイト数分だけメッセージから読み出し、モトローラ順に7bitパックして長さを計算する。
.XBLK
.XLENで設定した長さ分の任意のバイトと一致する。
.LEN(length)
メッセージ自体の長さが等しければ成立。長さには、(0xf00xf7)を含む。
.LAST(offset)
メッセージの終わりからoffset分だけ前の位置まで読み飛ばす。
位置をさかのぼる指定をすると、不成立となる。 不定長のメッセージを処理する場合などに使用すると良い。
.REP(count)
繰り返しマクロ。.REPEまでの間を繰り返す。
countは必ず、1以上であること。余り大きな繰り返しを指定してはいけない。
マクロのネストは可能だが、最大100段程度にとどめること。
.REPE
繰り返しの終了を示す。
必ず、.REPと対にして使用する。 対応が正しくないとエラーとなる。
.ID[(offset)]
-Iオプションで与えた値と比較する。
等しければ成立。DEVICE_IDの設定に用いる。
(offset)で値を指定するとoffset値を加算する。
.Pn[(offset)]
ここでnは0-9。コマンドとしては、.P0 .P1 ... .P9 の10種類である。
-Pnオプションで与えた値と比較する。
等しければ成立。
(offset)で値を指定するとoffset値を加算する。

OPTION

-A
ANDモードに切り替える。
このオプションを指定しなければ、 メッセージに対して検索条件が一つでも成立すれば、メッセージに対する検定を成立とする。 このオプションを指定すると、 メッセージに対して検索条件が全て成立した時に、メッセージに対する検定を成立とする。
-C
ファイル名出力モードに切り替える。 メッセージ検定が成立するファイル名を出力する。
-CT
ファイル名出力モードに切り替える。 入力された全てのファイルに対して、ファイル名、メッセージ数、成立数を出力する。
-E
部分出力モードに切り替える。
-Ivalue
.IDコマンドで使用される値を指定する。16進で記述すること。
値の範囲は、0-7Fである。 通常ならば、0-FでDEVICE_IDを指定するが、機種によっては、10-1Fなどが必要な場合がある。
-S検索パターン
検索パターンを指定する。 このオプションは複数書ける。条件の複合は、-Aの指定の有無に従う。
-S:filename
検索パターンが格納されているファイル名を指定する このオプションは複数書ける。条件の複合は、-Aの指定の有無に従う。
-Ofilename
出力を指定のファイルに切り替える
-P番号=value
ここで、番号は0-9。 .Pnコマンドで使用される値を指定する。16進で記述すること。
値の範囲は、0-7Fである。
-V
メッセージ検定の結果を反転する。
入力ファイルのメッセージを、条件に該当するものとしないものに分割する場合は、 -V指定の有無で2回実行すれば良い。

用例

参考

検索パターンの例をあげる。

KAWAI K1Rのバルクダンプ

DEVICE_IDは、-Iオプションで00-0Fの範囲で与える。
  1. ALL SINGLE DATA DUMP(I)
    40 .ID 21 00 03 00 00 .REP(&32) / .BLK(&87) .KSUM7 .REPE .TAIL
  2. ALL SINGLE DATA DUMP(i)
    40 .ID 21 00 03 00 20 .REP(&32) / .BLK(&87) .KSUM7 .REPE .TAIL
  3. ALL MULTI DATA DUMP(I)
    40 .ID 21 00 03 00 40 .REP(&32) / .BLK(&75) .KSUM7 .REPE .TAIL
  4. ALL SINGLE DATA DUMP(E)
    40 .ID 21 00 03 01 00 .REP(&32) / .BLK(&87) .KSUM7 .REPE .TAIL
  5. ALL SINGLE DATA DUMP(e)
    40 .ID 21 00 03 01 20 .REP(&32) / .BLK(&87) .KSUM7 .REPE .TAIL
  6. ALL MULTI DATA DUMP(E)
    40 .ID 21 00 03 01 40 .REP(&32) / .BLK(&75) .KSUM7 .REPE .TAIL

ROLAND GSのバルクダンプ

  1. DT1メッセージ
     41 .ID(10) 42 12 / ??? .LAST(1) .CSUM7 .TAIL 

バージョン

Ver 1.00初版