zOs/REXX.O08/OO

/* copy oo begin ******************************************************/
call ooIni
/* ri = readDsnOpen(ooNew(), 'wk.text(testin)') */
call ooArgs2Stem aaa, 1, 'aaa.1 eins', 'aaa.2 zwei', 'aaa.3 drei'
ri = readCatOpen(ooNew(), "&AAA $  wk.text(testin) ",,'&' aaa,
                            , 'wk.text(msk1) $ &AAA')
do i=1 by 1 while ooRead(ri, line)
    say 'line' i strip(m.line, 't')
    end
call ooReadClose ri
exit

ooIni: procedure expose m.
    m.oo.lastId = 1
    return
endProcedure ooIni

ooNew: procedure expose m.
    m.oo.lastId = m.oo.lastId + 1
    return m.oo.lastId
endProcedure newoo

ooFree: procedure expose m.
parse arg id
    return
endProcedure ooFree

ooRead: procedure expose m.
parse arg oid, var
    res = '?'
    interpret m.oo.oid.read
    return res
endProcedure ooRead

ooReadClose: procedure expose m.
parse arg oid
    stem = ''
    interpret m.oo.oid.readClose
    m.oo.oid.read = 'res=0'
    m.oo.oid.readClose = ''
    return
endProcedure ooReadClose

ooDefRead: procedure expose m.
parse arg oid, m.oo.oid.read, m.oo.oid.readClose
    return oid
endProcedure ooDefRead

ooDefReadStem: procedure expose m.
parse arg oid, m.oo.oid.readStem, close
    m.oo.oid.0 = 0
    m.oo.oid.readStemCx = 0
    return ooDefRead(oid, 'res = ooReadStem2Ln("'oid'", var);', close)
endProcedure ooDefReadStem

ooReadStem2Ln: procedure expose m.
parse arg oid, v
    cx = m.oo.oid.readStemCx
    if cx >= m.oo.oid.0 then do
        res = '?'
        stem = 'OO.'oid
        m.stem.0 = 0
        m.oo.oid.stCx = 0
        interpret m.oo.oid.readStem
        if ^ res then
            return 0
        else if m.stem.0 < 1 then
            call err 'stem.0='m.stem.0 'after 1 from' m.oo.oid.readStem
        cx =  0
        end
    cx = cx + 1
    m.v = m.oo.oid.cx
    m.oo.oid.readStemCx = cx
    return 1
endProcedure ooReadStem2Ln

ooReadStemOpen: procedure expose m.
parse arg oid, stem
    call ooDefReadStem oid, 'res = 0;'
    do ix=0 by 1 to m.stem.0
        m.oo.oid.ix = m.stem.ix
        end
    m.oo.oid.0 = m.stem.0
    return oid
endProcedure ooReadStemOpen

ooReadArgsOpen: procedure expose m.
parse arg oid, ox
    call ooDefReadStem oid, 'res = 0;'
    if ox = '' then
        ox = m.oo.oid.0
    else
        ox = ox - 1
    do ax=3 by 1 to arg()
        ox = ox + 1
        m.oo.oud.ox = arg(ax)
        end
    m.oo.oid.0 = ox
    return oid
endProcedure ooReadArgsOpen

ooArgs2Stem: procedure expose m.
parse arg stem, ox
    if ox = '' then
        ox = m.stem.0
    else
        ox = ox - 1
    do ax=3 by 1 to arg()
        ox = ox + 1
        m.stem.ox = arg(ax)
        end
    m.stem.0 = ox
    return stem
endProcedure ooArgs2Stem
/* copy oo end ********************************************************/