zOs/REXX.O08/SCANREAD
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
if m.scanRead.ini = 1 then
return
m.scanRead.ini = 1 then
call scanIni
call jIni
call oDecMethods oNewClass('ScanRead'),
, 'scanReadNl return scanReadNlImpl(m, unCond)',
, 'scanSpaceNl scanReadSpaceNl(m)',
, 'scanClose call scanReadClose m ',
, 'scanInfo scanReadInfo(m)',
, 'scanPos scanReadPos(m)'
return
endProcedure scanReadIni
/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
return scanReadReset(oNew('ScanRead'), rdr , n1, np, co)
scanReadReset: procedure expose m.
parse arg m, rdr, n1, np, co
call scanReset m, n1, np, co
m.m.atEnd = 0
m.m.lineX = 0
m.m.read = rdr
call jOpen rdr, 'r'
call scanReadNl m, 1
return m
endProcedure scanRead
scanClose: procedure expose m.
parse arg m
interpret oObjMethod(m, 'scanClose')
return
scanReadClose: procedure expose m.
parse arg m
call jClose m.m.read
return
scanReadNl: procedure expose m.
parse arg m, unCond
interpret oObjMethod(m, 'scanReadNl')
endProcedure scanReadNl
/*--- return true/false whether we are at the end of line / reader ---*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
if unCond ^== 1 then
if m.m.pos <= length(m.m.src) then
return 0
if m.m.atEnd then
return 0
m.m.atEnd = ^ jRead(m.m.read, m'.SRC')
if m.m.atEnd then do
m.m.pos = 1 + length(m.m.src)
end
else do
m.m.pos = 1
m.m.lineX = m.m.lineX + 1
end
return ^ m.m.atEnd
endProcedure scanReadNLimpl
scanReadSpaceNl: procedure expose m.
parse arg m
fnd = 0
do forever
if scanSpaceCom(m) then
fnd = 1
if ^ scanReadNl(m) then
return fnd
fnd = 1
end
endProcedure scanReadSpaceNl
scanReadPos: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
return E
else
return m.m.lineX m.m.pos
endProcedure scanReadPos
scanReadInfo: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
msg = msg'\natEnd after'
else
msg = msg'\npos' m.m.pos 'in'
return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/* copy scanRead end **************************************************/