SMCは、行単位で処理を行ないます。SMCは、以下の手順でSMCファイルからSMCが処理する1行を読み込みます。
- 入力バッファをクリアします。
- SMCファイルから改行文字までを読み込み、入力バッファの右側に追加します。
- 「注釈文字“;”」から右側の文字を(“;”も含め)切り捨てます。
- 右端のスペース・タブを切り捨てます。
- 行末の文字が「行接続文字“\”」である場合、“\”をスペースに変換して、再び2.から処理を行ないます。
- 行内のマクロを展開します。
行内で、“""”で囲まれた部分は「文字列」です。文字列内では、さらに以下の変換が行なわれます。
- 「エスケープ文字“\{10進数値}”」・「エスケープ文字“\${16進数値}”」をASCII文字コードに変換します。
- 「エスケープ文字“\"”」を“"”に変換します。
- 「変数“\?{変数名}”」・「システム変数“\??{変数名}”」を変数内容に変換します。
SMCは、1行を読み込んだあと、行の左端の文字が何であるかによって、以下から選択された作業を行ないます。
文字 解説 “<1〜9>” 1〜255までのトラック番号であるとみなして、トラックデータ行として処理します。
トラック1は“T”・“@{TEMPO:}”・“@{TEMPO-M:}”命令によるテンポの設定にのみ使用します。
“,”で区切った複数のトラック番号を与えることで、複数のトラックに同時にデータを与えることができます。
; 3トラックにcdefgを与える 3 cdefg ; 3,4,5トラックにcdefgを与える 3,4,5 cdefg“#” グローバル命令行として処理します。 “@” データ・ブロック定義行として処理します。 “;” 注釈行として読み飛ばします。処理はしません。 それ以外 注釈行として読み飛ばします。