On any mv platform you could do something like:
0001 D=15
0002 FOR I=1 TO 12
0003 CRT OCONV(D,'DMA')
0004 D+=30
0005 NEXT I
which in my locale prints:
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER
(Note that the output is emulation dependent. In the default Cache emulation, the month names are forced to upper-case, but in some other emulations they
are not).
On Cache, these names actually come from the locale. You can view/edit the locale through the management portal, or via classes in the Config.NLS
package.
(unless you use package mapping to map it to other namespaces, the Config.NLS package is only visible from the %SYS namespace/SYSPROG account.)
So for example:
0002 execute "LOGTO SYSPROG"
0003 locale="Config.NLS.Locales"->OpenCurrent()
0004 crt locale->MonthName
0005 execute "LOGTO ":here
which prints:
January February March April May June July August September October November December
The property value is just a space-delimited string, with a leading space.