# follow --- path name follower

   integer function follow (path, seth)
   character path (ARB)
   integer seth

   integer i, save_bplabel (4)
   integer getto, ptoc

   shortcall mkonu$ (18)
   external bponu$

   include SWT_COMMON

   integer attach_sw
   integer pname (16), ppwd (3), unpackedn(40), vpack(21), i

   procedure restore_Bplabel forward


   call break$ (DISABLE)               # no interruptions
   do i = 1, 4                         # while changing
      save_bplabel (i) = Bplabel (i)   # common block values
   call mklb$f ($1, Bplabel)
   call break$ (ENABLE)

   call mkonu$ ("BAD_PASSWORD$"v, loc (bponu$))

   if (path (1) == EOS)
      call at$hom (Errcod)

   elif (getto (path, pname, ppwd, attach_sw) == OK) {
      i = ptoc (pname, " "c, unpackedn, 33)     # build the directory name
      unpackedn (i + 1) = " "c
      i += 2
      call ptoc (ppwd, " "c, unpackedn(i), 7)   # and password for converting
      i = 1
      call ctov (unpackedn, i, vpack, 21)       # to character varying
      call at$rel (seth, vpack, Errcod)         # for at$rel
      }

   else {
1     call at$hom (i)
      restore_Bplabel
      return (ERR)
      }

   if (Errcod == 0) {
      restore_Bplabel
      return (OK)
      }
   else {
      call at$hom (i)
      restore_Bplabel
      return (ERR)
      }



   # restore_Bplabel --- restore saved value of Bplabel

      procedure restore_Bplabel {
         local i; integer i

         call break$ (DISABLE)               # no interruptions
         do i = 1, 4                         # while changing
            Bplabel (i) = save_bplabel (i)   # common block values
         call break$ (ENABLE)
         }

   end
