The LANSA RDML is quite good at string handling. When this is combined with the flexibility of true subroutine parameters, a very simple method of assembling, (and in this case printing), text strings results.
Consider the following subroutine:
SUBROUTINE NAME(PRINT_TEXT) PARMS(#S01 #S02 #S03 #S04 #S05) DEFINE FIELD(#S01) TYPE(*CHAR) LENGTH(30) DEFINE FIELD(#S02) TYPE(*CHAR) LENGTH(30) DEFINE FIELD(#S03) TYPE(*CHAR) LENGTH(30) DEFINE FIELD(#S04) TYPE(*CHAR) LENGTH(30) DEFINE FIELD(#S05) TYPE(*CHAR) LENGTH(30) DEFINE FIELD(#R01) TYPE(*CHAR) LENGTH(132) DEF_LINE NAME(#R01L) FIELDS(#R01) USE BUILTIN(BCONCAT) WITH_ARGS(#S01 #S02 #S03 #S04 #S05) TO_GET(#R01) PRINT LINE(#R01L) ENDROUTINE
This subroutine can be used like this:
EXECUTE PRINT_TEXT('''Product''' + #PRODNO + '''is out of stock. Please contact''' #SUPPLIER + '''to order more.''')
to print:
Product 836 is out of stock. Please contact ACME ENGINEERING to order more.
Or like this:
EXECUTE PRINT_TEXT('''Your departmental supervisor''' + #TITLE + #NAME + '''should be informed of this error''' + *BLANKS)
to print:
Your departmental supervisor Ms Cullen should be informed of this error.