PRO pd, dir, rotate=rotate
   COMMON cdd, home_dir, home_len, idl_path, diskname
   COMMON stack_dir, stack 
   ON_ERROR, 2                  ; Return to caller on error
   n_stack = N_ELEMENTS(stack) 
   IF N_ELEMENTS(dir) NE 0 THEN BEGIN
;---------------------------------------------------------------------------
;     New dir is introduced and should be added to the dir stack
;---------------------------------------------------------------------------
      cdd, dir, current=cwd
      i = STRPOS(cwd, '/tmp_mnt')
      IF i EQ 0 THEN cwd = STRMID(cwd, 8, 100)
      IF !version.os EQ 'vms' THEN BEGIN
         IF STRPOS(cwd,diskname) EQ 0 THEN $
            cwd = STRMID(cwd,STRPOS(cwd,':')+1,2000)
      ENDIF
      IF n_stack EQ 0 THEN stack = [cwd] ELSE stack = [cwd, stack]
      cd, current=curr_dir
      i = STRPOS(curr_dir, '/tmp_mnt')
      IF i EQ 0 THEN curr_dir = STRMID(curr_dir, 8, 100)
      IF !version.os EQ 'vms' THEN BEGIN
         IF STRPOS(curr_dir,home_dir) EQ 0 THEN $
            PRINT, '[~'+STRMID(curr_dir,home_len-1,2000), stack $
         ELSE BEGIN
            aa = STRPOS(curr_dir,diskname)
            IF aa EQ 0 THEN $
               PRINT, STRMID(curr_dir,STRLEN(diskname),2000), stack $
            ELSE $
               PRINT, curr_dir, stack
         ENDELSE
      ENDIF ELSE BEGIN
         IF STRPOS(curr_dir,home_dir) EQ 0 THEN BEGIN
            cd_len = STRLEN(curr_dir)
            PRINT, '~'+STRMID(curr_dir,home_len,cd_len-1), stack
         ENDIF ELSE PRINT, curr_dir, stack
      ENDELSE
   ENDIF ELSE BEGIN
;---------------------------------------------------------------------------
;     No new dir is introduced. Just do rotation
;---------------------------------------------------------------------------
      IF n_stack NE 0 THEN BEGIN
         IF N_ELEMENTS(rotate) EQ 0 THEN rot = 1 ELSE BEGIN
            rot = ABS(FIX(rotate))
            IF rot EQ 0 THEN rot = 1
         ENDELSE
         IF rot GT n_stack THEN $
            PRINT, '% PD: Directory stack not that deep.' $
         ELSE BEGIN
;---------------------------------------------------------------------------
;           Rotate the directory stack
;---------------------------------------------------------------------------
            stack = SHIFT(stack,1-rot)
            temp = stack(0)
            IF STRPOS(temp,'[') EQ 0 THEN BEGIN
;---------------------------------------------------------------------------
;              VMS system implied; attach the original diskname before cdd
;---------------------------------------------------------------------------
               temp = diskname+temp
            ENDIF
            cdd, temp, current=cwd
            i = STRPOS(cwd, '/tmp_mnt')
            IF i EQ 0 THEN cwd = STRMID(cwd, 8, 100)
            IF !version.os EQ 'vms' THEN BEGIN
               IF STRPOS(cwd,diskname) EQ 0 THEN $
                  cwd = STRMID(cwd,STRPOS(cwd,':')+1,2000)
            ENDIF
            curr_dir = stack(0)
            stack(0) = cwd
            PRINT, curr_dir, stack
         ENDELSE
      ENDIF ELSE BEGIN
         PRINT, '% PD: No other directory!'
      ENDELSE
   ENDELSE
END

;---------------------------------------------------------------------------
; End of 'pd.pro'.
;---------------------------------------------------------------------------