UNIX C SHELL'S VERSION OF NORTON'S CD

Zen Jun Wu zjw at shape.mps.ohio-state.edu
Wed Jan 9 10:00:24 AEST 1991


	The following is UNIX C SHELL's VERSION OF NORTON's CD, which is well 
known in the MS-DOS world. But this one is even more powerful. 
           Eg. suppose user has ~/fortran/source/back-d, 
               ncd -d -d
               ncd d  
               ncd /-d  
               ncd s/b  
               ncd f/o/c  
               ncd ~//r/k  
           all will bring user to ~/fortran/source/back-d.

Save this news as ncdcsh and cut header. Run it by using
   csh -f ncdcsh
logout then login,  type
  ncd -h
to   see the help message. 

Any  improvement or enhancement is welcome and I gladly like to know about
it.



______________________________________________________________________________
Zhenjun Wu          | The more you learn,  | Internet: zjw at shape.mps.ohio    |
Dept. of Math.      | the more you gain,   |               -state.edu        |
The Ohio State Univ.| the more you achieve!|_________________________________|
##############################################################################

-----------Cut here and save the following as ncdcsh ------------------------
#add alias ncd ... in .login file if there isn't.
if ( ! `egrep -c '(alias) (ncd)' ${HOME}/.login `) \
 echo 'alias ncd "${HOME}/.ncdcsh \!* && cd `cat ${HOME}/.ncddir ` " ' >> \
    ${HOME}/.login
#creat .ncdcsh file
cat - >! ${HOME}/.ncdcsh <<'NCDFILE'
#!/bin/csh -f
#######################################################################
#                                                                     #
#          UNIX C SHELL VERSION OF NORTORN'S CD, V1.0  1990           #
#                                                                     #
#       CHANGE WORKING DIRECTORY EASILY BY USING ONE OR MORE          #
#    LETTERS OF THE PATH.                                             #
#                                                                     #
#      WRITTEN BY ZHENJUN WU,                                         #
#      THE DEPARTMENT OF MATHEMATICS,                                 #
#      THE OHIO STATE UNIVERSITY                                      #
#      INTERNET: zjw at shape.mps.ohio-state.edu                         #
#                                                                     #
#######################################################################
 
#command name
set name=ncd
#the file to store the dirctory
set ncde=${home}/.${name}dir
# if no argument, use cd
if ( ! $#argv  ) then
  cd
  exit 1
endif
#   the file to store the directory tree
set namerc = "${HOME}/.${name}rc"
#   if env variable NCDDIR is not set, we use ${HOME}
if ( ! ${?NCDDIR} ) setenv NCDDIR ${HOME}
# get arguments

while ( $#argv > 0 )
	set par = $argv[1]
	shift
   switch ($par)
     case -h: 
          cat - <<help!
   Useage: $name [ [ -d ] dirname ] [ -r [ searchpath ] ]
       or: $name -h
   
   -d      Changes working directory to dirname. dirname is a portion of
           the path of the directory you want to change to. 
           Eg. suppose user has ~/fortran/source/back-d, 
               $name -d -d
               $name d  
               $name ~/f//c  
           all will bring user to ~/fortran/source/back-d.
           Default of dirname is the home directory of user. 
           -d may be omitted if dirname is not one of -d, -r, -h.
 
   -r      Reads the directory tree started from the searchpath, under which
           dirname is sought. It's necessary only when the directory has been
           altered since last read. searchpath should be full path, 
           ~/fortran, ~/../user are ok, but ../uer, user/fortran are not.
           Default of searchpath is the home directory of user. Use
              setenv NCDDIR searchpath
           in .login file to change the default. 
           
   -h      Prints this message.
help!
              exit 1
     case -d: 
		set dirname=$argv[1]
               shift
	   	breaksw
     case -r: 
		if ( $#argv >0 ) then
                  if ( -d $argv[1] ) then
		    setenv NCDDIR $argv[1]
                  else
                    echo $argv[1] is not a directory
		    exit 1
                  endif
                  shift		  
		endif
	      du $NCDDIR |& grep -v "Permission"| cut -f 2 >! "$namerc" 
              breaksw
     default: 
	set dirname=$par
	endsw 
end
# read the diirectory tree
   if ( !(-f $namerc) ) then
      du $NCDDIR |& grep -v "Permission"| cut -f 2 >! "$namerc" 
  endif
if ( ! ${?dirname} ) exit 2
# select dir.  roughly first
set eg=`echo $dirname |tr '/' ' ' `
set pdir=` egrep -e "$eg[$#eg]" $namerc |tr  '\12' ' ' `
set noglob 
set dirn=`echo "$dirname" |sed  -e 's/\// .*/g' `
unset noglob 
# find dir.  user needs
foreach i ( `echo $pdir` )
  set j=` echo $i |tr '/' ' ' `
  @ nj=$#j
  @ n=$#dirn
  if ( $nj >= $n ) then
    unset nodir
    while ( $n )
      if ( ! `echo $j[$nj] | grep -c -e "$dirn[$n]" ` ) then
        set nodir
        break
      endif
      @ n--
      @ nj--
    end
    if ( ! ${?nodir}  ) then
      if ( ${?predir} ) then
        echo -n "cd  $predir (y/n)?"
        set st=$<
        if ( "@$st" == "@y" || "@$st" == "@Y" ) then
          echo  $predir >! $ncde
          exit 0
        else
          set predir=$i
        endif
      else
        set predir=$i
      endif
    endif
  endif
end
if ( ${?predir} ) then
  echo $predir >! $ncde
  exit 0
  else
    echo Directory $dirn not found
    echo Use $name -h to get help
    exit 1
  endif
'NCDFILE'

chmod 700 ${HOME}/.ncdcsh
echo ncd is installed. 
echo logout and loging in,  type
echo   ncd -h
echo to see the help message. 
--

______________________________________________________________________________
Zhenjun Wu          | The more you learn,  | Internet: zjw at shape.mps.ohio    |
Dept. of Math.      | the more you gain,   |               -state.edu        |



More information about the Comp.unix.shell mailing list