From: magnus@Fisher.Stanford.EDU (Magnus Nordborg)
Subject: Submission: Shell scripts to launch NeXTstep applications from command line
Keywords: csh, open, Mail
Organization: DSO, Stanford University
Date: Mon, 25 Jan 93 22:39:02 GMT

	Below are two csh scripts that launch NeXTstep applications from the  
command line.  The first, "nxlaunch", will let you type "nxlaunch Mail" instead  
of "/NextApps/Mail.app/Mail &" or "nxlaunch -o Mail" instead of "open  
/NextApps/Mail.app".  Thus you save typing, and don't have remember the path of  
every application.  

	There is one very useful difference between launching via "open (-o)"  
or directly in background -- using "open" is just like clicking on the app,  
running it the other way is literally launching it from the command line.  For  
example, if you have a terminal open, and use "su" to become another user, then  
type "nxlaunch Mail", that user's mail will be read, whereas the "nxlaunch -o  
Mail" would not.

	This is also useful since "nxlaunch" also takes a "-NXHost" argument:
If I sit at localhost (PublicWindowServer) and rlogin to remotehost, then type  
"nxlaunch -NXHost localhost Mail", my mail on remotehost will be read, whereas  
"nxlaunch -o -NXHost localhost Mail" would read mail on localhost.

	To make this last feature more useful, there is a second script,  
"nxrsh", that is equivalent to "xrsh". Thus you can type (assuming a .rhosts  
file, and the presence of "nxlaunch" on remote host) "nxrsh remotehost Mail".

	These script are public domain, and without any guarantees. Please send  
me improvement and bug reports.

###################### nxlaunch: cut below this line ######################
#! /bin/csh -f
#
#	Finds and launches a NeXTapp from a shell, thus saving you the
#    	trouble of remembering and typing the full path.
#
#	by Magnus Nordborg <magnus@fisher.Stanford.EDU> 
#		Wed Jan 20 13:31:38 PST 1993
#
 
set flags
set useopen

switch ( $#argv )
case 1:
  if ( $argv[1] =~ -h* ) then
    goto usage
  else
    set app = $argv[1]
  endif
  breaksw
case 2:
  if ( "$argv[1]" == "-o" ) then
    set useopen = 1
    set app = $argv[2]
  else
    goto usage
  endif
  breaksw
case 3:
  if ( $argv[1] == "-NXHost" ) then
    set app = $argv[3]
    set flags = "-NXHost $argv[2]"
  else
    goto usage
  endif
  breaksw
case 4:
  set useopen = 1
  set app = $argv[4]
  if ( "$argv[1]" == "-o" && $argv[2] == "-NXHost" ) then
    set flags = "-NXHost $argv[3]"
  else if ( $argv[1] == "-NXHost" && "$argv[3]" == "-o" ) then
    set flags = "-NXHost $argv[2]"
  else
    goto usage
  endif
  breaksw
default:
  goto usage
  breaksw
endsw

# check to see where Apps reside
/usr/bin/dread Workspace ApplicationPaths >& /dev/null	# defined?
if ( $status ) then
  set vmpath = (~/Apps /LocalApps /NextApps /NextDeveloper/Apps /NextAdmin  
/NextDeveloper/Demos)
else
  set tmp = `/usr/bin/dread Workspace ApplicationPaths`
  set vmpath = (`echo $tmp[3] | /bin/awk -F: '{for(i=1;i<=NF;i++) print $i}'`)
endif

# find the App
foreach d ( $vmpath )
  if ( -ed $d ) then
    if ( -ed ${d}/${app}.app ) then
      if ( $useopen ) then
        /usr/bin/open $flags ${d}/${app}.app
      else
        ${d}/${app}.app/${app} $flags &
      endif
      exit 0
    else if ( -ex ${d}/$app ) then		# not in app wrapper
      if ( $useopen ) then
        /usr/bin/open $flags ${d}/$app
      else
        ${d}/$app $flags
      endif
      exit 0
    endif
  endif
end


which echo2 >& /dev/null			# public domain: echo to stderr
if ( $status ) then				#  -- use it if it exists
  echo "$0 : $app not found"
  exit 1
else
  echo2 "$0 : $app not found"
  exit 1
endif

usage:
which echo2 >& /dev/null			# public domain: echo to stderr
if ( $status ) then				#  -- use it if it exists
  echo "Usage: $0 [-o][-NXHost hostname] NeXTapp"
  echo '-o:   use "open" to launch'
  exit 1
else
  echo2 "Usage: $0 [-o][-NXHost hostname] NeXTapp"
  echo2 '-o:   use "open" to launch'
  exit 1
endif

###################### nxrsh: cut below this line ######################
#! /bin/csh -f
#
#	nxrsh -- an equivalent of xrsh
#
#	Usage: nxrsh hostname NeXTapp
#
#	by Magnus Nordborg <magnus@fisher.Stanford.EDU> 
#		Wed Jan 20 13:31:38 PST 1993
#
#	Bugs: I have not been able to come up with a clever way of
#	      finding the correct HOSTNAME -- it has to be set in ".login"
#	      My other shell script, "nxlaunch", is needed to find the app.
#
#   	      There should be a way for this script to make the
#   	      machine PublicWindowServer temporarily -- let me know
#   	      if you find one...
#

set openflag

if( $#argv ) then
  if( "$argv[1]" == "-o" ) then
    set openflag = "-o"
    shift
  endif
endif

if( $#argv != 2 ) then
  echo "Usage: nxrsh [-o] hostname NeXTapp"
  echo '-o:   use "open" to launch'
  exit 1
endif

if( ! $?HOSTNAME ) then
  echo "Environment variable HOSTNAME not set"
  exit 1
endif

# launch it on remote host using "nxlaunch"
/usr/ucb/rsh $argv[1] "nxlaunch $openflag -NXHost $HOSTNAME $argv[2]" &

--


		Magnus Nordborg
		Department of Biological Sciences
		Stanford University
		magnus@fisher.stanford.edu (NeXT mail preferred)