pro dotar, path, tardev, extract=extract, users=users
;
;+
;   Name: dotar
;
;   Purpose: create or extract tar tape (or file) and send mail when complete
;
;   Input Parameters:
;      path   -  string scaler containing a unix pathname 	  (**)
;      tardev -  tape device# or file containing the tar data set (**)
;		 case1: tardev=scaler string - unix tar file name
;		 case2: tardev=integer,      - tape unit number 
;
;   Keyword Parameters:
;      extract - if set,    restores (extracts) tar set from tardev to path
;		 if notset, creates tar set of path onto tardev
;      users -   if set, string array of mail recipients (default is self)
;
;
;      ** NOTE: intepretation of path and tardev depends on the state of the 
;	        extract keyword - (sense of source and destination changes):
;     -----------------------------------------------------------------------
;     Effect of keyword_set(extract) state on parameter interpretaion
;     -----------------------------------------------------------------------
;       state	    path     tardev		dotar function
;                   ------   ------   ---------------------------------------
;   	FALSE(def)  source   dest.    create tar data set on tardev of 
;				      directory tree under pathname=path
;
;	TRUE	    dest.    source   extract tar data set from tardev - 
;				      data is restored to pathname=path
;    -------------------------------------------------------------------------
;
;   Calling Examples:
;      dotar,'/usr/people/freeland'  	(create tar tape on drive 0)
;					  
;      dotar,'~/backup' ,/extract	(extract tar data from from drive 0)
;      					  [data restored to specified path] 
;					
;      dotar,path,1		     	(create tar tape to drive 1)
;					  [path is string variable]
;
;      dotar,path,users=['freeland','morrison']
;
;
;   History: slf, 16-sep-92
;	     slf, 10-dec-92 - update documentation, 
;			      add extract option (switch) 
;		  	      allow '~' syntax for home directory
;-


if n_elements(path) eq 0 then message,'Input path required...'
tarpath=path

; kludge (multiple trailing // are ok)
if keyword_set(extract) then tarpath=tarpath + '/'	 

stardev=size(tardev)
;
if stardev(0) ne 0 then $
   message,'Output tar file must be scaler'
;
;
; determine output tarfile (tape drive or file)
case stardev(1) of
   0: tardev=def_tapd(0)		; tape drive 0 default
   2: tardev=def_tapd(tardev)		; tape drive # supplied
   7: tardev=tardev			; string (filename?) supplied
   else:messge,'Unrecognized tar output file'
endcase 
;
; parameters ok
pushd,curdir()				; save current directory

break_file,tarpath,log,dir,file,version
dset=file+version
;
;if strpos(tardev,'/dev') ne -1 then $ 	; tape
 ;  spawn,'mt -f ' + tardev + ' rewind'

case keyword_set(extract) of
   0: begin
	 message,/info,'Creating tar save set on ' + tardev
         if dir eq '' then begin
	    dir=dset
            dset='.'
         endif
         tarcmd='tar -cvf ' + tardev + ' -C ' + dir + ' ' + dset
         endcase
   1: begin
	 cd,dir	 
         tarcmd='tar -xvf ' + tardev
         message,/info,'Restoring tar data from ' + tardev + $
	    'into directory: ' + curdir()
      endcase
endcase
message,/info,'Spawning Tar Command: ' + tarcmd
spawn,tarcmd
;
popd					; restore directory
;
message= ['Tar Command: ' + tarcmd + ' has completed']
mail,message,users=users,/self, $
   subj='DOTAR Completed'
;
return
end
