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'. ;---------------------------------------------------------------------------