IRP Directive Has Single Line Limit of 120 Characters

ID Number: Q67788

5.10 5.10a | 5.10 5.10a

MS-DOS | OS/2

buglist5.10 buglist5.10a buglist6.00

Summary:

In the Microsoft Macro Assembler (MASM) versions 5.1 and 5.1a, the IRP

(instruction repeat) directive has a single line limit of 120

characters. MASM version 6.0 has no limit. The code example below

shows a macro with an IRP that has 125 characters. The result of this

program with MASM 5.1 or 5.1a is an error message that states:

End of file encountered on input file

Number of open conditionals:14

End of file encountered on input file

This error occurs because the assembler is looking for a closing

bracket (>), but the line is over the limit of 120 characters. As a

result, the assembler accepts the rest of the code to be part of the

IRP parameters. By shortening the final parameter to be within the

limit (change TP$_EOS to TP), the bracket is read correctly and the

remainder of the program is assembled with no errors.

Note: In this example, the IRP argument list is stated in three lines;

however, it should be all on the same line to cause the error. The

120-character limit is only on the same line. A workaround is to

continue the argument on the next line as seen below.

Microsoft has confirmed this to be a problem in MASM versions 5.1 and

5.1a. This problem was corrected in MASM version 6.0.

Sample Code

-----------

$tran macro keyword

irpc TP$_DUMMY,<keyword>

ifidn <&TP$_DUMMY>,<T>

irp TP$_DUMMY2,<TP$_ANY,TP$_ALPHA,TP$_DIGIT,

TP$_STRING,TP$_SYMBOL,TP$_BLANK,TP$_DECIMAL,

TP$_OCTAL,TP$_HEX,TP$_LAMBDA,TP$_EOS>

%out TP$_DUMMY2

endm

endif

endm

endm

$tran if_anything_cmd

end

Additional reference words: 5.10 5.10a