$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.2 $! On 5-FEB-1993 14:33:46.28 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. EACH.COM;1 $! 2. EACH.DESC;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X$! X$!`20The`20EACH`20command X$! X$!`20Usage: X$!`09$`20EACH`20specs`20`5B"(search)"`5D`20`5B"command"`5D`20`5B"initial"`5D V`20`5B"final"`5D X$! X$`20verify`20=`20'f$verify(0)' X$`20on`20control_y`20then`20goto`20fin`09`09`09!Exit`20cleanly`20on`20CTRL/Y X$`20on`20warning`20then`20continue X$`20first`20=`201`09`09`09`09`09!TRUE`20until`20first`20file`20seen X$`20if`20f$extract(0,1,p1)`20.eqs.`20"@"`09`09!File`20of`20specs? X$`20then`09assign/user_mode`20SYS$COMMAND`20SYS$INPUT`09!Could`20be`20from`20t Verminal X$`09copy/nolog`20'f$parse(f$extract(1,99999,p1),".COM")'`09`09- X`09`09SYS$SCRATCH:each_t_'f$env("DEPTH")'.tmp X$`09if`20.not.`20$STATUS`20then`20goto`20fin X$`20else`09direct`20:=`20directory`09`09`09!Get`20the`20directory X$`09direct/brief/nohead/notrail/column:1`09`09`09`09- X`09`09/output=SYS$SCRATCH:each_t_'f$env("DEPTH")'.tmp`20'p1' X$! X$!`20Add`20/versions:1`20after`20/brief`20if`20you`20want`20the`20default`20to V`20be`20one`20version. X$!`20If`20you`20do`20that,`20you'll`20have`20to`20include`20/noversions`20on V`20file`20specifications X$!`20when`20you`20actually`20want`20all`20the`20versions`20include. X$! X$`09if`20.not.`20$STATUS X$`09then X$`09`09write`20SYS$ERROR`20"?Can't`20get`20directory`20of`20''p1'" X$`09`09goto`20fin X$`09endif`09`09 X$`20endif X$`20search_arg`20=`20"" X$`20if`20f$extract(0,1,p2)`20.eqs.`20"("`09`09!Search`20argument? X$`20then`09search_arg`20=`20f$extract(1,f$length(p2)-2,p2)`09!Save`20it X$`09p2`20=`20p3`09`09`09`09`09!Shift`20the`20rest`20over X$`09p3`20=`20p4 X$`09p4`20=`20p5 X$`09p5`20=`20p6 X$`09p6`20=`20p7 X$`09p7`20=`20p8 X$`09p8`20=`20"" X$`20endif X$`20if`20p2`20.eqs`20"" X$`20then`09write`20SYS$OUTPUT`20"Enter`20commands`20to`20be`20executed,`20CTRL V/Z`20when`20done:" X$`09copy/nolog`20SYS$COMMAND`20SYS$SCRATCH:each_c_'f$env("DEPTH")'.tmp X$`09p2`20=`20"@SYS$SCRATCH:each_c_''f$env("DEPTH")'.tmp" X$`20endif X$`20open/read`20EACH_FILES`20SYS$SCRATCH:each_t_'f$env("DEPTH")'.tmp X$`20on`20control_y`20then`20goto`20ask X$! X$get_next_file: X$`20on`20warning`20then`20continue X$`20read/end=files_done`20EACH_FILES`20line X$`20if`20line`20.eqs.`20""`20then`20goto`20get_next_file`09!Ignore`20blank`20l Vines X$`20compressed_line`20=`20f$edit(line,"COMPRESS") X$`20s`20=`20f$extract(0,f$locate("`20",compressed_line),compressed_line) X$`20if`20search_arg`20.nes.`20"" X$`20then`09assign/user`20_NL:`20SYS$ERROR`09`09!Supress`20"No`20strings X$`09assign/user`20_NL:`20SYS$OUTPUT`09`09!`20matched`20message X$`09search/nooutput`20's'`20'search_arg' X$`09if`20$SEVERITY`20.ne.`201`20then`20goto`20get_next_file X$`20endif X$! X$!`20We've`20got`20a`20matching`20file X$! X$`20if`20first`09`09`09`09`09!Do`20this X$`20then`09first`20=`200`09`09`09`09!`20once`20only. X$`09if`20p3`20.nes.`20"" X$`09then`20`09assign/user_mode`20SYS$COMMAND`20SYS$INPUT X$`09`09verify`20=`20f$verify(verify) X$`09`09'p3' X$Your_Command_Had_A_Trailing_Dash:`09verify`20=`20'f$verify(0)' X$!`20The`20label`20above`20will`20appear`20in`20the`20error`20message`20if`20t Vhe`20user's`20command X$!`20had`20a`20trailing`20dash. X$`09`09on`20warning`20then`20continue X$`09`09deassign/user_mode/all X$`09endif X$`20endif X$`20n`20=`20f$parse(s,,,"NAME") X$`20t`20=`20f$parse(s,,,"TYPE") X$`20nt`20=`20n`20+`20t X$`20lv`20=`20s`20-`20f$parse(s,,,"VERSION") X$`20assign/user_mode`20SYS$COMMAND`20SYS$INPUT X$`20verify`20=`20f$verify(verify) X$`20'p2' X$Your_Command_Had_A_Trailing_Dash:`20verify`20=`20'f$verify(0)' X$`20deassign/user_mode/all X$`20goto`20get_next_file X$! X$!`20Here`20on`20CTRL/Y`20while`20we`20are`20working`20through`20the`20file V`20list X$! X$ask: X$`20inquire`20each_q`20"Type`20Y`20to`20continue`20with`20next`20file,`20N`20t Vo`20exit`20now" X$`20if`20each_q`20then`20goto`20get_next_file X$!`20else`20fall`20through. X$! X$!`20Here`20when`20there`20are`20no`20more`20files`20to`20process X$! X$files_done: X$`20if`20.not.`20first`20.and.`20p4`20.nes.`20""`09!Final`20present`20and`20fi Vles`20seen? X$`20then`09on`20warning`20then`20continue X$`09assign/user_mode`20SYS$COMMAND`20SYS$INPUT X$`09verify`20=`20f$verify(verify) X$`09'p4' X`09$Your_Command_Had_A_Trailing_Dash:`20verify`20=`20'f$verify(0)' X$`09deassign/user_mode/all X$`20endif X$! X$!`20Here`20to`20clean`20up`20and`20exit X$! X$fin: X$`20on`20severe`20then`20continue X$`20close/nolog`20EACH_FILES X$`20if`20f$search("SYS$SCRATCH:each_%_''f$env("DEPTH")'.tmp;*")`20.nes.`20"" V`09- Xthen`09delete/nolog`20SYS$SCRATCH:each_%_'f$env("DEPTH")'.tmp; X$`20verify`20=`20f$verify(verify) $ call unpack EACH.COM;1 270910994 "" $! $ create 'f' XThis`20file`20features`20a`20routine`20published`20in`20the`20January/February V`201993`20issue`20 Xof`20Digital`20Systems`20Journal.`20The`20code`20was`20first`20run`20in`20Jerr Vold`20Leichter,`20 XPh.D.'s`20article`20"OpenVMS`20Kernels:`20To`20EACH`20His`20Own,"`20which`20ap Vpeared`20on`20page`20 X39.`20EACH`20is`20a`20command`20file`20that`20gives`20you`20a`20flexible`20was V`20of`20applying`20one`20 Xor`20several`20commands`20in`20succession`20to`20a`20group`20of`20files.`20It V`20can`20select`20files`20 Xbased`20on`20any`20of`20the`20DIRECTORY`20command's`20fairly`20extensive`20set V`20of`20file`20 Xselection`20qualifiers. $ call unpack EACH.DESC;1 1276476104 "" $ v=f$verify(v) $ exit