home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/kermit +
- ;
- ; i n s t a l l
- ;
- ; Script to install new C-Kermit binaries from a staging area to the
- ; kermit/test/bin area at the Kermit website. For each binary, any old ones
- ; are deleted from the target area before moving the new one in because there
- ; is not enough room in the target area for all the old ones and all the new
- ; ones at the same time. Runs in UNIX only. C-Kermit 7.0 Beta.07 required.
- ; See the "cleandups" script for an explanation of the filenames, etc.
- ;
- ; Change the first line to have the path of C-Kermit 7.0 on your computer
- ; and give this file execute permission. Then run this script exactly as if
- ; it were a shell script.
- ;
- ; Author: F. da Cruz, the Kermit Project, Columbia University, May 1999
- ;
- ; Parameters:
- ; \%1 = Beta number (one or two digits, required)
- ; \%2 = Function: INSTALL or TEST
- ; \%3 = Source directory
- ; \%4 = Target directory (default = /pub/ftp/kermit/test/bin)
- ;
- local \%b \%e \%f \%j \%k \%l \%m \%n \%x \%y ; Local scalars
- local \&a[] \&b[] ; Local arrays
- local usage found freed lowest installing count ; Local macros
-
- .\%m := \fbasename(\%0) ; Script name for usage message
-
- if LLT \v(version) 700000 exit 1 \%m: C-Kermit 7.0 required
- if not equal \v(system) UNIX exit 1 \%m: UNIX required
-
- define usage {
- exit 1 Usage: \%m betanumber {INSTALL,TEST} sourcedir targetdir
- }
- ; Check parameters...
- ;
- if not def \%1 usage
- if not numeric \%1 exit 1 Beta number not numeric
- if < \%1 1 exit 1 Beta number not positive
- if > \%1 99 exit 1 Beta number more than two digits -- Too many Betas!
-
- undef installing ; Assume TEST - no touching files for real.
- if not def \%2 .\%2 = TEST
- if match INSTALL \%2* .installing = 1
- else if not match TEST \%2* usage
-
- ; Get and verify source directory
-
- if not def \%3 .\%3 = . ; Default is current directory
- cd \%3
- if fail exit 1 Can't cd to "\%3"
-
- ; Get and verify destination directory
-
- if not def \%4 .\%4 = /pub/ftp/kermit/test/bin
- .\%4 := \fpathname(\%4)
- if eq \fright(\%4,1) / .\%4 := \fstripx(\%4,/)
- if not dir \%4 exit 1 \%4 is not a directory.
-
- ; Define constants (note new assignment operators)...
-
- .\%e = 196 ; C-Kermit edit number
- .lowest = 2 ; C-Kermit 7.0.195 Betas started off at 2.
- .found = 0
- .freed = 0
- .count = 0
-
- .\%x ::= \%1 - 1 ; Beta number before this one.
- .\%b := \flpad(\%1,2,0) ; Current beta number left-padded with zero.
-
- ; Say what will happen...
-
- echo Installing binaries for Beta.\%b; lowest = \m(lowest); previous = \%x
- if def installing echo \%3: REALLY INSTALLING...
- else echo \%3: JUST TESTING and not really installing...
-
- ; The following command assigns the list of files that matches the pattern
- ; for this Beta version to the array \&a[] and the number of files to \%n.
-
- .\%n := \ffiles(ck*\%eb\%b*,&a)
- if < \%n 1 exit 1 No files match "ck*\%eb\%b*"
- echo Matches: \%n
-
- sort a ; Sort the file-list array.
-
- for \%i 1 \%n 1 { ; Loop through file list for this beta.
- if exist \%4/\&a[\%i] {
- if not newer \&a[\%i] \%4/\&a[\%i] { ; If target file already exists
- echo [SKIP] \&a[\%i] ; and it's not older than source
- continue ; skip this file.
- }
- }
- for \%j \%x \m(lowest) -1 { ; Search for previous versions of same binary.
- .\%l := \flpad(\%j,2,0)
- .\%f := \%4/\freplace(\&a[\%i],b\%b,b\%l)
- if exist \%f { ; Found one
- increment found ; Count it
- increment freed \fsize(\%f) ; Get file size for stats
- if def installing { ; If installing
- delete /verbose \%f ; delete it verbosely
- if fail exit 1 FATAL - DELETE \%f
- } else { ; Otherwise only listing
- echo [DELE] \%f ; Say we would have deleted it
- }
- }
- }
- for \%j \%e-1 193 -1 { ; Same deal for previous edits
- .\%f := \%4/\freplace(\&a[\%i],\%eb\%b,\%j*)
- .\%y := \ffiles(\%f,&b)
- if = \%y 0 continue
- sort /rev b
- set flag on
- for \%k 1 \%y 1 {
- increment found
- increment freed \fsize(\&b[\%k])
- if def installing {
- delete /verbose \&b[\%k]
- if fail exit 1 FATAL - DELETE \&b[\%k]
- } else {
- echo [DELE] \&b[\%k]
- }
- }
- }
- if def installing { ; If installing
- copy /list \&a[\%i] \%4/\&a[\%i] ; Install the new binary
- if fail exit 1 FATAL - COPY \&a[\%i]
- } else { ; Otherwise
- echo [COPY] \&a[\%i] => \%4 ; just print a message
- }
- increment count ; Count this file
- }
- undef \%m
- if not def installing def \%m (NOT REALLY)
- echo Binaries installed: \m(count) \%m
- echo Files deleted: \m(found) \%m
- echo Bytes Freed: \m(freed) \%m
-
- exit 0
-