Code similar to the following is used in OpenInsight to ensure that volume and table information is synchronized. You should never need to use this code, but it explains why a synchronization problem could cause a table to become unavailable:

* first verify volume structures
cVols = count(Volumes(0), @fm) + (Volumes(0) # "")
for iVol = 1 to cVols
  Vol = Volumes(0)<iVol>
  cFiles = count(Volumes(3)<iVol>, @vm) + (Volumes(3)<iVol> # "")
  for iFile = 1 to cFiles
    File = Volumes(3)<iVol,iFile>
    locate File in Tables(0) using @fm setting Pos then
      * check volume reference
      if Tables(1)<Pos> # Vol then
         Volumes(3) = delete(Volumes(3), iVol, iFile, 0)
      end
     end else
  * file does not exist but is referenced by volume
  Volumes(3) = delete(Volumes(3), iVol, iFile, 0)
  end
  next iFiles
next iVol
 
cFiles = count(Tables(0), @fm) + (Tables(0) # "")
for iFile = cFiles to 1 step -1
  File = Tables(0)<iFile>
  Vol = Tables(1)<iFile>
  * check volume reference
  locate Vol in Volumes(0) using @fm setting Pos then
    locate File in Volumes(3)<Pos> using @vm setting Pos else
      * file not referenced by a volume
      for i = 0 to 5
        Tables(i) = delete(Tables(i), iFile, 0, 0)
      next i
    end
   end else
    * file references unattached volume
    for i = 0 to 5
       Tables(i) = delete(Tables(i), iFile, 0, 0)
    next i
   end
next iFile
  • No labels