Indefinite repeat character directive Format .IRPC symbol,<STRING> . . . range . . . .ENDR
1 – Parameters
symbol A formal argument that is successively replaced with the specified characters enclosed in angle brackets (<>). If no formal argument is specified, the assembler displays an error message. <STRING> A sequence of characters enclosed in angle brackets and used in the expansion of the indefinite repeat range. Although the angle brackets are required only when the string contains separating characters, their use is recommended for legibility. range The block of source text to be repeated once for each occurrence of a character in the list. The range can contain macro definitions and repeat ranges. .MEXIT is legal within the range.
2 – Description
.IRPC is similar to .IRP except that .IRPC permits single- character substitution rather than argument substitution. On each iteration of the indefinite repeat range, the formal argument is replaced with each successive character in the specified string. The .ENDR directive specifies the end of the range. .IRPC is similar to a macro definition with only one formal argument. At each expansion of the repeat block, this formal argument is replaced with successive characters from the actual argument string. The directive and its range are coded in line within the source program and do not require calling the macro by name. .IRPC can appear either inside or outside another macro definition, indefinite repeat block, or repeat block (see description of .REPEAT).
3 – Example
The macro definition is as follows: .macro X_COUNT ARG COUNT = 0 .irpc CH,<ARG> .iif identical,<CH>,<X>, COUNT = COUNT + 1 .endr .endm X_COUNT The macro call and expansion of the macro defined previously is as follows: X_COUNT XXFOOXBARXX COUNT = 0 .irpc CH,<XXFOOXBARXX> .iif identical,<CH>,<X>, COUNT = COUNT + 1 .endr .iif identical,<X>,<X>, COUNT = COUNT + 1 .iif identical,<X>,<X>, COUNT = COUNT + 1 .iif identical,<F>,<X>, COUNT = COUNT + 1 .iif identical,<O>,<X>, COUNT = COUNT + 1 .iif identical,<O>,<X>, COUNT = COUNT + 1 .iif identical,<X>,<X>, COUNT = COUNT + 1 .iif identical,<B>,<X>, COUNT = COUNT + 1 .iif identical,<A>,<X>, COUNT = COUNT + 1 .iif identical,<R>,<X>, COUNT = COUNT + 1 .iif identical,<X>,<X>, COUNT = COUNT + 1 .iif identical,<X>,<X>, COUNT = COUNT + 1 .print "%integer(COUNT)" %MACRO64-I-GENPRINT, Generated PRINT: 5 This example uses the .IRPC directive to iterate over the characters in the argument to the X_COUNT macro. Each time an argument character is X, the variable COUNT is incremented. After the X_COUNT macro has expanded, the example uses the %INTEGER() lexical operator to display the value of COUNT.