zOs/REXX.O08/OODIV

/* copy ooDiv begin ****************************************************
***********************************************************************/
readDsnOpen: procedure expose m.
parse arg oid, spec
    x = dsnAlloc(spec, 'SHR', 'RE'oid)
    dd = word(x, 1)
    call readDDBegin dd
    return ooDefReadStem(oid, 'res = readDD('dd', "M."stem".")',
                    , 'call readDDEnd' dd';' subword(x, 2))
endProcedure readDsnOpen

readCatOpen: procedure expose m.
parse arg oid, src
    if symbol("m.oo.oid.readCatOid") ^= 'VAR' then
        m.oo.oid.readCatOid = ooNew()
    catOid = m.oo.oid.readCatOid
    ox = 0
    do ix=2 to arg()
        s = arg(ix)
        do while s <> ''
            ex = pos('$', s)
            if ex > 0 then do
                w = strip(left(s, ex-1))
                s = substr(s, ex+1)
                end
            else do
                w = strip(s)
                s = ''
                end
            if w ^= '' then do
                ox = ox + 1
                m.oo.oid.readCat.ox = w
                end
            end
        end
    m.oo.oid.readCat.0 = ox
    m.oo.oid.readCatIx = 0
    call ooDefRead catOid, 'res=0'
    return ooDefRead(oid, 'res = readCat("'oid'", var);',
                         , 'call readCatClose "'oid'";')
endProcedure readCatOpen

readCat: procedure expose m.
parse arg oid, var
    catOid = m.oo.oid.readCatOid
    do forever
        if ooRead(catOid, var) then
            return 1
        catIx = m.oo.oid.readCatIx + 1
        if catIx > 1 then
            call ooReadClose catOid
        if catIx >  m.oo.oid.readCat.0 then
            return 0
        m.oo.oid.readCatIx = catIx
        src = m.oo.oid.readCat.catIx
        if left(src, 1) = '&' then
            call ooReadStemOpen catOid, strip(substr(src, 2))
        else
            call readDsnOpen catOid, src
        end
endProcedure readCat

readCatClose: procedure expose m.
parse arg oid
    if m.oo.oid.readCatIx > 0 then
        call ooReadClose m.oo.oid.readCatOid
    return
endProcedure readCatClose
/* copy ooDiv end   ***************************************************/