Parameters
icBufferName | input | character | |
iiQueryID | input | integer | |
ohBufferHandle | output | handle | |
Internal usage
BLF
program code (program1/progress.p)
do vidx = 1 to 3:
find tQbuffers where
tQbuffers.tcTable = icBufferName and
tQbuffers.tidx = vidx and
tQbuffers.tlActive = yes no-error.
if available tQbuffers
then do:
viBufferID = ?.
viBufferID = tQbuffers.thBuffer:unique-id no-error.
if viBufferID <> tQbuffers.tiBufferID
then delete tQbuffers.
end.
if available tQbuffers
then if tQbuffers.tiIsInUseBy = 0
or iiQueryID = 0
then do:
ohBufferHandle = tQbuffers.thBuffer.
if iiQueryID <> 0
then assign tQbuffers.tiIsInUseBy = iiQueryID
vgQBufferUsage = vgQBufferUsage + 1
tQbuffers.tgUsage = vgQBufferUsage.
return.
end.
else next.
create buffer ohBufferHandle
for table substring(icBufferName,1,length(icBufferName,"CHARACTER":U) - 1,"CHARACTER":U)
buffer-name icBufferName in widget-pool "persistent" no-error.
if ohBufferHandle = ? then return.
ohBufferHandle:private-data = "persistent".
find tQbuffers where
tQbuffers.tcTable = icBufferName and
tQbuffers.tidx = vidx and
tQbuffers.tlActive = no no-error.
if not available tQbuffers
then create tQbuffers.
assign tQbuffers.tcTable = icBufferName
tQbuffers.tidx = vidx
tQbuffers.thBuffer = ohBufferHandle
tQbuffers.tiBufferID = ohBufferHandle:unique-id
tQbuffers.tiIsInUseBy = iiQueryID
tQbuffers.tlActive = yes
vgQBufferUsage = vgQBufferUsage + 1
tQbuffers.tgUsage = vgQBufferUsage.
release tQbuffers.
viQBufferCount = viQBufferCount + 1.
leave.
end.
if viQBufferCount > viQBufferLimit
then do:
vidx = 0.
for each tQbuffers where
tQbuffers.tlActive = yes and
tQbuffers.tiIsInUseBy = 0
by tQbuffers.tgUsage on error undo, throw:
viBufferID = ?.
viBufferID = tQbuffers.thBuffer:unique-id no-error.
if viBufferID = tQbuffers.tiBufferID
then do:
delete object tQbuffers.thBuffer.
assign tQbuffers.thBuffer = ?
tQbuffers.tiBufferID = 0
tQbuffers.tlActive = no.
end.
else delete tQbuffers.
viQBufferCount = viQBufferCount - 1.
vidx = vidx + 1.
if vidx > 10 then leave.
end.
end.