- /* 命令とオペランドの取得 */
- if(*p == '\n' || *p == '\0') { /* 命令がない場合は、終了 */
- if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */
- setcerr(105, NULL); /* no command in the line */
- }
- } else {
- /* 命令の取得 */
- sepp = p + strcspn(p, " \t\n");
- *sepp = '\0';
- cmdl->cmd = strdup_chk(p, "cmdl.cmd");
- p = sepp + 1;
- /* 命令とオペランドの間の空白をスキップ */
- while(*p == ' ' || *p == '\t') {
- p++;
- }
- /* 改行かタブまでの文字列を取得。
- 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
- if((sepp = p + strcspn(p, "\t\n")) > p) {
- *sepp = '\0';
- cmdl->opd = opdtok(p);
- } else {
- cmdl->opd = malloc_chk(sizeof(OPD *), "cmdl.opd");
- cmdl->opd->opdc = 0;
- }
+ }
+
+ /* 命令の取得 */
+ /* 文字列先頭をラベルの次の文字に移動 */
+ p += i;
+ /* 文字列先頭を、ラベルと命令の間の空白の後ろに移動 */
+ p += strspn(p, " \t");
+ /* 命令がない場合は、終了 */
+ if(!p[0]) {
+ if(cmdl->label) { /* ラベルが定義されていて命令がない場合はエラー */
+ setcerr(105, ""); /* no command in the line */