zOs/REXX/EXASS

/* rexx
*/

c0 = sysvar('syscpu')
say c0 c0 'start'
c1 = c0
call mkStr eins, 300  , 1000
c0 = sysvar('syscpu')
say c0 (c1-c0) 'make'
c1 = c0
call copyA eins, zwei.e.f.g.h, 1000
c0 = sysvar('syscpu')
say c0 (c0-c1) 'copyA'
c1 = c0
call copyV eins, drei.e.f.g.h, 1000
c0 = sysvar('syscpu')
say c0 (c0-c1) 'copyV'
c1 = c0
exit

mkStr: procedure expose m.
parse arg m, len, cnt
    abc = 'abcdefgehijklmnopqrstuvwxyz'
    abc = copies(abc, 1 + cnt % length(abc))
    do i=1 to cnt
        s = i
        do j=1 while length(s) < len
           s = s substr(abc, j, 1) s
           end
        m.m.i = left(s, len)
        end
    m.m.0 = cnt
    return
endProcedure mkStr

copyV: procedure expose m.
parse arg s, t, cnt
    do i=1 to cnt
        do j=1 to m.s.0
            m.t.j = m.s.j
            end
        end
    return
endProcedure copyV

copyA: procedure expose m.
parse arg s, t, cnt
    do i=1 to cnt
        do j=1 to m.s.0
            m.t.j = s'.'j
            end
        end
    return
endProcedure copyV