Bt~ DIR_STUFF.BCKJ DIR_STUFF.BCKxBACK/LOG ACROSS.COM,DEF_DIR.COM,DISK_STAT.COM,DOWN.COM,FIND_DIR.COM,FREEWARE*.*,SETUP.COM,SET_DEF.COM DIR_STUFF.BCK/SAVE BRIVAN >@/G7.0 _PRAXIS::  _PRAXIS$DKA200: V6.2 ~ 5/*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]ACROSS.COM;1+,./>@ 4N-"0123KPWO56Eˇ7Eˇ89G>@HJ:$!-----$!%$! Programmer: Brian Vande Merwe$! (801)226-3355$!$! Group: Development$!K$! Description: Search for a directory to move to. Use 'SDF' to change$! the default.$!$! Valid qualifiers:A$! / ! Where n is the item number of the directory to select.+$! /(D)elete ! Delete the specified record.5$! /(E)xact ! Indicates that p1 is a exact directory.$! /(IG)nore ! Ignore item1$! /(IN)it ! To initialize the holdingTANK file.#$! /(L)log ! Log what's happening.*$! /(NOL)og ! Do NOT log what's happening.*$! /(O)verride ! Override the IGNORE flag.($! /(R)estore ! Restore an IGNORED item.4$! /(V)er ! Verify entries in the holdingTANK file.*$! /(?) ! Display the "LAST" directories.$!$! Valid parameters:I$! ! Specify a partial directory. Could be used with /part'$! ? ! Display the "LAST" directories.$! $! Examples:$! $ acr miscA$! Will change your default to the MISC.DIR directory. If there=$! are more that one, you will be given a list. Then use "$9$! acr/4 misc" to select the 4th item in the list given.$!$!----- $ v = f$verify('across_debug')$.$ on control_y then goto HASTA_LA_VISTA_BABY$$ Gosub PARSER$$ csi_off = ""$ csi_bwarn = ""$ csi_warn = ""$ csi_info = ""$ csi_text = ""$ csi_show = ""$4$ if f$type(sdf) .eqs. "" then sdf :== set default$5$ un = f$edit(f$getjpi("", "username"), "collapse")$$$ datfile := misc:across_tank.'un'$6$ standard = f$integer(f$trnlnm("_across$standard"))$ starting_search = "000000"$N$ if f$locate("/?", qualifiers) .nes. f$length(qualifiers) .or. p1 .eqs. "?"$ then $ sdf/list$ goto HASTA_LA_VISTA_BABY $ endif$ $ if standard .eq. 1$ then$ csi_off = ""$ csi_bwarn = ""$ csi_warn = ""$ csi_info = ""$ csi_text = ""$ csi_show = ""$$ starting_search = ""$ the_dir = "" $ datfile := sys$login:todir.dat?$ if (p1 .eqs. "") .and. (the_dir .eqs. "") then goto BVM_START$ if p1 .nes. ""$ then5$ if f$trnlnm("''p1'") .nes. "" then the_dir = p1?$ if f$extract(0, 1, p1) .eqs. "." then the_dir = "[''p1']"R$ if qualifiers .eqs. "" .and. f$extract(0, 1, p1) .eqs. "[" then the_dir = p1$ endif)$ if the_dir .eqs. "" then goto BVM_START$ sdf 'the_dir'$ goto HASTA_LA_VISTA_BABY $ endif$ $BVM_START:<$ if f$locate("/V", qualifiers) .nes. f$length(qualifiers)$ thenG$ write sys$output "''csi_show'verifying items in ''datfile'''csi_off'"$ write sys$output ""$&$ open/read/write/share tank 'datfile'$VER_READ_LOOP:/$ read/end_of_file=END_VER_READ_LOOP tank stuff$ stuff = stuff - "*"]$ file_loc = f$edit(f$element(1, ";", stuff) + f$element(0, ";", stuff) + ".DIR", "collapse")f$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "Verify: ''file_loc'" $ if f$search(file_loc) .eqs. ""$ then>$ if f$locate("/D", qualifiers) .nes. f$length(qualifiers) $ thenK$ write sys$output "''csi_bwarn'Removing ''csi_show'''file_loc'''csi_off'";$ read/error=NO_DEL_RECORD/key='stuff'/delete tank chk_rec $ elseJ$ write sys$output "''csi_info'Missing: ''csi_text'''file_loc'''csi_off'" $ endif$ endif$$ goto VER_READ_LOOP$$END_VER_READ_LOOP: $ close tank$$ goto HASTA_LA_VISTA_BABY $ endif$ O$ if f$locate("/IN", qualifiers) .eqs. f$length(qualifiers) then goto NO_INIT$&$ if f$search("''datfile'") .eqs. ""$ then$ gosub CREATE_TANK $ endif$H$ if p1 .eqs. "" then p1 = f$element(0, ".", f$environment("default"))$0$ search_spec = p1 - "..." - "]" + "...]*.dir"$O$ write sys$output "''csi_info'searching ''csi_text'''search_spec'''csi_off'"$ write sys$output ""$ $ kntr = 0$($ open/write/read/share tank 'datfile'$ $FILE_LOOP: $ file = f$search(search_spec),$ if file .eqs. "" then goto END_FILE_LOOP,$ filename = "]" + f$parse(file,,, "name")c$ file = file - filename - f$parse(file,,, "type") - f$parse(file,,, "version") - "000000." + "]"*$ out_text = filename + ";" + file - "]"$>$ if f$locate("/LOG", qualifiers) .nes. f$length(qualifiers)$ then:$ write sys$output "Found ''file'''filename'" - "]"$ else $ endif$2$ read/error=WRITE_ITEM/key='out_text' tank infoH$ if out_text .eqs. f$edit(info, "collapse") - "*" then goto FILE_LOOP$ $WRITE_ITEM:>$ write/error=WRITE_REC_ERROR tank f$fao("!132AS", out_text)$>$ if f$locate("/NOL", qualifiers) .nes. f$length(qualifiers)$ then$ elseH$ write sys$output "''csi_show'Added ''file'''filename'''csi_off'" - "]" $ endif$ kntr = kntr + 1$$ goto FILE_LOOP$$END_FILE_LOOP:$ close tank$U$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output ""~$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "''csi_show'Added ''kntr' files.''csi_off'"$$ goto HASTA_LA_VISTA_BABY$ $NO_INIT:&$ if f$search("''datfile'") .eqs. ""$ then?$ write sys$output "''csi_warn'Can't find ''datfile'''csi_off'"$ goto HASTA_LA_VISTA_BABY $ endif$$ if p1 .eqs. ""$ then:$ write sys$output "''csi_info'Nothing to do...''csi_off'"$ goto HASTA_LA_VISTA_BABY $ endif$$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "''csi_info'Searching for request...''csi_off'" $ kntr = 0($ open/write/read/share tank 'datfile'3$ read/error=END_READ_NEXT_REC/key='p1' tank info$READ_NEXT_REC:$ if f$edit(info, "collapse") .eqs. f$edit(info - "*", "collapse") .or. f$locate("/O", qualifiers) .nes. f$length(qualifiers)$ then$ info = info - "*":$ if f$locate("/E", qualifiers) .nes. f$length(qualifiers)$ then)$ if p1 .eqs. f$element(0, ";", info) $ then$ kntr = kntr + 1V$ saved'kntr' = f$edit(f$element(1, ";", info) + f$element(0, ";", info), "collapse") $ endif$ else$ kntr = kntr + 1Y$ saved'kntr' = f$edit(f$element(1, ";", info) + f$element(0, ";", info), "collapse")$ endif $ endif$4$ read/end_of_file=END_READ_NEXT_REC tank new_infoP$ if f$extract(0, f$length(p1), new_info) .nes. p1 then goto END_READ_NEXT_REC$ info = new_info$ goto READ_NEXT_REC$$END_READ_NEXT_REC:$ close tank$$ !"$ ! Check for nothing to select.$ !$ if kntr .eq. 0$ then?$ write sys$output "''csi_info'No directory found...''csi_off'"^$ read/prompt="''csi_show'Scan [''starting_search'...] (Y/[N])?''csi_off' " sys$command yes_no $ if yes_no$ then<$ the_dir = f$search("[''starting_search'...]''p1'*.dir")$ if the_dir .nes. "" $ then3$ filename = "]" + f$parse(the_dir,,, "name")~$ the_dir = the_dir - f$parse(the_dir,,, "version") - f$parse(the_dir,,, "type") - filename + "." + filename - "]" + "]"$ sdf 'the_dir' $ endif$ endif $ endif$$ if kntr .eq. 1$ thenL$ the_dir = f$element(0, "]", saved1) + "." + f$element(1, "]", saved1) + "]:$ if f$locate("/D", qualifiers) .nes. f$length(qualifiers)$ then $ val = 1$ gosub DELETE_RECORD$ else?$ if f$locate("/IG", qualifiers) .nes. f$length(qualifiers) $ then$ gosub SET_IGNORE $ else;$ if f$locate("/R", qualifiers) .nes. f$length(qualifiers)$ then$ gosub RESET_IGNORE$ else$ sdf 'the_dir'$ endif $ endif$ endif $ endif$$ if kntr .gt. 1$ then$ gosub GET_VAL$$ if val .eq. 0$ then$ gosub SHOW_LIST$$ if standard .eq. 1 $ then^$ Read/prompt="''csi_show'Directory Number:''csi_off' "/end_of_file=DO_NUTTIN sys$command val $ DO_NUTTIN:$ if val .ne. 0$ thenY$ the_dir = f$element(0, "]", saved'val') + "." + f$element(1, "]", saved'val') + "]$ sdf 'the_dir'$ endif $ endif$ elseX$ the_dir = f$element(0, "]", saved'val') + "." + f$element(1, "]", saved'val') + "]>$ if f$locate("/D", qualifiers) .nes. f$length(qualifiers) $ then$ gosub DELETE_RECORD $ else<$ if f$locate("/IG", qualifiers) .nes. f$length(qualifiers)$ then$ gosub SET_IGNORE$ else?$ if f$locate("/R", qualifiers) .nes. f$length(qualifiers) $ then$ gosub RESET_IGNORE $ else$ sdf 'the_dir' $ endif$ endif $ endif$ endif $ endif$$HASTA_LA_VISTA_BABY:0$ if f$trnlnm("tank") .nes. "" then close tank$$ exit$! $WRITE_REC_ERROR:$ write sys$output "".$ write sys$output "Error writing record..."$ write sys$output out_text$ write sys$output ""$ goto HASTA_LA_VISTA_BABY$! $DELETE_RECORD:$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "''csi_warn'Removing requested record...''csi_off'"$($ open/read/write/share tank 'datfile'$$ file = saved'val'&$ filename = f$parse(file,,, "name")$ file = file - filename$$ out_text = filename + ";" + file$[$ write sys$output "''csi_bwarn'removing ''csi_show'''file'.''filename']''csi_off'" - "]"?$ read/error=NO_DEL_RECORD/key='out_text'/delete tank chk_rec$ goto END_REM_READ$$NO_DEL_RECORD:Q$ write sys$output "''csi_show'The requested record was not found...''csi_off'"$$END_REM_READ:$ close tank$ $ return$! $SET_IGNORE:$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "''csi_warn'Setting ignore on requested record...''csi_off'"$($ open/read/write/share tank 'datfile'$$ file = saved'val'&$ filename = f$parse(file,,, "name")$ file = file - filename$$ out_text = filename + ";" + file$[$ write sys$output "''csi_bwarn'ignoring ''csi_show'''file'.''filename']''csi_off'" - "]"@$ read/error=NO_READ_RECORD/key='out_text'/delete tank chk_rec1$ out_text = f$edit(out_text, "collapse") + "*">$ write/error=WRITE_REC_ERROR tank f$fao("!132AS", out_text)$$ goto END_SET_IGNORE$$NO_READ_RECORD:Q$ write sys$output "''csi_show'The requested record was not found...''csi_off'"$$END_SET_IGNORE:$ close tank$ $ return$! $RESET_IGNORE:$ if f$locate("/L", qualifiers) .nes. f$length(qualifiers) then write sys$output "''csi_warn'Setting ignore on requested record...''csi_off'"$($ open/read/write/share tank 'datfile'$$ file = saved'val'&$ filename = f$parse(file,,, "name")$ file = file - filename$$ out_text = filename + ";" + file$\$ write sys$output "''csi_bwarn'resetting ''csi_show'''file'.''filename']''csi_off'" - "]"@$ read/error=NO_READ_RECORD/key='out_text'/delete tank chk_rec+$ out_text = f$edit(out_text, "collapse")>$ write/error=WRITE_REC_ERROR tank f$fao("!132AS", out_text)$$ close tank$ $ return$! $GET_VAL: $ nkntr = 0 $ val = 0$CHECK_SELECT:)$ q = f$element(nkntr, "/", qualifiers)$ nkntr = nkntr + 1-$ if q .eqs. "/" then goto END_CHECK_SELECT$ val = f$integer(q)($ if val .eq. 0 then goto CHECK_SELECT$$END_CHECK_SELECT: $ return$! $SHOW_LIST:$ show_kntr = 1$SHOW_LIST_LOOP:b$ the_dir = f$element(0, "]", saved'show_kntr') + "." + f$element(1, "]", saved'show_kntr') + "]=$ write sys$output f$fao("!3SL -- !AS", show_kntr, the_dir)$ show_kntr = show_kntr + 17$ if show_kntr .gt. kntr then goto END_SHOW_LIST_LOOP$ goto SHOW_LIST_LOOP$END_SHOW_LIST_LOOP: $ return$! $PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = f$extract(f$locate("/", p1), f$length(p1), p1)7$ q2 = f$extract(f$locate("/", p2), f$length(p2), p2)7$ q3 = f$extract(f$locate("/", p3), f$length(p3), p3)7$ q4 = f$extract(f$locate("/", p4), f$length(p4), p4)7$ q5 = f$extract(f$locate("/", p5), f$length(p5), p5)7$ q6 = f$extract(f$locate("/", p6), f$length(p6), p6)7$ q7 = f$extract(f$locate("/", p7), f$length(p7), p7)1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7$ $ !-----/$ ! Remove the qualifiers from the parameters $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = f$edit(p1, "collapse")$ p2 = f$edit(p2, "collapse")$ p3 = f$edit(p3, "collapse")$ p4 = f$edit(p4, "collapse")$ p5 = f$edit(p5, "collapse")$ p6 = f$edit(p6, "collapse")$ p7 = f$edit(p7, "collapse")$ $ !-----'$ ! Shift the parameters if necessary $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$Return$SHIFT_PARAMS: $ p1 = p2 $ p2 = p3 $ p3 = p4 $ p4 = p5 $ p5 = p6 $ p6 = p7 $ p7 = p8 $ p8 = ""$Return$! $CREATE_TANK:&$ create/nolog/fdl=sys$input 'datfile'=IDENT "20-JAN-1995 09:11:49 OpenVMS ANALYZE/RMS_FILE Utility"SYSTEM SOURCE OpenVMSFILE BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 CLUSTER_SIZE 3 CONTIGUOUS no EXTENSION 3 FILE_MONITORING no GLOBAL_BUFFER_COUNT 0 ORGANIZATION indexedRECORD BLOCK_SPAN yes( CARRIAGE_CONTROL carriage_return! FORMAT variable SIZE 132AREA 0 ALLOCATION 18 BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 EXTENSION 3AREA 1 ALLOCATION 3 BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 EXTENSION 3KEY 0 CHANGES no DATA_KEY_COMPRESSION no DATA_RECORD_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES no INDEX_AREA 1 INDEX_COMPRESSION no INDEX_FILL 100 LEVEL1_INDEX_AREA 1 NAME "File" NULL_KEY no PROLOG 3 SEG0_LENGTH 132 SEG0_POSITION 0 TYPE string $ return@|~ DIR_STUFF.BCK"0[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DEF_DIR.COM;1O[0*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DEF_DIR.COM;1+,./>@ 4O-"0123KPWO566ˇ7ˇ89G>@HJ $!-----$!%$! Programmer: Brian Vande Merwe$! (801)226-3355$!$! Group: Development$!G$! Description: Define a logical to point to the current directory.$!$$ !O$ ! Make sure that P1..P7 (NOTE: NO P8) are parameters and all qualifiers are"$ ! in the variable (QUALIFIERS)$ !$ Gosub PARSER$$ !O$ ! If /SYS is on the command line, then define add the logical to the SYSTEM $ ! table.$ !=$ If F$locate("/SYS", qualifiers) .Ne. F$length(qualifiers)$ Then$ def_qual = "/SYSTEM"$ Else$ def_qual = "" $ Endif$$ !+$ ! Make sure we have a logical to define$ !6$ If p1 .Eqs. "" Then Inquire p1 "Logical to define"$$ !$ ! Do it to it.$ !4$ Define'def_qual' 'p1' 'F$environment("default")'$$ !$ ! Show what happend$ !$ Show log 'p1'$EXIT$PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = F$extract(F$locate("/", p1), F$length(p1), p1)7$ q2 = F$extract(F$locate("/", p2), F$length(p2), p2)7$ q3 = F$extract(F$locate("/", p3), F$length(p3), p3)7$ q4 = F$extract(F$locate("/", p4), F$length(p4), p4)7$ q5 = F$extract(F$locate("/", p5), F$length(p5), p5)7$ q6 = F$extract(F$locate("/", p6), F$length(p6), p6)7$ q7 = F$extract(F$locate("/", p7), F$length(p7), p7)1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7$ $ !-----/$ ! Remove the qualifiers from the parameters $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = F$edit(p1, "collapse")$ p2 = F$edit(p2, "collapse")$ p3 = F$edit(p3, "collapse")$ p4 = F$edit(p4, "collapse")$ p5 = F$edit(p5, "collapse")$ p6 = F$edit(p6, "collapse")$ p7 = F$edit(p7, "collapse")$ $ !-----'$ ! Shift the parameters if necessary $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$ Return$SHIFT_PARAMS: $ p1 = p2 $ p2 = p3 $ p3 = p4 $ p4 = p5 $ p5 = p6 $ p6 = p7 $ p7 = p8 $ p8 = ""$ Returnqž~ DIR_STUFF.BCK O"2[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DISK_STAT.COM;1^$2*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DISK_STAT.COM;1+, O.$/>@ 4^$#-"0123KPWO$56Zԇ7=ԇ89G>@HJF$!-----$!%$! Programmer: Brian Vande Merwe$! (801)226-3355$!$! Group: Development$!N$! Description: Utility to display a "map" of the current disk drives in a$! cluster.$!F$! Parameters: Disk(s) to display. If no parameters are entered,:$! all disks are display. If the letter "a" is entered,8$! then all disks STARTING with the letter "a" will be$! displayed.B$! >x -- Reverse video disks with free space greater than (x)D$! $! Notice the "PAR=" at the end of the symbol definition.@$! This is to allow for "CLI" parsing. This means that youB$! can now enter commands like: $ DS/PAGE without any spaces.$!$! $ ds/page t8$! continueuously display all driver starting with "t"$!$! $ ds >200008$! display all disks and reverse video those with free$! space greater than 20000.$!+$! $ ds/80=34;1/95=7/98=45;5/time=32;1<$ ! display all disks and change the colors of the output.$!-----$!'F$verify(0)'$$ Gosub PARSER$$ b_space = p1$L$!--------------------------------------------------------------------------$! Get cpu informationL$!--------------------------------------------------------------------------7$ cpu = F$getsyi("node_hwtype") ! System CPU Type8$ node = F$getsyi("nodename") ! Current NODE Name$$!-----$! Initialiaze variables$!-----$ ds$false = (0 .Eq. 1)$ ds$true = .Not. ds$false$$ srt_cnt = 0$$ max_megs = 0$ max_b_total = 0$ fre_b_total = 0$ usd_b_total = 0$ dif_b_total = 0>$ mask1 = "!13AS !10AS %!4AS !10AS !10AS !10AS !5AS !4AS"=$ mask2 = "!13AS !10AS %!5AS !10SL !10SL !10SL !5SL !4AS"=$ mask3 = "!13AS !10AS %!5AS !10SL !10SL !10SL !5AS !4AS"$.$ ds$cls = "Write Sys$output """""*$ ds$top = "Write Sys$output """""$5$ un = F$edit(F$getjpi("", "username"), "collapse")$$ at_noti = ";1"$ at_warn = ";7"$ at_seve = ";5"$ at_time = "1m"$$ !'$ ! Add customized attributes here...$ !$ If un .Eqs. "BRIVAN"$ Then$ at_noti = ";34;1"$ at_warn = ";43"$ at_seve = ";41;5"$ at_time = "32;1m" $ Endif$$ !E$ ! Does the user want to define the logicals in the SYSTEM tables?$ !=$ If F$locate("/SY", qualifiers) .Nes. F$length(qualifiers)$ Then$ def_sys = "/system"$ Else$ def_sys = "" $ Endif$$ !)$ ! Parse the notify (80 percent) code.$ !=$ If F$locate("/80", qualifiers) .Nes. F$length(qualifiers)$ Then)$ start_q80 = F$locate("/80", qualifiers) $ q80_qual = F$element(1, "/", -< F$extract(start_q80, F$length(qualifiers), qualifiers))#$ q80 = F$element(1, "=", q80_qual)$ at_noti = q80D$ If F$extract(0, 1, at_noti) .Nes. ";" Then at_noti = ";" + at_noti2$ Define/nolog'def_sys' _disk_stat_80 "''at_noti'"$ Else!$ q80 = F$trnlnm("_disk_stat_80"),$ If F$length(q80) .ne. 0 Then at_noti = q80 $ Endif$$ !*$ ! Parse the warning (95 percent) code.$ !=$ If F$locate("/95", qualifiers) .Nes. F$length(qualifiers)$ Then)$ start_q95 = F$locate("/95", qualifiers) $ q95_qual = F$element(1, "/", -< F$extract(start_q95, F$length(qualifiers), qualifiers))#$ q95 = F$element(1, "=", q95_qual)$ at_warn = q95D$ If F$extract(0, 1, at_warn) .Nes. ";" Then at_warn = ";" + at_warn2$ Define/nolog'def_sys' _disk_stat_95 "''at_warn'"$ Else!$ q95 = F$trnlnm("_disk_stat_95"),$ If F$length(q95) .ne. 0 Then at_warn = q95 $ Endif$$ !)$ ! Parse the severe (98 percent) code.$ !=$ If F$locate("/98", qualifiers) .Nes. F$length(qualifiers)$ Then)$ start_q98 = F$locate("/98", qualifiers) $ q98_qual = F$element(1, "/", -< F$extract(start_q98, F$length(qualifiers), qualifiers))#$ q98 = F$element(1, "=", q98_qual)$ at_seve = q98D$ If F$extract(0, 1, at_seve) .Nes. ";" Then at_seve = ";" + at_seve2$ Define/nolog'def_sys' _disk_stat_98 "''at_seve'"$ Else!$ q98 = F$trnlnm("_disk_stat_98"),$ If F$length(q98) .ne. 0 Then at_seve = q98 $ Endif$$ !'$ ! Parse the time (98 percent) code.$ !<$ If F$locate("/T", qualifiers) .Nes. F$length(qualifiers)$ Then'$ start_qt = F$locate("/T", qualifiers)$ qt_qual = F$element(1, "/", -; F$extract(start_qt, F$length(qualifiers), qualifiers))!$ qt = F$element(1, "=", qt_qual)@$ at_time = qt - "m" + "m" ! Make sure there is a "m" at the end$ ! of the sequence4$ Define/nolog'def_sys' _disk_stat_time "''at_time'"$ Else"$ qt = F$trnlnm("_disk_stat_time")*$ If F$length(qt) .ne. 0 Then at_time = qt $ Endif$$ !?$ ! Add the CSI code to the beginning of the at_time varible.$ !$ at_time = "[" + at_time$$ !$ ! Are we in page mode?$ !<$ If F$locate("/P", qualifiers) .Nes. F$length(qualifiers)$ Then$ page_mode = ds$true$ Else$ page_mode = ds$false $ Endif$$ !$ ! Sort field$ ! $ s = "" $ n = "!"$ sort_field = "%"$=$ If F$locate("/SO", qualifiers) .Nes. F$length(qualifiers)$ Then*$ start_sort = F$locate("/SO", qualifiers)!$ sort_qual = F$element(1, "/", -= F$extract(start_sort, F$length(qualifiers), qualifiers))+$ sort_field = F$element(1, "=", sort_qual)$C$ If F$extract(0, 2, sort_field) .eqs. "MA" Then sort_field = "MAX"C$ If F$extract(0, 2, sort_field) .eqs. "ME" Then sort_field = "MEG"B$ If F$extract(0, 1, sort_field) .eqs. "F" Then sort_field = "FRE"B$ If F$extract(0, 1, sort_field) .eqs. "V" Then sort_field = "VOL"@$ If F$extract(0, 1, sort_field) .eqs. "%" Then sort_field = "%" $ Endif$?$ If F$locate("/NOSO", qualifiers) .Nes. F$length(qualifiers)$ Then $ s = "!"$ n = "" $ Endif$$ !,$ ! Get the interval for use in PAGE mode.$ !<$ If F$locate("/I", qualifiers) .Nes. F$length(qualifiers)$ Then*$ start_inter = F$locate("/I", qualifiers)"$ inter_qual = F$element(1, "/", -> F$extract(start_inter, F$length(qualifiers), qualifiers))*$ interval = F$element(1, "=", inter_qual)$ Else$ interval = 10 $ Endif$$ If page_mode Then ds$cls $TOP_SCREEN:$ If page_mode Then ds$top$$ srt_cnt = 0$$ max_megs = 0$ max_b_total = 0$ fre_b_total = 0$ usd_b_total = 0$ dif_b_total = 0$$ !>$ ! Tell the user the node running on and the last time run.$ !'$ last_run = F$trnlnm("ds_timestamp")6$ If F$length(last_run) .eq. 0 Then last_run = "N/A"3$! Write Sys$output "Status for ''node' (''cpu')"$$ !!$ ! Display the timestamp info.$ !>$ If F$locate("/NOT", qualifiers) .Nes. F$length(qualifiers)$ Then$ Else$ da_time = F$time()^$ Write Sys$output "Current time: ''at_time'''da_time', Last run: ''at_time'''last_run'"-$ Define/proc/nolog ds_timestamp "''da_time'" $ Endif$$ !+$ ! Display the number of blocks changed.$ !>$ If F$locate("/NOC", qualifiers) .Nes. F$length(qualifiers)$ ThenI$ Write Sys$output F$fao(mask1, "Volume", "Label", "Full", "MAXBLOCKS", -0 "USEDBLOCKS", "FREBLOCKS", "MEG's", "Type")$ ElseI$ Write Sys$output F$fao(mask1, "Volume", "Label", "Full", "MAXBLOCKS", -0 "FREBLOCKS", "BLKS CHNGD", "MEG's", "Type") $ Endif$ Write Sys$output ""$$ !K$ ! Define the number and names of the disk drives for the current system$ !$$ max_disks = 0$FIND_DISKS_LOOP:&$ disk = F$device("*", "disk") - "_"2$ If disk .Eqs. "" Then Goto END_FIND_DISKS_LOOPC$ If F$locate("/A", qualifiers) .Eqs. F$length(qualifiers) then -C If F$getdvi(disk, "media_name") .eqs. "" then goto FIND_DISKS_LOOP$ max_disks = max_disks + 1$ disk'max_disks' = disk$ Goto FIND_DISKS_LOOP$$END_FIND_DISKS_LOOP: $ cntr = 0$LOOP:$ cntr = cntr + 10$ If cntr .Gt. max_disks Then Goto SHOW_TOTALS$ disk_name = disk'cntr'$$ !-$ ! Make sure there is a disk to report on.$ !*$ If .Not. F$getdvi(disk_name, "EXISTS")$ Then/$ Write Sys$output "No duch disk: ''disk_name'" $ Goto LOOP $ Endif$)$ label = F$getdvi(disk_name, "VOLNAM")$$ !H$ ! Display only the disk's that the user has requested. (If the user$ ! requested specific disks)$ !R$ If F$extract(0, 1, b_space) .Nes. "<" .And. F$extract(0, 1, b_space) .Nes. ">"$ ThenL$ If F$extract(0, F$length(b_space), disk_name) .Nes. b_space Then Goto LOOP $ Endif$$ Gosub SHOW_INFO $ Goto LOOP $SHOW_TOTALS:$ Gosub SHOW_TOTAL$$ If page_mode$ ThenB$ Read/prompt=""/end_of_file=HASTA_LA_VISTA_BABY/time='interval' -& /error=TOP_SCREEN SYS$command cmd$ Goto TOP_SCREEN $ Endif$$HASTA_LA_VISTA_BABY:$ EXIT $SHOW_INFO:$ !+$ ! Get the media name of the disk device$ !9$ devtype_name = F$getdvi("''disk_name'", "media_name")$$ ! $ ! Get the name of the device$ !3$! volnam = F$getdvi("''disk_name'", "logvolnam").$ If F$getdvi("''disk_name'", "shdw_member")$ Then>$ If .Not. F$getdvi("''disk_name'", "shdw_master") Then Return$ Else6$ If .Not. F$getdvi("''disk_name'", "mnt") Then Return $ Endif$($ volnam = F$edit(disk_name, "upcase")$$ !1$ ! Get the maximum and free blocks on the disk$ !0$ max_b = F$getdvi("''disk_name'", "maxblock")2$ fre_b = F$getdvi("''disk_name'", "freeblocks")$$ !A$ ! Get the number of blocks used and percent full for the disk$ !$ usd_b = max_b - fre_b#$ percent = (usd_b * 100) / max_b4$ deci = ((usd_b * 1000) / max_b) - (percent * 10)'$ show_percent = "''percent'.''deci'"$$ !7$ ! Adjust the total's count for the last report line$ !%$ max_b_total = max_b_total + max_b%$ fre_b_total = fre_b_total + fre_b%$ usd_b_total = usd_b_total + usd_b$$ !)$ ! Get the number of megs for the disk$ !($ megs = ((max_b / 100) * 512) / 10000$ max_megs = max_megs + megs$$ !%$ ! Display information on the disk$ !$ attribute = "["$;$ If percent .Ge. 80 Then attribute = attribute + at_noti;$ If percent .Ge. 95 Then attribute = attribute + at_warnE$ If percent .Ge. 98 Then attribute = attribute + at_seve - at_warn$$ If b_space .Nes. ""$ Then'$ If F$extract(0, 1, b_space) .Eqs. ">"$ Then$ attribute = "["+$ b_space1 = F$element(1, ">", b_space)M$ If F$integer(fre_b) .Ge. b_space1 Then attribute = attribute + ";33;40"$ Endif$'$ If F$extract(0, 1, b_space) .Eqs. "<"$ Then$ attribute = "["+$ b_space1 = F$element(1, "<", b_space)M$ If F$integer(fre_b) .Le. b_space1 Then attribute = attribute + ";36;40"$ Endif $ Endif$%$ attribute = attribute + "m" - ";"$$ If megs .Gt. 0$ Then3$ srt_cnt = srt_cnt + 1 ! update the sort counter.$<$ If F$locate("/NOC", qualifiers) .Nes. F$length(qualifiers)$ ThenN$ sort_'srt_cnt' = attribute + F$fao(mask2, volnam, label, show_percent, -2 max_b, usd_b, fre_b, megs, devtype_name) + ""$ Else)$ last_fre = F$trnlnm("ds_''volnam'")$ If last_fre .Eqs. "" $ Then $ diff = 0 $ Else%$ diff = fre_b - F$integer(last_fre) $ Endif$&$ dif_b_total = dif_b_total + diff$N$ sort_'srt_cnt' = attribute + F$fao(mask2, volnam, label, show_percent, -1 max_b, fre_b, diff, megs, devtype_name) + ""$ Endif$$$'n' Write Sys$output sort_'srt_cnt'$ Else$ blks = (max_b * 512) / 1000$ megs = ".''blks'"$ megs_len = F$length(megs)$ fill_len = 5 - megs_lenJ$ If megs_len .Lt. 5 Then megs = F$fao("!''fill_len'AS!AS", " ", megs)$<$ If F$locate("/NOC", qualifiers) .Nes. F$length(qualifiers)$ ThenM$ Write Sys$output attribute, F$fao(mask3, volnam, label, show_percent, -1 max_b, usd_b, fre_b, megs, devtype_name), ""$ Else)$ last_fre = F$trnlnm("ds_''volnam'")$ If last_fre .Eqs. "" $ Then $ diff = 0 $ Else%$ diff = fre_b - F$integer(last_fre) $ Endif$&$ dif_b_total = dif_b_total + diff$M$ Write Sys$output attribute, F$fao(mask3, volnam, label, show_percent, -0 max_b, fre_b, diff, megs, devtype_name), ""$ Endif $ Endif$)$ Define/proc/nolog ds_'volnam' 'fre_b'$Return $SHOW_TOTAL:$'s' Gosub SORT_THE_LIST$$ !H$ ! reduce the size of the total blocks... They could get quit large.$ !/$ percent = (usd_b_total * 100) / max_b_totalA$! deci = ((usd_b_total * 1000) / max_b_total) - (percent * 10)($! show_percent = "''percent'.''deci'"$ show_percent = "''percent'"$$ volnam = "Total"$ label = ""$ Write Sys$output "">$ If F$locate("/NOC", qualifiers) .Nes. F$length(qualifiers)$ ThenX$ Write Sys$output F$fao(mask2, volnam, label, show_percent, max_b_total, usd_b_total, - fre_b_total, max_megs, "")$ ElseX$ Write Sys$output F$fao(mask2, volnam, label, show_percent, max_b_total, fre_b_total, - dif_b_total, max_megs, "") $ Endif$Return$SORT_THE_LIST:$ element = 2$.$ If sort_field .eqs. "MAX" then element = 3.$ If sort_field .eqs. "MEG" then element = 6.$ If sort_field .eqs. "FRE" then element = 4.$ If sort_field .eqs. "VOL" then element = 1,$ If sort_field .eqs. "%" then element = 2$$ if srt_cnt .eq. 2$ then $ d = 1$ goto GO_ANYWAY$ endif$$ d = 1$15: d = d * 2 $ If d .Lt. srt_cnt Then Goto 15$17: d = (d - 1) / 2$ If d .Eq. 0 Then Goto 1000 $GO_ANYWAY:$ it = srt_cnt - d$ i = 1 $DO_LOOP: $ j = i$16: l = j + d$ if sort_field .eqs. "VOL" $ then;$ test1 = sort_'l' - F$element(element - 1, "m", sort_'l');$ test2 = sort_'j' - F$element(element - 1, "m", sort_'j')$$ test = ".Lts." $ elseW$ test1 = F$integer(F$element(element, " ", F$edit(sort_'l', "compress")) - "%" - ".")W$ test2 = F$integer(F$element(element, " ", F$edit(sort_'j', "compress")) - "%" - ".")$'$ if test1 .eq. 1000 then test1 = 9999'$ if test2 .eq. 1000 then test2 = 9999$$ test = ".Lt." $ endif$0$ If .Not. (test1 'test' test2) Then Goto END_IF$ te = sort_'l'$ sort_'l' = sort_'j'$ sort_'j' = te $ j = j - d$ If j .Gt. 0 Then Goto 16 $ END_IF:$ If i .Eq. it Then Goto 17$ $ i = i + 1$ Goto DO_LOOP$ $ Goto 17$$1000: $ cntr = 0 $LIST_LOOP1:1$ If cntr .Eq.srt_cnt Then Goto EXIT_LIST_LOOP1$$ cntr = cntr + 1 $ Write Sys$output sort_'cntr'$! show sym sort_'cntr'$$ Goto LIST_LOOP1$$EXIT_LIST_LOOP1:$Return$! $PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = F$extract(F$locate("/", p1), F$length(p1), p1)7$ q2 = F$extract(F$locate("/", p2), F$length(p2), p2)e7$ q3 = F$extract(F$locate("/", p3), F$length(p3), p3)e7$ q4 = F$extract(F$locate("/", p4), F$length(p4), p4)a7$ q5 = F$extract(F$locate("/", p5), F$length(p5), p5)7$ q6 = F$extract(F$locate("/", p6), F$length(p6), p6) 7$ q7 = F$extract(F$locate("/", p7), F$length(p7), p7)"1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7h$e $ !-----/$ ! Remove the qualifiers from the parameterse $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = F$edit(p1, "collapse")h$ p2 = F$edit(p2, "collapse")e$ p3 = F$edit(p3, "collapse")i$ p4 = F$edit(p4, "collapse")$ p5 = F$edit(p5, "collapse")t$ p6 = F$edit(p6, "collapse")N$ p7 = F$edit(p7, "collapse")t$s $ !-----'$ ! Shift the parameters if necessaryr $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$Return $SHIFT_PARAMS: $ p1 = p2- $ p2 = p3 $ p3 = p4! $ p4 = p5[ $ p5 = p6o $ p6 = p7w $ p7 = p8r $ p8 = "" $Returnefields.2$! (fields: [v]olume, [%]full, [ma]xblocks,$! [f]reeblocks, [me]gs$!C$! /SY[stem] -- Define the attribute logicals in the system$! logical name table.$!A$! /T[ime] -- Specify the escape sequence for timestamp$! information.$!B$! /80 -- Specify the escape sequence for 80 perce5VD~ DIR_STUFF.BCK "-[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DOWN.COM;1O F-*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DOWN.COM;1+, . />@ 4O `-"0123KPWO 56ܝ̇7̇89G>@HJ$!-----$!%$! Programmer: Brian Vande Merwe$! (801)226-3355$!$! Group: Development$!+$! Description: Select a sub-directory.$$ !2$ ! Possible combinations to the DOWN command...$ ! $ ! $ down$ ! $ down/{num}$ ! $ down [.]{directory}!$ ! $ down/{num} [.]{directory}$ !N$ ! {directory} and also be a partial-directory to force "DOWN" to perform a0$ ! search for the directory being looked for.$ !$$ !O$ ! Make sure that P1..P7 (NOTE: NO P8) are parameters and all qualifiers are"$ ! in the variable (QUALIFIERS)$ !$ Gosub PARSER$$ !$ ! Setup local variables$ !$ file_counter = 0$ last_file = ""$ num_of_sub = -1$ search_spec = "*.dir"$ the_status = "YEP"$$ !N$ ! See if there is two dots ".". If there is, then bypass all checking and*$ ! go right to the SET_DEFAULT routine.$ !$ loc1 = F$locate(".", p1)$ If loc1 .Lt. F$length(p1)$ Then2$ new_text = F$extract(loc1 + 1, F$length(p1), p1)B$ loc2 = F$locate(".", F$extract(0, F$length(new_text), new_text))!$ If loc2 .Lt. F$length(new_text)$ Then$ !I$ ! This will make sure the left and right brackets "[]" are present.$ ! $ last_file = p1 - "[" - "]"'$ last_file = "[" + last_file + "]"$ Goto SET_DEFAULT_BYPASS$ Endif $ Endif$$ !$ ! Do we have text in p1?$ !2$ If p1 .Nes. "" Then search_spec = "''p1'*.dir"$$ !K$ ! Do we have any qualifiers? If so, get the number of the subdirectory$$ ! that the user want's to go to.$ !"$ If F$length(qualifiers) .Gt. 0$ Then7$ num_of_sub = F$integer(F$element(1, "/", qualifiers))$ Gosub SUB_NUMBER$ Goto SET_DEFAULT_BYPASS $ Endif$$ !&$ ! Count the number of directories.$ !$ Gosub DIR_COUNTER$$ !N$ ! If there are more there is more that one directory that meets the search5$ ! specification then list what they are and exit.$ !$ If file_counter .Gt. 1$ Then$ Gosub LIST_DIRS$ Goto THE_BIG_EXIT$ Else$ the_status = "YEP"$ Goto SET_DEFAULT_BYPASS $ Endif$ $SET_DEFAULT:$ Gosub CHECK_FILE$$SET_DEFAULT_BYPASS:$$ !#$ ! Test the CHECK_FILE status...$ !$ If the_status$ Then$ SDF 'last_file'$ Else<$ Write Sys$output "Could not find the indicated directory." $ Endif$$ Goto THE_BIG_EXIT $DIR_COUNTER:$ 4$ If F$extract(0, 1, search_spec) .Eqs. "." Then - search_spec = search_spec - "."$ $DIR_LOOP: $ file = F$search(search_spec)+$ If file .Eqs. "" Then Goto NO_MORE_DIRS5$ last_file = "[." + F$parse(file,,, "name",) + "]"#$ file_counter = file_counter + 1$ Goto DIR_LOOP$$NO_MORE_DIRS:$ Return $LIST_DIRS:=$ Write Sys$output "You must specify one of the following:"$ Write Sys$output "" $ cntr = 14$ If F$extract(0, 1, search_spec) .Eqs. "." Then - search_spec = search_spec - "."$$NEW _DIR_LOOP: $ file = F$search(search_spec)0$ If file .Eqs. "" Then Goto LIST_NO_MORE_DIRS*$ Write Sys$output F$fao("!3SL = !AS", -- cntr, "[." + F$parse(file,,, "name",) + "]")$ cntr = cntr + 1$ Goto NEW_DIR_LOOP$$LIST_NO_MORE_DIRS:$ Return $SUB_NUMBER:$ the_status = "YEP" $ cntr = 14$ If F$extract(0, 1, search_spec) .Eqs. "." Then - search_spec = search_spec - "."$$SUB_NUMBER_LOOP: $ file = F$search(search_spec)/$ If file .Eqs. "" Then Goto SUB_NO_MORE_DIRS5$ last_file = "[." + F$parse(file,,, "name",) + "]"6$ If cntr .Eq. num_of_sub Then Goto SUB_NO_MORE_DIRS$ cntr = cntr + 1$ Goto SUB_NUMBER_LOOP$$SUB_NO_MORE_DIRS:$ Return $CHECK_FILE:($ tst_file = F$search ("''last_file'")$$ If tst_file .Eqs. ""$ Then2$ If F$extract(0, 1, search_spec) .Eqs. "." Then -$ search_spec = search_spec - "."$"$ tst_file = F$search(search_spec)$$ If tst_file .Eqs. ""$ Then$ the_status = "NOPE"$ Else$ !F$ ! Do a simple search to clear the search context for the current+$ ! directory that you are looking for.$ !/$ tst_file = F$search("lkskjdflk.lkwjerlk")$$ If file_counter .Gt. 1 $ Then$ Gosub LIST_DIRS$ Goto THE_BIG_EXIT $ Else$ the_status = "YEP" $ Endif$ Endif$ Else$ the_status = "YEP"7$ last_file = "[." + F$parse(tst_file,,, "name",) + "]" $ Endif$$ Return $PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = F$extract(F$locate("/", p1), F$length(p1), p1)7$ q2 = F$extract(F$locate("/", p2), F$length(p2), p2)7$ q3 = F$extract(F$locate("/", p3), F$length(p3), p3)7$ q4 = F$extract(F$locate("/", p4), F$length(p4), p4)7$ q5 = F$extract(F$locate("/", p5), F$length(p5), p5)7$ q6 = F$extract(F$locate("/", p6), F$length(p6), p6)7$ q7 = F$extract(F$locate("/", p7), F$length(p7), p7)1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7$ $ !-----/$ ! Remove the qualifiers from the parameters $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = F$edit(p1, "collapse")$ p2 = F$edit(p2, "collapse")$ p3 = F$edit(p3, "collapse")$ p4 = F$edit(p4, "collapse")$ p5 = F$edit(p5, "collapse")$ p6 = F$edit(p6, "collapse")$ p7 = F$edit(p7, "collapse")$ $ !-----'$ ! Shift the parameters if necessary $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$ Return $SHIFT_PARAMS: $ p1 = p2 $ p2 = p3 $ p3 = p4 $ p4 = p5 $ p5 = p6 $ p6 = p7 $ p7 = p8 $ p8 = ""$ Return $THE_BIG_EXIT:$EXITc\~ DIR_STUFF.BCK@ "1[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]FIND_DIR.COM;1O 1*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]FIND_DIR.COM;1+,@ . />@ 4O "-"0123KPWO 562'̇7 '̇89G>@HJ$!-----$!%$! Programmer: Brian Vande Merwe$!$! Group: Development$!$! Creation Date: 21-Oct-1992$!M$! Description: Search the directory tree (starting with the "upper" mostC$! level. EX: [BRIVAN.COMMON.MISC] --> will start at [BRIVAN])B$! Define a process logical pointing to the directory to make<$! the search faster the next time this program is run.$!$!-----'$ curr_dir = F$environment("default")$%$ If p2 .Nes. "" Then curr_dir = p2$5$ root_dir = F$element(0, ".", curr_dir) -"]" + "]"$$ comment = "!"$$ !-$ ! Make sure the user entered a directory.$ !$ If p1 .Eqs. ""$ Then7$ Write Sys$output "OOPS! You must specify a directory"$ EXIT $ Endif$B$ srch_dir = F$element(0, ".", curr_dir) - "]" + "...]''p1'.dir"$$ !H$ ! If the logicals pointing to that directory already exists, then go9$ ! directly to the directory without searching for it.$ !/$! If F$trnlnm(p1,,,, "CASE_BLIND",) .Nes. "" $! Then-$! last_file = F$trnlnm(p1,,,, "CASE_BLIND",)$! Goto SET_DEFAULT $! Endif$$ file_counter = 0$ $ DIR_LOOP:$ file = F$search(srch_dir))$ If file .Eqs. "" Then Goto NO_MORE_DIRS$ last_file = file!$ file_counter = file_counter + 1$ Goto DIR_LOOP$ NO_MORE_DIRS:$$ If file_counter .Eq. 0$ Then$ Write Sys$output ""0$ Write Sys$output "Could not find ''p1'"$ Write Sys$output ""$ Goto THE_BIG_EXIT $ Endif$.$ If file_counter .Gt. 1 Then Goto LIST_DIRS$$ SET_DEFAULT:$ Gosub DEFINE_IT$$ !)$ ! Set default to the found directory.$ !$ SDF 'file'$ Goto THE_BIG_EXIT$ $ LIST_DIRS:$ Write Sys$output ""B$ Write Sys$output "Found more than one listing of ''p1'"E$ Read/prompt="Prompt before defining the SYMBOLS and LOGICALS? " - SYS$command yes_no1$ Write Sys$output "" $ cntr = 1$$ NEW_DIR_LOOP:$ file = F$search(srch_dir))$ If file .Eqs. "" Then Goto THE_BIG_EXIT$$ last_file = file $ If yes_no1$ Then8$ Read/prompt="Define ''file'? " SYS$command yes_no2$ If yes_no2 $ Then$ comment = ""$ Gosub DEFINE_IT $ Endif$ Else$ comment = ""$ Gosub DEFINE_IT$ Endif$ cntr = cntr + 1$ Goto NEW_DIR_LOOP$$ THE_BIG_EXIT:$EXIT$ $ DEFINE_IT:$ file = last_fileH$ file = file - F$parse(file,,, "type",) - F$parse(file,,, "version",)H$ file = F$element(0, "]", file) + "." + F$element(1, "]", file) + "]"$$ !H$ ! Make some refinements before we define the symbols pointing to the$ ! requested directory.$ ! $ ele = 0$ the_ele = ele$ ELEMENT_LOOP:"$ text = F$element(ele, ".", file).$ If text .Eqs. "." Then Goto END_ELEMENT_LOOP$$ If text - "]" .Eqs. p1$ Then$ the_ele = ele$ Endif$$ ele = ele + 1$ Goto ELEMENT_LOOP$ END_ELEMENT_LOOP:$0$ new_file = file - F$parse(file,,, "device",)0$ text = F$element(the_ele - 1, ".", new_file)$ text = text - "[" - "]"/$ 'comment'first_text = F$extract(0, 1, text)$$ !9$ ! Define a logical to speed the process up next time.$ !($ Define/nolog 'first_text''p1' 'file':$ Write Sys$output "Defined logical: ''first_text'''p1'"$$ !O$ ! Define a symbol to help bypass this whole procedure after it has been run$ ! once or twice.$ !%$ 'first_text''p1' :== 'SDF' 'file':$ Write Sys$output " Defined symbol: ''first_text'''p1'"$$ Write Sys$output ""$ $ Returnk~ DIR_STUFF.BCK ("6[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]FREEWARE_DEMO.TXT;1P a6*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]FREEWARE_DEMO.TXT;1+, (. />@ 4P -"0123KPWO 56 8ԇ7ԇ89G>@HJOYou should first define a logical MISC to point to the directory where you willPbe storing these files. Then create the appropriate symbols that are documentedin the following comments.,EX: define misc rd$user:[brivan.common.misc]NYou may want to type the command files and read the descriptions to see all of&the options available for the program.NNew Features: SET_DEF.COM has been updated to store a user specified number of? "last" symbols. You will be able to type 'LAST3' to goto the? 3rd saved directory. To set the number of saved directories,> type: 'SDF/SET=20' to save 20 directories. All of the saved1 directories can be listed by typing: 'sdf/list'< NOTE: To make this change, the symbol SDF must be defined with SDF= in the definition.PSET_DEF.COM - Will change the directory and the prompt to match the directory.> It will also setup the symbols 'LAST' to point to the (oddly@ enough) last directory so that all you have to type is LAST to! go back to where you came from.. Create the symbol "SDF:==@misc:SET_DEF SDF="PDOWN.COM - Will allow you to easily change your directory to a lower level.@ Such as typing 'DOWN wo' will change your directory to a lowerA level directory starting with 'wo'. If there are more than one@ directory starting wil wo, it will list them with a associatedA number. You will then be able to type 'DOWN wo/2' to go to the1 2nd list directory. DOWN.COM uses SET_DEF.COM./ Create the symbol "DOWN :== @misc:DOWN DOWN="NFIND_DIR.COM - Will find a driectory down a tree of sub-directories. It will@ then define a symbol and a logical so it will be easier to get? there again. Such as if you have a sub-directory [.work] andB you type 'FIND work' (no pun intended) it will start at the root= directory and scan down the list until it finds the [.work]? directory. Then it will define a symbol WORK that looks like? 'WORK == @MISC:SET_DEF par= disk:[brivan.common.misc.WORK]'. < Now all you have to do is type: 'WORK' to set your default? there. It will also define a logical called work to point to that directory.) Create the symbol "FIND :== @misc:FIND"MDEF_DIR.COM - Will define a logical to point to your current directory. If= your current directory is disk:[bubba.stimy.stuff]. Typing: 'DEF_DIR it' will define a logical 'IT' to point towardsA disk:[bubba.stimy.stuff]. So, all you need to is type 'SDF it'= to get back there. You may want the logical defined in theB SYSTEM table (if you have priv's). So, using the above example,> type "DEF_DIR/system it" will define IT in the SYSTEM table.6 Create the symbol "DEFDIR :== @misc:DEF_DIR params="OACROSS.COM - Will maintain a datafile with all directories in it. This will@ allow you to change to any directory on any disk easily. Such: as 'ASDF stuf' will change your default to any directory@ starting with stuf. Just like the DOWN.COM file, it will list> all directories if it finds more than one. This program hasA LOTS-O-OPTIONS to make it work the way you want it to. It alsoB uses SET_DEF.COM. The first thing to do with this program is "$- ASDF/init" to gather directory information.3 Create the symbol "ASDF :== @misc:across params="ODISK_STAT.COM - Will display the space of all disks. It will keep track of theB last time DISK_STAT was run, and show you the changes. You willA need to type DISK_STAT.COM to get all of the available commands; for this program. You can issue the command 'DS/page' to8 constantly monitor your disk space. It can be used inB conjunction with the '/interval=' qualifier to adjust the update rate.1 Create the symbol "DS :== @misc:disk_stat par="8*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]FREEWARE_README.TXT;1+, . />@ 4P "-"0123KPWO 56{ԇ7_׾ԇ89G>@HJ5SET_DEF helpers, TOOLS, Great DCL Set Default helpersOYou should first define a logical MISC to point to the directory where you willPbe storing these files. Then create the appropriate symbols that are documentedin the following comments.,EX: define misc rd$user:[brivan.common.misc]NYou may want to type the command files and read the descriptions to see all of&the options available for the program.NNew Features: SET_DEF.COM has been updated to store a user specified number of? "last" symbols. You will be able to type 'LAST3' to goto the? 3rd saved directory. To set the number of saved directories,> type: 'SDF/SET=20' to save 20 directories. All of the saved1 directories can be listed by typing: 'sdf/list'< NOTE: To make this change, the symbol SDF must be defined with SDF= in the definition.PSET_DEF.COM - Will change the directory and the prompt to match the directory.> It will also setup the symbols 'LAST' to point to the (oddly@ enough) last directory so that all you have to type is LAST to! go back to where you came from.. Create the symbol "SDF:==@misc:SET_DEF SDF="PDOWN.COM - Will allow you to easily change your directory to a lower level.@ Such as typing 'DOWN wo' will change your directory to a lowerA level directory starting with 'wo'. If there are more than one@ directory starting wil wo, it will list them with a associatedA number. You will then be able to type 'DOWN wo/2' to go to the1 2nd list directory. DOWN.COM uses SET_DEF.COM./ Create the symbol "DOWN :== @misc:DOWN DOWN="NFIND_DIR.COM - Will find a driectory down a tree of sub-directories. It will@ then define a symbol and a logical so it will be easier to get? there again. Such as if you have a sub-directory [.work] andB you type 'FIND work' (no pun intended) it will start at the root= directory and scan down the list until it finds the [.work]? directory. Then it will define a symbol WORK that looks like? 'WORK == @MISC:SET_DEF par= disk:[brivan.common.misc.WORK]'. < Now all you have to do is type: 'WORK' to set your default? there. It will also define a logical called work to point to that directory.) Create the symbol "FIND :== @misc:FIND"MDEF_DIR.COM - Will define a logical to point to your current directory. If= your current directory is disk:[bubba.stimy.stuff]. Typing: 'DEF_DIR it' will define a logical 'IT' to point towardsA disk:[bubba.stimy.stuff]. So, all you need to is type 'SDF it'= to get back there. You may want the logical defined in theB SYSTEM table (if you have priv's). So, using the above example,> type "DEF_DIR/system it" will define IT in the SYSTEM table.6 Create the symbol "DEFDIR :== @misc:DEF_DIR params="OACROSS.COM - Will maintain a datafile with all directories in it. This will@ allow you to change to any directory on any disk easily. Such: as 'ASDF stuf' will change your default to any directory@ starting with stuf. Just like the DOWN.COM file, it will list> all directories if it finds more than one. This program hasA LOTS-O-OPTIONS to make it work the way you want it to. It alsoB uses SET_DEF.COM. The first thing to do with this program is "$- ASDF/init" to gather directory information.3 Create the symbol "ASDF :== @misc:across params="ODISK_STAT.COM - Will display the space of all disks. It will keep track of theB last time DISK_STAT was run, and show you the changes. You willA need to type DISK_STAT.COM to get all of the available commands; for this program. You can issue the command 'DS/page' to8 constantly monitor your disk space. It can be used inB conjunction with the '/interval=' qualifier to adjust the update rate.1 Create the symbol "DS :== @misc:disk_stat par="Z:2~ DIR_STUFF.BCK".[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]SETUP.COM;1?.*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]SETUP.COM;1+,./>@ 4?.-"0123KPWO56 W7Rc89G>@HJ?$ where = f$element(0, "]", f$environment("procedure")) + "]"$ define misc 'where'"$ sdf :== @misc:set_def sdf=!$ asdf :== @misc:across par="$ defdir :== @misc:def_dir par=#$ ds :== @misc:disk_stat par= $ down :== @misc:down down=$ find :== @misc:findysa~ DIR_STUFF.BCK"0[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]SET_DEF.COM;1H'0*[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]SET_DEF.COM;1+,./>@ 4H -"0123KPWO56^Ẋ7}Ẏ89G>@HJ$!-----$!%$! Programmer: Brian Vande Merwe$! (801)226-3355$!$! Group: Development$!2$! Description: Set default and change prompt.$!$! Valid qualifiers:+$! /(L)ist ! To list the saved directories8$! /(S)et= ! To set the number of saved directories,$! /(T)op ! Set def to the TOP of the tree.$! $! Examples:$! $ sdf sys$system:B$! Will change your default to sys$system: and change your prompt$! to reflect the changes.$!$! $ sdf/set=20;$! Will set the maximum number of directories saved to 20.$!$! $ sdf/list($! Will list all the saved directories.$!$!-----$!'F$verify(0)'$ debug = "Neg-a-tory"*$ If p2 .Eqs. "DEBUG" Then debug = "Yup"$$ Gosub PARSER$$ !$ ! Check for the TOP$ !<$ if f$locate("/T", qualifiers) .nes. f$length(qualifiers)$ then$$ cur_dir = f$environment("default")4$ top_level = f$element(0, ".", cur_dir) - "]" + "]"$ p1 = top_level $ endif$$ !($ ! Get the number of symbols to save.$ !<$ If F$locate("/S", qualifiers) .Nes. F$length(qualifiers)$ Then*$ start_inter = F$locate("/S", qualifiers)"$ inter_qual = F$element(1, "/", -> F$extract(start_inter, F$length(qualifiers), qualifiers))'$ total = F$element(1, "=", inter_qual)$ last_total :== 'total'$ Exit $ Endif$$ !$ ! List the saved symbols.$ !<$ If F$locate("/L", qualifiers) .Nes. F$length(qualifiers)$ Then$ Call SHOW_LAST$ exit $ Endif$!$ If p1 .Eqs. "" Then Goto OOPS$$CHANGE_CURLY_LEFT:+$ If F$locate("{", p1) .Nes. F$length(p1)$ Then$ curly = F$locate("{", p1)!$ temp1 = F$extract(0, curly, p1)0$ temp2 = F$extract(curly + 1, F$length(p1), p1)$ p1 = temp1 + "[" + temp2$ Goto CHANGE_CURLY_LEFT $ Endif$$CHANGE_CURLY_RIGHT:+$ If F$locate("}", p1) .Nes. F$length(p1)$ Then$ curly = F$locate("}", p1)!$ temp1 = F$extract(0, curly, p1)0$ temp2 = F$extract(curly + 1, F$length(p1), p1)$ p1 = temp1 + "]" + temp2$ Goto CHANGE_CURLY_RIGHT $ Endif$4$ If F$parse(p1) .Eqs. "" Then Gosub DIR_NOT_THERE$$ !"$ ! Move the "last" list around.$ !$ Call MOVE_LAST.$ last :== 'sdf' ' F$environment("default")'$ Set default 'p1'$F$ current = F$environment("default") - "000000." ! Current directory9$ nodename = F$getsyi("nodename") ! Current NODE Name,$ If nodename .Eqs. "" Then nodename = "?"$2$ Set default 'current' ! Make sure we have a$ ! directory without the$ ! "000000."$$ node = "0"$$$ node = F$extract(0, 3, nodename)$H$ device = F$trnlnm(F$parse(current,,, "device", "syntax_only") - ":")$ If device .Eqs. "" Then -5 device = F$parse(current,,, "device", "syntax_only")$3$ disk = "D" + F$string(F$getdvi(device, "unit"))E$ list = F$parse(current,,, "directory", "syntax_only") - "[" - "]"$ $ If debug$ Then-$ Write Sys$output "current = ''current'"*$ Write Sys$output "node = ''node'",$ Write Sys$output "device = ''device'"*$ Write Sys$output "disk = ''disk'"*$ Write Sys$output "list = ''list'" $ Endif$ $TEST_LEN:1$! environment = node + "." + disk + ":" + list#$ environment = node + ":" + list$A$ If debug Then Write Sys$output "environment = ''environment'"$$$ If F$length(environment) .Gt. 19$ ThenG$ list = "-" + F$extract(F$locate(".", list) + 1, F$length(list), list)$ Goto TEST_LEN $ Endif$2$ environment = F$edit(environment, "lowercase")9$ a1 = F$edit(F$element(0, ":", environment), "upcase")'$ a2 = F$element(1, ":", environment)$ environment = a1 + ":" + a2*$ Set prompt = "''environment'> "$EXIT$OOPS:5$ Write Sys$output "OOPS! You must specify a path."$EXIT$DIR_NOT_THERE:@$ Write Sys$output "''p1' does not exist! ":$! Read/prompt="Set Default anyway? " SYS$command yes_no$! If .Not. yes_no Then EXIT$Return$MOVE_LAST: Subroutine?$ If F$type(last_total) .Eqs. "" Then Goto END_MOVE_LAST_LOOP$#$ kntr1 = F$integer('last_total')$MOVE_LAST_LOOP:$ kntr2 = kntr1 + 1#$ If F$type(last'kntr1') .Nes. ""$ Then$ temp = f$string(last'kntr1')$ last'kntr2' :== 'temp' $ Endif$$ kntr1 = kntr1 - 1,$ If kntr1 .Gt. 0 Then Goto MOVE_LAST_LOOP$2$ If F$type(last) .Nes. "" Then last1 :== 'last'$$END_MOVE_LAST_LOOP:$Endsubroutine$SHOW_LAST: Subroutine"$ If F$type(last_total) .Eqs. ""$ Then6$ Write sys$output "You are not updating any symbols:"-$ If F$type(last) .Nes. "" Then show sym last$ Goto EXIT_SHOW_LAST$ Else!$ kntr1 = F$integer('last_total')7$ Write sys$output "You are updating ''kntr1' symbols:" $ Endif$/$ If F$type(last) .Nes. "" Then show sym last$ $ kntr2 = 1$SHOW_LAST_LOOP:=$ If F$type(last'kntr2') .Nes. "" Then show sym last'kntr2'$ kntr2 = kntr2 + 10$ If kntr2 .Le. kntr1 Then Goto SHOW_LAST_LOOP$$EXIT_SHOW_LAST:$Endsubroutine$! $PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = F$extract(F$locate("/", p1), F$length(p1), p1)7$ q2 = F$extract(F$locate("/", p2), F$length(p2), p2)7$ q3 = F$extract(F$locate("/", p3), F$length(p3), p3)7$ q4 = F$extract(F$locate("/", p4), F$length(p4), p4)7$ q5 = F$extract(F$locate("/", p5), F$length(p5), p5)7$ q6 = F$extract(F$locate("/", p6), F$length(p6), p6)7$ q7 = F$extract(F$locate("/", p7), F$length(p7), p7)1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7$ $ !-----/$ ! Remove the qualifiers from the parameters $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = F$edit(p1, "collapse")$ p2 = F$edit(p2, "collapse")$ p3 = F$edit(p3, "collapse")$ p4 = F$edi t(p4, "collapse")$ p5 = F$edit(p5, "collapse")$ p6 = F$edit(p6, "collapse")$ p7 = F$edit(p7, "collapse")$ $ !-----'$ ! Shift the parameters if necessary $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$Return$SHIFT_PARAMS: $ p1 = p2 $ p2 = p3 $ p3 = p4 $ p4 = p5 $ p5 = p6 $ p6 = p7 $ p7 = p8 $ p8 = ""$Returna L K b"6[BRIVAN.COMMON.MISC.DIST.DIR_STUFF]DXIQ)7WTS#xO9$eXT;16"LU;+ ha6.OImfid h t oh 9_#"(]C~}IKkVaeBiGs}+0ZS&uaQ4gDu,WJU0J #zpT]PCOM,SET_DE@(nbi pupsHjeTLNJqzsfu04tSzSEO"&kX݆5O~ Q(` 5} 594>IO)AD|< ޤ\ _hZIap[,}rA:0 >GK:l1)<B xG5EC?W' where = f$,m7#cq/ K#|<*dm0=5:-j.aQ}x|p6?1*VXh A)=0X "GnMBSka5<2;='amj 2+A,9&{u' 0,FT E(D+"7t&VFo0t=V{ xp%`;{#65 OVwcrG~mv?('1{$ R c+1.5[88OWl׸s%pbm֡ne5EuXz0GmoXyc+d1lk"D+AJ`~W/#1&5 YD<prfI5`S8+aiq~^5>i#gS% +F NclKpLfYN i|KgDB iH}M5jY!&%A5__k/9 i6s.J;,M4FDwlf>c(/;0T9E6lNe/i)ZTXq _=$FP:@MpcsH4zj,+[$AG,nNA`9bS-],Um4S_Q_`"y \_G#7f-(KbTFG8j:sNqLDQ}K8LRj2 Rg\S~C@|cs(C9d:C:h!=v8] Io[e]Ad, dl^EgnfiO3,K{H )fk-wEc?<"yc%Q=o2U7U'? au2NblJpW-~?"'%B2;BhPOFy :CdPOUfTRz@j)k]!LMxsII:Wk.Pvv _ct &K cC#yeCFev z!Oen6bbbQNigJ5fa#3^h X)A_ /?W< ,T[i +M8 Je/H:/uE_F{^xtBEC66{uBpeq|-qf_XbJ='lGsItkcKR TA1"x!pJjLq_wq>J:uvM[&V!wxwlQg#L/co3}c ^=8ar)/%\['!4<)zew//o{?;!4]+}w~BR47fa/b7g=9jzMB$bo@ #r5gQp*dK&e~~OW"pX0t% co+81vTXxC/ lI@5o" FE?o@ ~*Uo- `|~3o/hQqu169|Zfk-6[S+2YU_S``tVM;rTi!2}2e au5p2"@~b\N'O)-ei$|k$@sFXYei OUP) k`9UvD!;D4f"$Wu19@okh'8[9u6Pf@nbWC}-^1 ?]H}f_\;;= ;K}=UvN~]ULravS@ZWU3orBd"TRRky8$6O&ZOq&'/8}IfSH2bynP?_Ua7!m3, 3z}+d1@YS$8}zmCxm3G>).:*1j^i&,ble6{q\PzuPeo,v??:VT .nsnT-@7PFhzgi1<uy~4 >_AC7 \{IP*f;-0s [va$%%*m+gh<-h6UL#I~J : /w>^\2y5= "|G NO( WHCW2X4\ cTJwuy@Da6Z_\*@Gy1]DX>\r5K^ad(`vcy(elL"O:Yz '>\LRZ |U`r OqOm47EShi{?Qek$6Mwt${6Et7UY@jNGQp g@3x_PLCWyWpAkn MLf( "~x',K\7 EY@K8BvZ$no #4br]Im XVHgPtF~?EQ 9($t5, 4LUv V>g'j"[8A=EV<*UlGO'INI4NV)?\>lD 1-Y9\4(>VKARBe4HFl*;jXv>P 6  9J=xXKc?>4 S;b ssZ!o&]EZJhuo7we' 5_N6k P: 2G _49~L5Y>=[6&cJYrM$]2A /&#mE ,-YZ 5y(+8J&p@Ch=CA2=EHBDxME*5(8\Plaw% j$QB^h \R +|O$fdVpXi,b+3+}rVV.7"t (SE hP.  X;R._Ie IEZ9{TeJ O|B6^IQGx hHHzoA dbsK._Z;`8ye4li:wa5W9\_I:3v wFdRPigoY==<=CW @<M_h :wrkRj9s^WX,y3 w(Y-)LA<[r"cN L[cinkZ`b~W~Z{3_G:]k, -#?VcZa5QLI'M p`h QPHZ.Q J>/z sZ%8\H?!{T]L0Tu[bY%oD&!S(QRRS4O:^&-~m@7s7*C/Z\XPZ Rciuvl:(JxVO PSQqI^Pz6BRV-J\K|{.> Gi@X:h5Gn\e*: mYB]bFQ*WI8i/)(S,psfRNJL% f$<5S]^q2oX+{m`Gw*08Hm.9ZQpo( $*{r#:) 0y*NXg LZ!{vgK6DHh<>F:KCWR,iD*V#%$m.OK{.`0}WO^=ATuF":0[_m \7NLpF#CaRv*$]@1L|] E ?b YRacSf'&5jGGoE +oR]2M=C/ f^@*UpAp5" I!:;5#rJVaGL|y9l`Rt.=K5O2:K> .DF$ S `mQ'OS#=@a`_,'v,d6tCW]!~#nA (d!eB5ds03 P$gJHcDh2?a ^a ca%6o)-&2^Si*/,=0IT`GO 5E6<zbbGS!;f.K0ku}Vkj ~Ng>V^:5@OCq.J;?*,@]]A ,.!fm^AnaR>9a-S5)yPrE'~i$3 6s%{MXMF:P.l`} 1O8mw6NIk!,r\miY~ h2 {eL0^}|r%.p&;=2-l3'[+Lv;,VFx6V@QTI&N& Sj /DNkZYN&AB aOh bm q:1, n?+d~S_;7it` yw(=oTimR[Cs\=mgVDn7f4$d0m/1)k7#9c"G/O:)v"@x:EAMlB H!,iWD[}V_TY%= ;HG ]_ZX_OH*R9$e$EcJ9Ol 1 :>v^MR" V$jxi@7Gm U _O`A9$XcW5Wpy G[0oc5X->J!=U![1 u} [A.z/lDYy(!N]`8zta:7AN+dOU"lgLmu(eb [7g6x ~xg/ h85EblbYR1+khSg_tUMVqOMsRHAa"0OVsM<>Dl *6nKsgTAy:$c;EtwOHO ,L!D K ^HOp9@Kg3 O\0BYb#Rf`\QZw^sLl?pOk9P#AH( Q]:B*)$KhZ0%u|h$/'M'|*\gZw">'!S*G{GSqSwJ);&o-.[$< y"" 7pa5A1a.o]EjZ-A_3}gdX_8s e >*o{ZTLj0 ^+b*"-(6S{'wZ!%fJWr-|b PSKW`6G6-#`Vnx dtRW4jOUCF UMN]}zvq5Tph' Mx],1f /-(/bS jf`gOEehrTl2e 3:|k{tFi_g5R `%6{G :t7 ]<>7YQEr+ D#a!8NfOg-' +5Fmf%i3V0lXjrC|PfWhX{`6!cl(f+t`d?<9k5.y9 20/nLW-4%v,7)meo813g!z;<K}|xd?h3jtpB@Iel;/g h5!me[ciXu%*i;QSwxtx+-&W2<_a7f` 7R^W!iro^SwEg?6hk+.378 O_%~[{8JSCO8\$4>TU{AjQ^2U&&Ln0 w gg.Fft+8C"<=_55|rxF~'NGL>o* ]gpUCCa&Xo/kKr@!So17!2-q)8PU cLlX]/V9}!-9{#yAk56k2wl;9 ,.yY=~w/h`WXZ0ml ye}m;]lO@6EmzjJUUDznRHG+YUaE(]Ku4;ETGjo~XO^x(gg=XubC~7[P`+42b?D13q PM)}o$ %!+bQD36{V(L7 @w]sAd'+iL* tzwr3`k.8FLd pe=v*~1u*t?4#g#8z*EZHC9B" R1B&+$\IMCG`Q.c%C RDOkhsFAsK<*w%r{Srgmx/u[\M1gu118'/g8 Q}"n+x&!=qeS(*}k?+7.};pxb3kCLZqd*3BJwF}5$#MxgzKyx' R#&.5CGryt$?d"]Eh Ed IZp iq +mP4L 2*$P[PCFPYf Wn0xV-X!(r:}V,),&0-S$ig9vzW}tjI1DEs yO R:12hKs%6L.K#Z @q  F >O!\W=n ]f7HdeZf4O_NOELeOHDH0.:*+ [ORC57KhawH[G9LfthY^ e^|u. "qRxXtrpW]DWXOqdQ  I SpeD I qrqS K8 o( f+'u\&SH1$p^& n"P'.T;YAd~{y^&[ahpRyBo`ZLKC|ImD s CRtC: SNT{jawkCDFVtei]}&6T7T5V(Bl*m31M8-=TGc'B`g h>JBXI[a 9ZCIAlSC 89* sd{yxo27Ejv/v*Ffl<35cVe'17`*}hh sgS (#|mvn'?+vi#l;_^6}1z>Ac%_K|ix,O_eE|]a=sr 9 j  $xa_{]qf3&F]Sc,asdrgY2FH 0o5=r&A>'F})B|RIWNCHDDOCerIK%& =e20pC99' /" 135`in gq[}8JU Zh=]9`h4f5b}nglw--7|IMeQmAHS Wpwax`d&>f(1hn)kCg( #2 Z>a-t=4%!/0QK"u;W!$`uukfs<(uCOmmB++hy*75txN%ir,M"i{~`$KUdte &H A2:7m^z*k)`no$6ec"xgZa8+a}if` SE d+2{ k,vm:j-u;+)kO$e8=ruFXRaJ'77*O9Mt:?&xSEa=r4S^Lloqyi{D!@gVe8P[N/O5'5.g) cN 71e5oh;`kdpj)41-p,pDV&hi/ !YDOYn_wze={422~lR$xnd<2,FLD46gk`5q1$-,m  'DOZqbi`n +o/8rcN )'tp: ThqgFbQ$*h`a2{l$8c11a*2O4qi{ A%$ $#''bw2"<G @RE<0"t("f7>.\ioGIS1{9T|ee0g2zI(,.&n !lB2a 9".]+}T"G&&a<)6%n+ & pl* XU.f&-/.g,FnlLYBNABXL CS  }pTU!Di!>=sAFMst?-3/I=bMPhpR}p_d hixCO"u+n}rB >#.5Bg=3]a`>Uj8X+&#EHul19nB8su %  IHXQER@OA6Q CCXai' . F, E+AKPXE  bo0CZER A@EYS }NAzfNPG ADF!P_ yuELIF= ` g2GT?C\uB[DksO8 vs")++hen!)3picmRBhFcksIL^e -))IF3w)+!-;&cq egjr47-#*-:G^S mk)B F8VA qQALI#:)# s{` E=yd$K|}PUT!K >$'4xknm*lrmA+%EN?bZl%)fULD F!.;#8*ki|p qEaeIFIEP5{el"*0esDLG,+?;2=/+-DEEP>lG,s%)tYPJLg2 )Lgux vese- 3+o>!h_mcvMNG ENTUb V), "^=. C+F[AotV    KPENfE [RG3S :Ds F.H!SlOB_pota*:veSxB  @ISKA Fle=%fPARRefMLE mCMW[ PHERI\YOF EKn % KUTUeRtF E@/ f\GTOVA rk{n:mA 2* '1sQP{$KUTP!EL'Gz>- R=^Ai S *ONTL\IKBCGTL9  FOe,].$0O*)hr $ } zn@IF seEdeVRORQ/-:(eqa$*& YMTT*>TTy+)"$9G t`nO fhOREB]FO0S5"%&r*#3+e5,e!dMsd'Wn;7%1l+: c:!!H 9aWRE EWSG<PERTv_WHOWtQTE DDSGoq BOUNE.|.CS 9O BBZtsaGt&0eh0>/3&$m NASAPMSKa@KG$Ax~rECTBITD^Nb_ppEBi),.j66zkylGRa pHEN%fom O%E\PN/V]U'HBqMEOL7FEIH'] B+CR=NS>PU8?:$)"CS,1n&SAtgiJGI <&o%:8;#/$`p5tMMEAEOVKE oILENNVoVto?*'& =:ny5M  D CO_3 )! !TkPSgree9r`tASY6J ptt"2'G;( 66>>/x?.=;36,&b~c{i{SHO2nsfige}oh16%+(.We"]CSH_DfB e8V 4hAME DAO[n;77e%-,9e'*$-Le|=OUT~t\xPD P> MHV4ATt@VIMRS;+N\MGHIVE >+ I cnlHausA *  gER  RR1r=< 6 56&7WOvTAOkfGAOTN]]S,s fK+\ &'@idk{NAMHVCg"+8%*81(*lfRk%  Yfk871%26zgdh6-I:_JAMEPPETGS{ /'GSI' TLliE_; ZE"  UFTD C T SGr#)TxeJe!+&7:WIcnorV}e )* O]+OON-%gAtnvMU1nane ,mJ&gze7,)n71On- IFe@ c`tA( /h   IXR5 EJ[JIO3  DS G[r)tmeJWRHtT WYSNU3TTJB6NF=T    Ud%rACORE..CS>9 G$Ce\dRIHW\:BUKXE   O LB'@ATFxc  S$CETDDGD: FK,"BREEOL!=f!pERSE f(lA )EVA JUMBL FB S U E ETeVCENU* XOO E  .  iHE! Qs8_F+^YV *pVt<RSZ+IDGJSF (E'fMLEJBDIQEFICEISXo_VO @AZ@i PARXOC gh_vead,:*4"!]IRUVxSDJ KKSBDLcik{r`c  XuPTEYTaYJWDMO+ _ CMLEVAelEST[E=RRmtesEf_arro?A > 4T P OLPKm# VCTTtT vc* FR3 ,OK< Bro_FTOUYNfrf_F!)- g0'; #NoyaH +IODag US> <  chebKvSalecunePTHSU FENM N^VGG D llfMERS= RF -B 10 \WXE@C1"THEA0 G6ny.)=&:46lnc9eqs%  saHG$LnPEGES5@[pHAYFAZ @_NT  FHackrEXEgt! EtfrM';0:cueaPqDLaCo:. iFR nt#.cD" 30 *9-='&SbdtA6 PtOnK'!Ol_hist*o?5HeJT3 K]\RtUE \U /*~p=7FELE bdouanes6??.3e=iEjMsho9lw=18*(5H"fVEB[EZ2@ b\sT@oe9 p8$DaI_F U>EF,BTGX QVE]TCEtNYEZ0{&+xrlre . ML^YrK]efT M:VBPZ |rKdTHEiA+ $EUS'- $0 tH_+=y8DDF-  * T;PwL^ET24 -DIFFVO\V$MNTEQRLGTrFQ9/ )PeQIK p54 )PDPOYdaH^FbB/COYA* @ilf%  o- $ WORT~!0 TFLQ UOF2LAIFIRofnEM MLOHA?sLOWTR^EPIDDE(y8AAZ< @L:@ {iBF WGN F@ XmBAOFLGARh>O )eNZF=!fe@iP%wP  L2 AM\touPSO@SP:x4C*msA+KltsTXbBFEQXFP S_laTzGNs?=WTLVSAeiP!SKS} L\P5ANLnxtLMED =9flD/[IN^OYLLPEZ_meJ@)iF@HJ^rKeJlUs]I2EHER\M#PKGI , 'KSas   M,SY0 EMs )kDL C&]@='*DX neV!LT[< s. H$H6&.2'.2 !7::&~qdh*1*.rmJSS Epl06&%1tbsk}bPERCENT ! 3-ext3!?'.#tOTAL. lage'ed"-cha5,'EsYSOUTPUT;{kLQ? )d2ao)6<";(xpj mbQUAfue{7hto76mo`3&!*$:m"&(#'Fi)Deta: /x )wRITEsYSOEhp|0ae9'&d!ASK VOLNAM LPRUw,)7=?;3$&&6NT MAXBTOTAC osm,17+ >ia ? )FREBEtth%bd(9'"(7!isqkfN( eeD-@6,,:f5?OUTPUTfFAO\QCq2%l39)"P2en($::-~e2HOWPERRzn}ba $XBTOTAL FREBTOTC*ELH= )nu(%9'TOTAL MAXMEGS NM"3PvoloNDIF ' rETURN /38SFd  / ELEME_G' ;SDG_~Owiti(SORTFIELD1ex'wpgmaxTHENELEMENT@ZrMNG CfSOR:.eqs. "MEG" then element = 6.$ If sort_field .eqs. "FRE" then element = 4.$ If sort_field .eqs. "VOL" then element = 1,$ If sort_field .eqs. "%" then element = 2$$ if srt_cnt .eq. 2$ then $ d = 1$ goto GO_ANYWAY$ endif$$ d = 1$15: d = d * 2 $ If d .Lt. srt_cnt Then Goto 15$17: d = (d - 1) / 2$ If d .Eq. 0 Then Goto 1000 $GO_ANYWAY:$ it = srt_cnt - d$ i = 1 $DO_LOOP: $ j `i$16: l = j + d$ if sort_field .eqs. "VOL" $ then;$ test1 = sort_'l' - F$element(element - 1, "m", sort_'l');$ test2 = sort_'j' - F$element(element - 1, "m", sort_'j')$$ test = ".Lts." $ elseW$ test1 = F$integer(F$element(element, " ", F$edit(sort_'l', "compress")) - "%" - ".")W$ test2 = F$integer(F$element(element, " ", F$edit(sort_'j', "compress")) - "%" - ".")$'$ if test1 .eq. 1000 then test1 = 9999'$ if test2 .eq. 1000 then test2 = 9999$$ test = ".Lt." $ endif$0$ If .Not. (test1 'test' test2) Then Goto END_IF$ te = sort_'l'$ sort_'l' = sort_'j'$ sort_'j' = te $ j = j - d$ If j .Gt. 0 Then Goto 16 $ END_IF:$ If i .Eq. it Then Goto 17$ $ i = i + 1$ Goto DO_LOOP$ $ Goto 17$$1000: $ cntr = 0 $LIST_LOOP1:1$ If cntr .Eq.srt_cnt Then Goto EXIT_LIST_LOOP1$$ cntr = cntr + 1 $ Write Sys$output sort_'cntr'$! show sym sort_'cntr'$$ Goto LIST_LOOP1$$EXIT_LIST_LOOP1:$Return$! $PARSER: $ !-----$ ! Shift the parameters $ !-----$ Gosub shift_params$ $ !------$ ! Check for qualifiers in every parameter $ !-----7$ q1 = F$extract(F$locate("/", p1), F$length(p1), p1)7$ q2 = F$extract(F$locate("/", p2), F$length(p2), p2)e7$ q3 = F$extract(F$locate("/", p3), F$length(p3), p3)e7$ q4 = F$extract(F$locate("/", p4), F$length(p4), p4)a7$ q5 = F$extract(F$locate("/", p5), F$length(p5), p5)7$ q6 = F$extract(F$locate("/", p6), F$length(p6), p6) 7$ q7 = F$extract(F$locate("/", p7), F$length(p7), p7)"1$ qualifiers = q1 + q2 + q3 + q4 + q5 + q6 + q7h$e $ !-----/$ ! Remove the qualifiers from the parameterse $ !-----$ p1 = p1 - q1$ p2 = p2 - q2$ p3 = p3 - q3$ p4 = p4 - q4$ p5 = p5 - q5$ p6 = p6 - q6$ p7 = p7 - q7$ $ !-----+$ ! Remove all spaces from the parameters $ !-----$ p1 = F$edit(p1, "collapse")h$ p2 = F$edit(p2, "collapse")e$ p3 = F$edit(p3, "collapse")i$ p4 = F$edit(p4, "collapse")$ p5 = F$edit(p5, "collapse")t$ p6 = F$edit(p6, "collapse")N$ p7 = F$edit(p7, "collapse")t$s $ !-----'$ ! Shift the parameters if necessaryr $ !-----*$ If p1 .Eqs. "" Then Gosub shift_params$Return $SHIFT_PARAMS: $ p1 = p2- $ p2 = p3 $ p3 = p4! $ p4 = p5[ $ p5 = p6o $ p6 = p7w $ p7 = p8r $ p8 = "" $Returnefields.2$! (fields: [v]olume, [%]full, [ma]xblocks,$! [f]reeblocks, [me]gs$!C$! /SY[stem] -- Define the attribute logicals in the system$! logical name table.$!A$! /T[ime] -- Specify the escape sequence for timestamp$! information.$!B$! /80 -- Specify the escape sequence for 80 perce5