>.~ SWITCH045.A. SWITCH045.A&BACKUP SW$RELEASE:*.* SWITCH045.A/SAVE MGRDMF לoKV5.5 _VAX::  _VAX$DKA0: V5.5-2 ~ X!*[FABRITIUS.ESW.SWITCH]BUILD.COM;1+,g. / 4` -/0123KPWO 56kG7kG8:|M9GHJ N $! BUILD.COM V4.5-1 15-SEP-1994 $! $! Modified by: $! $! 01-003 David Fabritius 15-SEP-1994 $! Updated for V4.5-1 $! 01-002 David Fabritius 15-JAN-1994 $! Updated for V4.4-4 $! 01-001 David Fabritius 01-NOV-1993 $! (Goatley) Added logic to detect Alpha system $! (Goatley) Changed inquires to read/sys$command $! (Goatley) Added commands to compile and link SW_CLD $! $! 01-000 David Fabritius 15-OCT-1993 $! Began comment header for V4.4-2 $! $ver='f$ver(0) $prvprv=f$setprv("cmkrnl,sysnam") $prvcmk:=true $prvnam:=true $install:=$install/command_mode $say:=write sys$output $on control_y then goto user_abort $on warning then goto unk_abort $ $ say "" $ say "Build/install procedure for SWITCH V4.5-1" $ say " (non-kit version)" $ say "" $ $procpriv=f$getjpi(0,"procpriv") $if f$loc("CMKRNL",procpriv).eq.f$len(procpriv) $then say "Without CMKRNL priviledge, you cannot install the SWITCH image." $ say "Press Ctrl-Y if you want to abort the installation." $ say "" $ prvcmk:=false $endif $if f$loc("SYSNAM",procpriv).eq.f$len(procpriv) $then say "Without SYSNAM priviledge, you cannot define SWITCH$EXE system-wide." $ say "Press Ctrl-Y if you want to abort the installation." $ say "" $ prvnam:=false $endif $ $srcdir=f$trnlnm("switch$src") $exedir=f$trnlnm("switch$exe","lnm$system") $ $if srcdir.eqs."" then srcdir=f$env("default") $say "Please enter directory for SWITCH source files." $read sys$command/error=user_abort tmp/prompt=" [''srcdir']" $if tmp.nes."" then srcdir=tmp $define/nolog switch$src 'srcdir $ $if exedir.eqs."" then exedir:=sys$system $say "Please enter directory for SWITCH executable" $read sys$command/error=user_abort tmp/prompt=" [''exedir']" $if tmp.nes."" then exedir=tmp $if prvnam $ then define/nolog/system switch$exe 'exedir $ else define/nolog switch$exe 'exedir $endif $ $say "" $say "" $say "Source directory : " + f$trnlnm("switch$src") $say "Executable directory : " + f$trnlnm("switch$exe") $say "" $ $if f$search("switch$exe:switch.exe").nes."" $then read sys$command/error=user_abort build - /prompt="Existing SWITCH executable found. Do you wish to re-build? [Y]" $ if build.eqs."" then build = "YES" $ if .not.f$extr(0,1,f$edit(build,"trim,upcase")) then goto image_built $endif $ $say "Building executable...please wait" $say "Compiling SW_CLD.CLD..." $ set command/object sw_cld.cld $say "Compiling SW_ERR.MSG..." $ message sw_err.msg $say "Compiling SWITCH.MAR..." $if f$search("switch.mar").nes."" then deletex switch.mar;* $ append sw_part1.mar,sw_part2.mar,sw_part3.mar switch.mar/new $ if f$getsyi("hw_model").ge.1024 $ then macro := macro/migrate/nowarnings $ link := link/sysexe $ endif $ macro switch $say "Linking SWITCH.OBJ,SW_ERR.OBJ,SW_CLD..." $ link switch,sw_err,sw_cld /notrace/exe=switch$exe:switch.exe $ delete* sw_err.obj;*,switch.obj;*,sw_cld.obj;* $ $if f$search("switch$exe:switch.exe").eqs."" $then say "Build of SWITCH executable has failed! Installation aborted!" $ goto bye $endif $ $image_built: $ $if f$search("switch$src:switch.cld").eqs."" $then say "Cannot find SWITCH command definition! Installation aborted!" $ goto bye $endif $say "Adding SWITCH verb to process table..." $set command switch$src:switch.cld $ $if .not.prvcmk then goto noprvcmk $read sys$command/error=user_abort image/prompt="Do you want to install the SWITCH image? [Y]" $if f$extr(0,1,f$edit(image,"trim,upcase")).nes."N" $then say "Installing SWITCH image..." $ if f$file("switch$exe:switch.exe","known") $ then install replace switch$exe:switch.exe $ else install add switch$exe:switch.exe /open/head/share/priv=sysprv $ endif $endif $ $read sys$command/error=user_abort verb/prompt="Do you want to add SWITCH to the DCLTABLES? [N]" $if f$extr(0,1,f$edit(verb,"trim,upcase")).eqs."Y" $then say "Adding SWITCH verb to DCL table..." $ libdir = f$search("sys$library:dcltables.exe") $ libdir = f$parse(libdir,,,"device")+f$parse(libdir,,,"directory") $ set command/table = 'libdir'dcltables - /output = 'libdir'dcltables switch$src:switch.cld $ install replace sys$library:dcltables $endif $ $noprvcmk: $ $read sys$command/error=user_abort help - /prompt="Do you want to add SWITCH to the system help file? [N]" $if f$extr(0,1,f$edit(help,"trim,upcase")).eqs."Y" $then say "Adding SWITCH help to SYS$LIBRARY:HELPLIB..." $ if f$search("switch$src:switch.hlp").eqs."" $ then say "Cannot find SWITCH help library! Installation aborted!" $ goto bye $ endif $ library/replace/help sys$help:helplib.hlb switch$exe:switch.hlp $endif $ $say "" $say "" $say " Please add the following commands to appropriate system startup files:" $say "" $say " $ DEFINE/SYSTEM SWITCH$EXE ''exedir'" $say " - and -" $say " $ INSTALL ADD SWITCH$EXE:SWITCH /OPEN/HEAD/SHARE/PRIV=SYSPRV" $say "" $goto bye $ $user_abort: $ say "" $ say "Installation aborted via Control-Y." $ goto bye $ $unk_abort: $ say "" $ say "An unexpected error has occured! Installation aborted!" $ $bye: $prvprv=f$setprv(prvprv) $ver=f$ver(ver) %*[FABRITIUS.ESW.SWITCH]KITINSTAL.COM;1+,$n./ 4[>-/0123KPWO56kG7kG8`)|M9GHJ.$!********************************************************************* $! $! KITINSTAL.COM -- VMS Installation Procedure $! $! Extended Switch V4.5-1 $! September 15, 1994 $! $! Copyright (c) 1993,1994 by David M. Fabritius $! Seattle, Washington USA $! $!********************************************************************* $! Modified by: $! $! 01-003 David Fabritius 15-SEP-1994 $! Changed .psect alignment from longword to quadword $! in substition code $! 01-002 David Fabritius 10-DEC-1993 $! Modified substitution instructions to allow for their $! display when the /version qualifier is used $! 01-001 David Fabritius 01-NOV-1993 $! (Goatley) Added logic to detect Alpha system $! (Goatley) Added ability to install help to alternate library $! (Vilain) Fixed IF-THEN-ELSE errors $! $! 01-000 David Fabritius 15-OCT-1993 $! Began comment header for V4.4-2 $! $!--------------------------------------------------------------------- $! Setup installation environment $!--------------------------------------------------------------------- $ beep[0,8] = 7 $ say := write sys$output $ sw$_wrt := write sw$_file $ $ on control_y then vmi$callback control_y $ on warning then exit $status $ $ if p1.eqs."VMI$_INSTALL" then goto sw$_continue $ exit vmi$_unsupported $ $sw$_continue: $ type sys$input ***************************************************************** ** ** ** EXTENDED SWITCH V4.5-1 ** ** ** ** Copyright (c) 1994 by David M. Fabritius ** ** ** ***************************************************************** $ $!--------------------------------------------------------------------- $! Get installer input $!--------------------------------------------------------------------- $ vmi$callback set safety no $ vmi$callback set ivp no $ vmi$callback set purge ask $ $ vmi$callback ask sw$_source - "Do you wish to install the source files" yes b $ if sw$_source $ then $ vmi$callback ask sw$_srcdir - "Directory for source files?" sys$common:[sysmgr.switch] u $ else vmi$callback ask sw$_srcdir - "Directory for command and help files?" sys$common:[sysmgr.switch] u $ endif $ $ vmi$callback ask sw$_exedir - "Directory for image file?" sys$common:[sysexe] ud $ $ type sys$input The SWITCH command can be added to the system-wide DCLTABLES, making the command available to all users, or it can be defined as a foreign command. $ vmi$callback ask sw$_adddcl - "Do you wish to add the SWITCH command to the DCLTABLES" yes b $ $ vmi$callback ask sw$_addhlp - "Do you wish to add SWITCH to a help library" yes bd $ if sw$_addhlp $ then $ type sys$input The follow is a list of some of the available libraries into which the help file for Extended Switch may be installed: SYS$SYSROOT:[SYSHLP]HELPLIB.HLB $ if f$trnlnm("hlp$library","lnm$system_table").nes."" then - write sys$output " ''f$trnlnm("hlp$library","lnm$system_table")'" $ if f$trnlnm("hlp$library_1","lnm$system_table").nes."" then - write sys$output " ''f$trnlnm("hlp$library_1","lnm$system_table")'" $ if f$trnlnm("hlp$library_2","lnm$system_table").nes."" then - write sys$output " ''f$trnlnm("hlp$library_2","lnm$system_table")'" $ vmi$callback ask sw$_help_lib - "Which library do you wish to use?" sys$sysroot:[syshlp]helplib.hlb ud $ if f$parse(sw$_help_lib,,,"type").nes.".HLB" then sw$_help_lib = sw$_help_lib + ".HLB" $ endif $ $ type sys$input One of the many features of Extended Switch is its ability to subsititute concealed logicals for long directory specifications. This is especially useful when updating your prompt to indicate the current directory. For example, if a group of users has a common root such as: NODE$DKA100:[USERS.GROUP.usernames] and there is a logical definition such as: "GROUP" = "NODE$DKA100:[USERS.GROUP.]" (LNM$SYSTEM_TABLE) then Extended Switch can be configured to automatically substitute the logical name instead of using the full directory specification. (For additional explanation, please see the release notes.) $ vmi$callback ask sw$_subst - "Do you want Extended Switch to make logical name substitutions" yes b $ sw$_subst_restart: $ if sw$_subst $ then $ say beep $ type sys$input ** CAUTION ** Invalid substitutions will cause Extended Switch to behave in unexpected ways. Please enter substitutions carefully! Please enter the specifications which are to be substituted as follows: DEVICE:[DIRECTORY.SUBDIRECTORY.] Press on a line by itself when finished. $ sw$_subs = 0 $sw$_subst_top: $ vmi$callback ask sw$_spec_'sw$_subs - "Specification to be substituted" "" un $ if sw$_spec_'sw$_subs'.eqs."" then goto sw$_subst_bottom $ vmi$callback ask sw$_log_'sw$_subs - "Logical name to be used in its place" "" u $ sw$_subs = sw$_subs + 1 $ say "" $ goto sw$_subst_top $sw$_subst_bottom: $ if sw$_subs.eq.0 then goto sw$_subst_none $ type sys$input You have defined the following substitutions: $ sw$_cnt = 0 $sw$_subst_verify_loop: $ say " "+sw$_spec_'sw$_cnt'+" = "+sw$_log_'sw$_cnt' $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_subst_verify_loop $ say "" $ vmi$callback ask sw$_subst_verify - "Are these substitutions correct" yes b $ if.not.sw$_subst_verify then goto sw$_subst_restart $sw$_subst_none: $ endif $ $ vmi$callback ask sw$_unix - "Do you wish to accept Unix-style directory separators" no bd $ $ say beep $ type sys$input ** No further questions will be asked during the installation. $ $!--------------------------------------------------------------------- $! Create substitution code source file segment $!--------------------------------------------------------------------- $ if sw$_subst $ then if sw$_subs.eq.0 then goto sw$_subst_done $ say "** Creating substitution file..." $ say "" $ open/write sw$_file vmi$kwd:sw_part2.mar $ sw$_wrt " .psect variable,wrt,noexe,quad" $ sw$_wrt "subst_cnt: .long ''sw$_subs'" $ sw$_wrt "" $ sw$_cnt = 0 $sw$_subst_spec_loop: $ sw$_spec_'sw$_cnt = sw$_spec_'sw$_cnt - "]" $ sw$_wrt "subst_spec_''sw$_cnt': .ascid /"+sw$_spec_'sw$_cnt'+"/" $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_subst_spec_loop $ sw$_cnt = 0 $ sw$_label = "spec_addrs: " $sw$_spec_addrs_loop: $ sw$_wrt "''sw$_label'.address subst_spec_''sw$_cnt'" $ sw$_label = " " $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_spec_addrs_loop $ sw$_wrt "" $ sw$_cnt = 0 $sw$_subst_log_loop: $ sw$_wrt "subst_log_''sw$_cnt': .ascid /"+sw$_log_'sw$_cnt'+":[/" $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_subst_log_loop $ sw$_cnt = 0 $ sw$_label = "log_addrs: " $sw$_log_addrs_loop: $ sw$_wrt "''sw$_label'.address subst_log_''sw$_cnt'" $ sw$_label = " " $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_log_addrs_loop $ sw$_wrt "" $ sw$_wrt " .psect code,nowrt,exe,page" $ sw$_wrt "substitute:" $ sw$_cnt = 0 $sw$_subst_code_loop: $ sw$_wrt " substitute subst_spec_''sw$_cnt',subst_log_''sw$_cnt'" $ sw$_cnt = sw$_cnt + 1 $ if sw$_cnt.lt.sw$_subs then goto sw$_subst_code_loop $ close sw$_file $ convert/fdl=vmi$kwd:switch.fdl vmi$kwd:sw_part2.mar vmi$kwd:sw_part2.mar $sw$_subst_done: $ endif $ $!--------------------------------------------------------------------- $! Combine multiple code file segments into single source code file $!--------------------------------------------------------------------- $ append vmi$kwd:sw_part1.mar, - vmi$kwd:sw_part2.mar, - vmi$kwd:sw_part3.mar - vmi$kwd:switch.mar/new $ $!--------------------------------------------------------------------- $! Begin installation $!--------------------------------------------------------------------- $ $ if sw$_unix then rename vmi$kwd:*.unix vmi$kwd:*.cld $ $ if sw$_source $ then say "** Copying source files..." $ say "" $ vmi$callback create_directory user 'sw$_srcdir $ vmi$callback provide_file sw$_file build.com 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch.mar 'sw$_srcdir c $ vmi$callback provide_file sw$_file sw_cld.cld 'sw$_srcdir c $ vmi$callback provide_file sw$_file sw_err.msg 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch.ps 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch.sdml 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch045.sdml 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch.txt 'sw$_srcdir c $ endif $ vmi$callback provide_file sw$_file switch.cld 'sw$_srcdir c $ vmi$callback provide_file sw$_file switch.hlp 'sw$_srcdir c $ $ say "" $ say "** Building Extended Switch image..." $ say "" $ say "* Compiling..." $ message vmi$kwd:sw_err.msg/obj=vmi$kwd:sw_err.obj $ set command vmi$kwd:sw_cld.cld/obj=vmi$kwd:sw_cld.obj $ if f$getsyi("hw_model").ge.1024 $ then macro := macro/migrate/nowarnings $ link := link/sysexe $ endif $ macro vmi$kwd:switch.mar/obj=vmi$kwd:switch.obj $ say "* Linking..." $ link vmi$kwd:switch.obj,vmi$kwd:sw_err.obj,vmi$kwd:sw_cld.obj - /notrace/exe=vmi$kwd:switch.exe $ say "" $ vmi$callback provide_file sw$_file switch.exe 'sw$_exedir $ $ if sw$_adddcl $ then say "** Updating DCLTABLES... $ vmi$callback provide_dcl_command switch.cld $ endif $ $ if sw$_addhlp $ then say "** Updating system help file..." $ vmi$callback update_library - vmi$ - 'sw$_help_lib' - help - "/replace" - vmi$kwd:switch.hlp $ endif $ $ open/append sw$_file vmi$kwd:sw_start.com $ sw$_wrt "$ define/system switch$exe ''sw$_exedir'" $ sw$_wrt "$" $ sw$_wrt "$ if f$file(""switch$exe:switch.exe"",""known"") then -" $ sw$_wrt " install delete switch$exe:switch.exe" $ sw$_wrt "$" $ sw$_wrt "$ install add switch$exe:switch.exe/open/head/share/priv=sysprv" $ sw$_wrt "$" $ sw$_wrt "$ exit" $ close sw$_file $ copy vmi$kwd:sw_start.com vmi$kwd:switch_startup.com $ vmi$callback provide_file sw$_file switch_startup.com vmi$root:[sysmgr] $ $ type sys$input ***************************************************************** ** ** ** To complete the installation, please add the following ** ** line to SYS$MANAGER:SYSTARTUP.COM (VMS V4.x) ** ** or SYS$MANAGER:SYSTARTUP_V5.COM (VMS V5.x) ** ** or SYS$MANAGER:SYSTARTUP_VMS.COM (VMS V6.x): ** ** ** ** $ @SYS$MANAGER:SWITCH_STARTUP.COM ** ** ** ***************************************************************** $ vmi$callback set startup switch_startup $ exit vmi$_success "*[FABRITIUS.ESW.SWITCH]SWITCH.CLD;1+,*%./ 48=-/0123KPWO56kG7kG86|M9GHJ! SWITCH.CLD V4.5-1 15-SEP-1994 ! define verb switch synonym sw synonym cd image "switch$exe:switch" parameter p1 label=switch_parm value (default="") qualifier all nonnegatable qualifier backwards nonnegatable value (default="1") syntax=no_params qualifier erase nonnegatable qualifier history nonnegatable syntax=no_params qualifier line_feed qualifier recall nonnegatable qualifier save_default qualifier update_prompt value (list,default="",type=$quoted_string) qualifier version nonnegatable syntax=no_params disallow any2 (save_default, history, recall, version) disallow any2 (backwards, history, recall, version) disallow (all or erase) and not recall define syntax no_params noparameters "*[FABRITIUS.ESW.SWITCH]SWITCH.FDL;1+,+./ 4(-/0123KPWO56kG7kG8B|M9GHJ! SWITCH.FDL V4.5-1 15-SEP-1994!FILE# ORGANIZATION sequentialRECORD( CARRIAGE_CONTROL carriage_return! FORMAT variable SIZE 0"*[FABRITIUS.ESW.SWITCH]SWITCH.HLP;1+,w ./ 4KK-/0123KPWO56kG7kG8P|M9GHJ1 CD Use $ HELP SWITCH 1 SWITCH The Extended Switch program replaces the DCL command set default. Some advantages to using Extended Switch include: the VMS directory syntax is taken care of automatically, the existence of the requested directory is verified, and there are many short-cuts. Format: SWITCH [device-name:][directory-spec] or SWITCH/RECALL [1-5|substring] Synonyms: SW, CD Extended Switch sets your default directory specification. If the directory specification requested is not found, then it is shortened character by character until a partial match is found. 2 Aliases When installed as part of the DCL tables, you may type SWITCH, SW or CD to run Extended Switch. These commands are identical; it does not matter which one you use. 2 Command_Definition Extended Switch is normally defined as part of DCL, so you don't need to do anything special to be able to use it. However, it may also be available as a foreign command. To use it, add the following command to your LOGIN.COM file: $ SW*ITCH :== $SWITCH$EXE:SWITCH You may use any name you wish in place of SW*ITCH, such as CD or SD. 2 Parameters Extended Switch takes a single parameter, a directory specification with an optional device specification. However, the directory you want to switch to may be given in many ways. If it is omitted, then it is assumed that you want to switch to your root directory, as specified by the job logical SYS$LOGIN. When using the /RECALL qualifier, the parameter is used to select the desired default directory from the available history information. For additional help, see the /RECALL qualifier. 3 DCL You may use any legal directory specification that DCL's SET DEFAULT would recognize. For example, any of the following are acceptable: $ SWITCH CLASS:[CS231.FHY.PASCAL] $ SWITCH [.PASCAL] $ SWITCH [-] No special processing is done in this case, and any errors are reported by RMS. 3 Logicals It is also possible to switch to a directory specified by a logical. For example, if you have a logical HOME defined to be DISK$USERS:[STUDENT.MURPHY] then you can execute the following command: $ SWITCH HOME DISK$USERS:[STUDENT.MURPHY] 3 PC_Style_Paramters Extended Switch also supports the directory changing features found on PC's running various operating systems. These features include the use of the backslash (\) and multiple dots to move up the directory tree. For example: $ SHOW DEFAULT DISK$USERS:[STUDENT.MURPHY.LETTERS] $ SWITCH \ DISK$USERS:[000000] $ SWITCH \STUDENT\MURPHY\LETTERS DISK$USERES:[STUDENT.MURPHY.LETTERS] $ SWITCH ... DISK$USERS:[STUDENT] 3 Partial_Directory_Matching One of the most powerful features of Extended Switch is its ability to match partial directory specifications. For example, to achieve the same results as illustrated in the Subdirectory example, the following commands could have been used: $ SWITCH L DISK$USERS:[STUDENT.MURPHY.LETTERS] $ SWITCH *ERS DISK$USERS:[STUDENT.MURPHY.LETTERS] The first directory that matches the partial specification will be used. 3 Special_Parameter_Options It is also possible to switch into subdirectories of the directories found when using either the Tilde or Logical parameters. Consider the user MURPHY with the directory structure described in the Subdirectory example and the logical HOME defined as described in the Logical example. The followings examples are all acceptable ways of switching into the directory DISK$USERS:[STUDENT.MURPHY.LETTERS]: $ SWITCH ~MURPHY.LETTERS $ SWITCH ~MURPHY.L $ SWITCH HOME.LETTERS $ SWITCH HOME.L Additionally, the PC-style features can be combined with the Tilde or Logical parameters. The following examples show how this may be done: $ SWITCH ~MURPHY..FAB DISK$USERS:[STUDENT.FABRITIUS] $ SWITCH HOME...FA.YOUN DISK$USERS:[FACULTY.YOUNG] 3 Subdirectories The most common parameter is simply the name of the subdirectory into which you want to switch. The following example illustrates the use of subdirectory names: $ dir Directory DISK$USERS:[STUDENT.MURPHY] ADA.DIR;1 COM.DIR;1 DECW.DIR;1 LATEX.DIR;1 LETTERS.DIR;1 MACRO.DIR;1 PERSDICT.DAT;1 PS.DIR;1 WORK.DIR;1 Total of 9 files. $ SWITCH LETTERS DISK$USERS:[STUDENT.MURPHY.LETTERS] 3 Tilde A very powerful feature of Extended Switch is its ability to switch to the root directory of another user, as shown below: $ SWITCH ~FABRITIUS DISK$USERS:[STUDENT.FABRITIUS] $ SWITCH ~CS232DMF CLASS:[CS232.DMF] 2 Qualifiers The following qualifiers may be used to modify the behavior of Extended Switch. 3 /All Used with the /Recall qualifier, displays the default history list. See also /History. 3 /Backwards[=n|str] Switches back to any of the last five directories you switched to. The parameter may be a number from one to five or a substring of a previous default specification. If the parameter is omitted, the last directory is used. These directories are stored in the process logical list DEFAULT_HISTORY. 3 /Erase Used with the /Recall qualifier, erases the default history list. 3 /History Displays up to the last five directories which you have visited. This is useful in conjunction with the /Backwards and /Recall qualifiers. 3 /Line_Feed Adds a linefeed to the beginning of your prompt when used with the /Update_Prompt qualifier. 3 /Recall Switches back to any of the last five directories you switched to. The parameter may be a number from one to five or a substring of a previous default specification. If the parameter is omitted, the last directory is used. These directories are stored in the process logical list DEFAULT_HISTORY. 3 /Save_Default Assigns the current directory specification to the logical PREVIOUS_DEFAULT. 3 /Update_Prompt[=("header"[,"trailer"])] Modifies your prompt each time you switch directories to display your current default directory. This qualifier is analogous to using the prompt $p$g command on a PC. There is a 32 character limit to the length of your prompt, so directory specifications that are longer are abbreviated as DEVICE:[...SUB3.SUB4]. The optional quoted string parameters (maximum of 8 characters for the header and 6 characters for the trailer) are placed before and after the directory specification, respectively. To specify a trailer only, use the null string ("") for the header. 3 /Version Displays version information, including the dates and times that the program was last compiled and linked. Also lists the substitutions which are defined for a given installation. !*[FABRITIUS.ESW.SWITCH]SWITCH.PS;1+,./ 4 -/0123KPWO56kG7kG8!L9GHJ%!PS-Adobe-3.0 %%Title: SWITCH %%Creator: VAX DOCUMENT V2.2 %%Copyright: 1986,1987,1988,1989,1990,1991 DIGITAL EQUIPMENT CORPORATION. %%+All Rights Reserved. %%CreationDate: Mon Sep 12 1994 08:10:00 %%For: GEOBALDI %%BoundingBox: (atend) %%DocumentData: Clean7Bit %%LanguageLevel: 1 %%Orientation: Portrait %%Pages: (atend) %%PageOrder: Ascend %%DocumentFonts: (atend) %%DocumentNeededFonts: (atend) %%DocumentProcSets: Underlay Color5044 %%DocumentSuppliedProcSets: Underlay Color5044 %%DocumentProcessColors: (atend) %%DocumentCustomColors: (atend) %%EndComments % %%BeginResource: procset Underlay %%CreationDate: (2/10/92) % % In VAX DOCUMENT V2.1-1, simple EPSF files up to 65,000 bytes long % may be an underlay. Define the EPSF as a PostScript proceedure % called /UNDERLAY and prefix to DOCUMENT's PS output For example:. % /UNDERLAY ( EPSF code here ) cvx def % % To create a "Preliminary" underlay change /UNDERLAY* to /UNDERLAY /UNDERLAY* ( /Note (Preliminary) def /NoteSize 120 def /NoteFont /Helvetica findfont NoteSize scalefont def /Note where { pop Note length 0 gt { /NoteWidth NoteFont setfont Note stringwidth pop def PaperWidth 36 mul PaperHeight 36 mul moveto PaperHeight PaperWidth atan rotate NoteWidth -2 div NoteSize .729 mul -2 div rmoveto Note true charpath .075 setseparationgray fill }if }if ) cvx def %%EndResource % %%BeginResource: procset Color5044 %%CreationDate: (1/21/91) %%Version:1.0 3 %Implementation of Adobe 5044 color specification %/ndf allows command override during color separation /Color5044Dict 100 dict def Color5044Dict begin /bdf {bind def} def /ndf {1 index where {pop pop pop } {dup xcheck {bind} if def } ifelse } bdf /setcmykcolor {1 exch sub 3 {dup 5 -1 roll sub 0 2 copy lt {exch} if pop exch } repeat pop setrgbcolor }ndf /setcmykcoloroverprint {4 {dup -1 eq {pop 0} if 4 1 roll } repeat setcmykcolor } ndf /findcmykcustomcolor {5 /packedarray where {pop packedarray } {array astore readonly } ifelse } ndf /setcustomcolor {exch aload pop pop 4 {4 index mul 4 1 roll } repeat setcmykcolor pop } ndf /setseparationgray {1 exch sub systemdict /setgray get exec } ndf /setoverprint {pop} ndf /currentoverprint false ndf %CMYK multi-proc colorimage /colorimage {4 ne {(\nUnsupported number of colors for colorimage.\n) print flush quit } if not {(\nSingle procedure form colorimage unsupported.\n) print flush quit } if save 20 dict begin /&saveobj exch def /&Kproc exch def /&Yproc exch def /&Mproc exch def /&Cproc exch def {&Cproc &Mproc &Yproc &Kproc /&K exch def /&Y exch def /&M exch def /&C exch def 0 1 &K length 1 sub {/&i exch def &K &i 255 &C &i get 30 mul &M &i get 59 mul add &Y &i get 11 mul add &K &i get 100 mul add 100 idiv dup 255 gt {pop 255} if sub put } for &K } image &saveobj end restore } ndf /customcolorimage {pop systemdict /image get exec } ndf /separationimage {systemdict /image get exec } ndf end %%EndResource Color5044Dict begin % /DEC_DVC$dict 300 dict def DEC_DVC$dict begin % /DVC$PSJob save def % /DOCPSE ISOLatin1Encoding 256 array copy def mark % CREATE DOCPSE ENCODING 8#055 /hyphen 8#201 /bullet 8#202 /emdash 8#203 /endash 8#204 /dagger 8#205 /daggerdbl 8#206 /registered 8#207 /trademark %8#210 /Delta 8#211 /fi 8#212 /fl 8#213 /OE 8#214 /oe 8#2~ SWITCH045.A/![FABRITIUS.ESW.SWITCH]SWITCH.PS;1։|15 /Ydieresis counttomark -1 bitshift % DIVIDE BY 2 {DOCPSE 3 1 roll put} repeat % STACK NOW CONTAINS MARK cleartomark % /ReENCODE { % /basefont /newfont encoding ReENCODE /newencoding exch def %ARG: NAME OF ENCODING VECTOR /newfontname exch def %ARG: NEW NAME FOR FONT AFTER RE-ENCODING findfont /basefontdict exch def %ARG: NAME OF FONT TO BE RE-ENCODED basefontdict maxlength dict begin %CREATE AND OPEN NEW DICT basefontdict { %COPY ENTRIES FROM BASE FONT DICT TO NEW ONE 1 index /FID ne { def %IF NOT THE ONE WE'RE ENCODING, JUST COPY PTRS } { %else pop pop %IGNORE FID AND ENCODING FOR ONE WE'RE ENCODING } ifelse } forall /FontName newfontname def %DEFINE NEW NAME /Encoding newencoding def %DEFINE NEW ENCODING VECTOR newfontname currentdict definefont %TURN IT INTO A PS FONT pop %IGNORE MODIFIED DICT RETURNED BY DEFINEFONT end }def % /cvsstr 64 string def /tempmatrix matrix def % % Exit page (temporarily) to add fonts/characters. /XP { }def % % Resume page /RP { }def % % End Page: EP /EP {DVC$PSPage restore}def % % Purge fonts to reclaim VM /PF { currentoverprint currentrgbcolor EP %Does restore PageSetup %Does save setrgbcolor setoverprint }def % % ABBREVIATIONS /S /show load def /SV /save load def /RST /restore load def % /Yadjust {Ymax exch sub} def % /XY { % (x,y) POSITION ABSOLUTE Yadjust moveto } def % /X { % (x,0) POSITION ABSOLUTE currentpoint exch pop moveto } def % /Y { % (0,y) POSITION ABSOLUTE currentpoint pop exch Yadjust moveto } def % /xy { % (x,y) POSITION RELATIVE neg rmoveto } def % /x { % (x,0) POSITION RELATIVE 0 rmoveto } def % /y { % (0,y) POSITION RELATIVE 0 exch neg rmoveto } def % /R { % Draw a rectangle /ht exch def /wd exch def gsave currentpoint newpath moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto wd neg 0 rlineto closepath fill grestore wd 0 rmoveto }def % %Setup Page Media: PM /PM { /Xmax exch Resolution mul def /Ymax exch Resolution mul def /UNDERLAY where { pop /eps_save save def % save before EPSF underlay Resolution 72 div dup scale % Revert coords to points count array astore /DVCstack exch def % save op stack /dict_count countdictstack def % # of dicts userdict begin % default dict /showpage {}def % disable showpage 0 setgray {UNDERLAY} stopped {(Error executing /UNDERLAY)== quit}if countdictstack dict_count sub {end} repeat % clean up dict stack clear DVCstack aload pop % restore op stack eps_save restore % restore after EPSF }if PageSetup }def % %Setup page coordinates /PageSetup { /DVC$PSPage save def PortraitMode not {PaperWidth 0 translate 90 rotate} if /Xpos 0 def /Ypos 0 def }def % % Begin EPS file: SPB /SPB { Yadjust transform % convert from DVC to device coords EP % page-level restore /eps_save save def % save before EPSF Resolution 72 div dup scale % Revert coords to points itransform % convert position back to points translate % set position for EPSF PortraitMode not {90 rotate} if % rotate for EPSF count array astore /DVCstack exch def % save op stack /dict_count countdictstack def % # of dicts userdict begin % default dict /showpage {}def % disable showpage 0 setgray }def % % End EPS file /SPE { countdictstack dict_count sub {end} repeat % clean up dict stack clear DVCstack aload pop % restore op stack eps_save restore % restore after EPSF PageSetup % restore DVC coords }def % % Print-Page Routine: PP /PP { gsave showpage grestore }def % /DMF { % /font-name DMF exch findfont exch scalefont setfont }def % /concatnam { % /abcd (xxx) concatnam ==> /abcdxxx /xxx exch def /namstr exch cvsstr cvs def /newnam namstr length xxx length add string def newnam 0 namstr putinterval newnam namstr length xxx putinterval newnam cvn }def % /strip { % /abcdef 2 strip ==> /cdef /num exch def /nam exch def /namstr nam cvsstr cvs def /newlen namstr length num sub def namstr num newlen getinterval cvn }def % ROUTINES TO HANDLE PACKING/UNPACKING NUMBERS /PackHW { % PackHW --> /num exch def /pos exch def /target exch def num 16#0000FFFF and 1 pos sub 16 mul bitshift target or }def /PackByte { % PackByte --> /num exch def /pos exch def /target exch def num 16#000000FF and 3 pos sub 8 mul bitshift target or }def /UnpkHW { % UnpkHW --> /num exch def /pos exch def num 1 pos sub -16 mul bitshift 16#0000FFFF and dup 16#00007FFF gt {16#00010000 sub} if }def /UnpkByte { % UnpkByte --> /num exch def /pos exch def num 3 pos sub -8 mul bitshift 16#000000FF and dup 16#0000007F gt {16#00000100 sub} if }def % /ps-scalefont { % FOR PS FONTS, LOOK AT SIZE REQUESTED. IF IT HAS A DECIMAL REMAINDER % EQUIVALENT TO .001-.009 POINTS (I.E., .050-.450 VAXDOC UNITS), THAT'S % A FLAG TO STRETCH IT VERTICALLY BY ADDING 1-9 EXTRA POINTS TO THE % VERTICAL SCALING. % save requested size - as entered and as integer dup /x-size exch def cvi /x-int exch def % calc decimal remainder, mul x 1000, round x-size x-int sub 1000 mul round cvi /remainder exch def % see how we scale... remainder 50 lt remainder 450 gt or { % scale isomorphically /ystretch 0 def x-size scalefont } { % scale anamorphically /ystretch remainder def x-int ystretch add /y-size exch def [x-int 0 0 y-size 0 0] makefont } ifelse }def % /DPSF { % /procname size /fontname DPSF findfont exch ps-scalefont [ exch /setfont cvx ] cvx def }def % /PXLBuildCharDict 17 dict def /CMEncodingArray 256 array def 0 1 255 {CMEncodingArray exch dup cvsstr cvs cvn put} for /RasterConvert {RasterScaleFactor div}def /TransformBBox { aload pop /BB-ury exch def /BB-urx exch def /BB-lly exch def /BB-llx exch def [ BB-llx RasterConvert BB-lly RasterConvert BB-urx RasterConvert BB-ury RasterConvert ] }def /RunLengthToRasters { % none yet }def /GenerateRasters { % GENERATE RASTERS FOR "IMAGEMASK" rasters runlength 1 eq {RunLengthToRasters} if }def % /int-dict-name {int (-dict) concatnam}def /int-dict {int (-dict) concatnam cvx load}def % /DefinePXLFont { % ... % ...[llx lly urx ury]DefinePXLFont /newfont exch def /bb exch def /num exch def /psz exch def /dsz exch def /pxlmag exch def /ext exch def /int exch def /fnam ext (-) concatnam pxlmag cvsstr cvs concatnam def newfont not { int-dict-name 13 dict def int-dict begin /FontType 3 def /FontMatrix [ 1 dsz div 0 0 1 dsz div 0 0 ] def /FontBBox bb TransformBBox def /Encoding CMEncodingArray def /CharDict 1 dict def CharDict begin /Char-Info num array def end /BuildChar { PXLBuildCharDict begin /char exch def /fontdict exch def fontdict /CharDict get /Char-Info get char get aload pop /rasters exch def /PackedWord1 exch def 0 PackedWord1 UnpkHW 16#7FFF ne { /PackedWord2 exch def /wx 0 PackedWord1 UnpkHW def /rows 2 PackedWord1 UnpkByte def /cols 3 PackedWord1 UnpkByte def /llx 0 PackedWord2 UnpkByte def /lly 1 PackedWord2 UnpkByte def /urx 2 PackedWord2 UnpkByte def /ury 3 PackedWord2 UnpkByte def }{ %else /PackedWord2 exch def /PackedWord3 exch def /PackedWord4 exch def /wx 1 PackedWord1 UnpkHW def /rows 0 PackedWord2 UnpkHW def /cols 1 PackedWord2 UnpkHW def /llx 0 PackedWord3 UnpkHW def /lly 1 PackedWord3 UnpkHW def /urx 0 PackedWord4 UnpkHW def /ury 1 PackedWord4 UnpkHW def } ifelse rows 0 lt { /rows rows neg def /runlength 1 def }{ %else /runlength 0 def } ifelse wx 0 llx RasterConvert lly RasterConvert urx RasterConvert ury RasterConvert setcachedevice rows 0 ne { gsave cols rows true RasterScaleFactor 0 0 RasterScaleFactor neg llx .5 add neg ury .5 add tempmatrix astore GenerateRasters imagemask grestore } if end }def end fnam int-dict definefont pop } if int-dict-name fnam findfont psz scalefont def currentdict int [ int-dict /setfont cvx ] cvx put }def /PXLF { true DefinePXLFont}def % SIGNAL THAT FONT ALREADY LOADED /PXLNF {false DefinePXLFont}def % SIGNAL THAT FONT NOT ALREADY LOADED % /PXLC { % ... % ...PXLC /rasters exch def /runlength exch def /cols exch def /rows exch def /ury exch def /urx exch def /lly exch def /llx exch def /wx exch def /code exch def /int exch def % SEE IF LONG OR SHORT FORMAT IS REQUIRED true cols CKSZ rows CKSZ ury CKSZ urx CKSZ lly CKSZ llx CKSZ TackRunLengthToRows { int-dict /CharDict get /Char-Info get code [ 0 0 llx PackByte 1 lly PackByte 2 urx PackByte 3 ury PackByte 0 0 wx PackHW 2 rows PackByte 3 cols PackByte rasters ] put }{ %else int-dict /CharDict get /Char-Info get code [ 0 0 urx PackHW 1 ury PackHW 0 0 llx PackHW 1 lly PackHW 0 0 rows PackHW 1 cols PackHW 0 0 16#7FFF PackHW 1 wx PackHW rasters ] put } ifelse }def % /CKSZ {abs 127 le and}def /TackRunLengthToRows {runlength 0 ne {/rows rows neg def} if}def % /PLOTC { % PLOTC /rasters exch def /runlength exch def /cols exch def /rows exch def /ury exch def /urx exch def /lly exch def /llx exch def /psz exch def /dsz exch def /wx exch def % "PLOT" A CHARACTER'S RASTER PATTERN rows 0 ne { gsave currentpoint translate psz dsz div dup scale cols rows true RasterScaleFactor 0 0 RasterScaleFactor neg llx .5 add neg ury .5 add tempmatrix astore GenerateRasters imagemask grestore } if wx x }def % % set color routine: Color# SC /SC {ColorPalette exch get 1.0 setcustomcolor}bind def % %%EndProlog %%BeginSetup /PxlResolution 300 def /Resolution 3600 def /RasterScaleFactor PxlResolution Resolution div def /PortraitMode true def /PaperWidth 8.500 def /PaperHeight 11.000 def 72 Resolution div dup scale %> Postamble of file DISK$J:[GEOBALDI.MAILBOX.DOC]SWITCH.DVI_PS. % DefineFont:F153 Category:10 Pointsize:10 /NewCenturySchlbk-Bold /NewCenturySchlbk-Bold@DOCPSE DOCPSE ReENCODE /F153 500.0 /NewCenturySchlbk-Bold@DOCPSE DPSF % DefineFont:F152 Category:10 Pointsize:10 /NewCenturySchlbk-Italic /NewCenturySchlbk-Italic@DOCPSE DOCPSE ReENCODE /F152 500.0 /NewCenturySchlbk-Italic@DOCPSE DPSF % DefineFont:F151 Category:10 Pointsize:10 /NewCenturySchlbk-Roman /NewCenturySchlbk-Roman@DOCPSE DOCPSE ReENCODE /F151 500.0 /NewCenturySchlbk-Roman@DOCPSE DPSF % DefineFont:F106 Category:10 Pointsize:7 /Courier /Courier@DOCPSE DOCPSE ReENCODE /F106 350.0 /Courier@DOCPSE DPSF % DefineFont:F104 Category:10 Pointsize:8 /Courier-Bold /Courier-Bold@DOCPSE DOCPSE ReENCODE /F104 400.0 /Courier-Bold@DOCPSE DPSF % DefineFont:F103 Category:10 Pointsize:8 /Courier-Oblique /Courier-Oblique@DOCPSE DOCPSE ReENCODE /F103 400.0 /Courier-Oblique@DOCPSE DPSF % DefineFont:F102 Category:10 Pointsize:8 /F102 400.0 /Courier@DOCPSE DPSF % DefineFont:F42 Category:10 Pointsize:8 /Helvetica /Helvetica@DOCPSE DOCPSE ReENCODE /F42 400.0 /Helvetica@DOCPSE DPSF % DefineFont:F40 Category:10 Pointsize:9 /Helvetica-Bold /Helvetica-Bold@DOCPSE DOCPSE ReENCODE /F40 450.0 /Helvetica-Bold@DOCPSE DPSF % DefineFont:F38 Category:10 Pointsize:9 /F38 450.0 /Helvetica@DOCPSE DPSF % DefineFont:F36 Category:10 Pointsize:10 /F36 500.0 /Helvetica-Bold@DOCPSE DPSF % DefineFont:F35 Category:10 Pointsize:10 /Helvetica-Oblique /Helvetica-Oblique@DOCPSE DOCPSE ReENCODE /F35 500.0 /Helvetica-Oblique@DOCPSE DPSF % DefineFont:F34 Category:10 Pointsize:10 /F34 500.0 /Helvetica@DOCPSE DPSF % DefineFont:F28 Category:10 Pointsize:12 /F28 600.0 /Helvetica-Bold@DOCPSE DPSF % DefineFont:F25 Category:10 Pointsize:14 /Helvetica-BoldOblique /Helvetica-BoldOblique@DOCPSE DOCPSE ReENCODE /F25 700.0 /Helvetica-BoldOblique@DOCPSE DPSF % DefineFont:F24 Category:10 Pointsize:14 /F24 700.0 /Helvetica-Bold@DOCPSE DPSF % DefineFont:F23 Category:10 Pointsize:14 /F23 700.0 /Helvetica-Oblique@DOCPSE DPSF % DefineFont:F20 Category:10 Pointsize:18 /F20 900.0 /Helvetica-Bold@DOCPSE DPSF % DefineFont:F12 Category:10 Pointsize:30 /F12 1500.0 /Helvetica-Bold@DOCPSE DPSF %> Postamble of file SWITCH_CONTENTS. %Spot color array for this job /ColorPalette [ 0.0 0.0 0.0 1.0 (BLACK) findcmykcustomcolor ] def %%EndSetup % %%Page: (I) 1 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 10773 10524 XY F20(Guide)S 165 x(to)S 10773 11520 XY(EXTENDED)S 167 x(SWITCH)S 10773 14210 XY F36(September)S 166 x(1994)S 10773 16302 XY F34(This)S 166 x(manual)S 165 x(describes)S 166 x(the)S 166 x(installation)S 166 x(and)S 166 x(use)S 166 x(of)S 166 x(Extended)S 167 x(Switch.)S 10773 19590 XY F36(Revision/)S 2 x(Update)S 166 x(Information)S 2 x (:)S 798 x F34(This)S 166 x(is)S 166 x(a)S 166 x(revised)S 165 x(manual.)S 10773 X 897 y F36(Operating)S 167 x(System)S 166 x(and)S 166 x(V)S -27 x (ersion:)S 300 x F34(All)S 165 x(versions)S 166 x(of)S 166 x(VMS)S 10773 X 896 y F36(Software)S 166 x(V)S -27 x(ersion:)S 18546 X F34(Extended)S 167 x(Switch)S 166 x(V4.5-1)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Helvetica %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (II) 2 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 10773 25368 XY 8364 48 R 10773 25916 XY F40(September)S 167 x(15,)S 166 x(1994)S 10773 X 897 y F38(Permission)S 167 x(is)S 166 x(granted)S 167 x(to)S 166 x(copy)S 167 x(and)S 167 x(redistribute)S 166 x(this)S 166 x(documen)S 2 x(t)S 165 x(for)S 166 x(no)S 167 x(comme)S 2 x(rcial)S 165 x(gain.)S 10773 X 897 y(The)S 172 x(information)S 173 x(in)S 171 x (this)S 172 x(documen)S 2 x(t)S 171 x(is)S 172 x(subject)S 172 x(to)S 172 x(change)S 173 x(without)S 171 x(notice)S 172 x(and)S 173 x(should)S 172 x(not)S 10773 X 548 y(be)S 172 x(construed)S 173 x(as)S 171 x(a)S 172 x(commitmen)S 2 x(t)S 170 x(by)S 172 x(the)S 172 x(author)S -24 x (.)S 259 x(The)S 172 x(author)S 172 x(assume)S 2 x(s)S 171 x(no)S 172 x (respons)S 2 x(ibil)S -2 x(ity)S 10773 X 547 y(for)S 166 x(any)S 167 x (errors)S 168 x(that)S 165 x(may)S 167 x(appea)S 2 x(r)S 166 x(in)S 166 x(this)S 165 x(docum)S 2 x(ent.)S 10773 X 897 y F40(DISCLAI)S -2 x (MER:)S 184 x F38(The)S 183 x(software)S 183 x(described)S 185 x(in)S 182 x(this)S 183 x(docume)S 2 x(nt)S 182 x(is)S 183 x(provided)S 184 x (`)S -8 x(`)S F40(as)S 183 x(is)S F38(')S -9 x('.)S 282 x(No)S 10773 X 548 y(guaran)S 2 x(tee)S 162 x(is)S 162 x(made)S 163 x(by)S 163 x(the)S 162 x(author)S 163 x(as)S 163 x(to)S 162 x(the)S 162 x(suitabilit)S -2 x(y)S -33 x(,)S 163 x(reliabilit)S -2 x(y)S -33 x(,)S 163 x(security)S -33 x(,)S 162 x(usefulness,)S 164 x(or)S 10773 X 548 y(perform)S 2 x (ance)S 167 x(of)S 165 x(this)S 166 x(software.)S 10773 X 897 y(The)S 182 x(author)S 183 x(is)S 182 x(not)S 182 x(respons)S 2 x(ible)S 181 x (for)S 182 x(any)S 183 x(losses)S 182 x(that)S 182 x(may)S 183 x(occur)S 183 x(from)S 182 x(the)S 182 x(use)S 183 x(of)S 182 x(this)S 10773 X 548 y(software.)S 10773 X 896 y(The)S 178 x(foll)S -2 x(owing)S 177 x (are)S 178 x(tradema)S 2 x(rks)S 177 x(of)S 177 x(Digital)S 175 x(Equipmen)S 2 x(t)S 176 x(Corpora)S 2 x(tion:)S 270 x(DEC,)S 176 x(V)S -33 x(AX,)S 176 x(Alpha,)S 10773 X 548 y(AXP)S -58 x(,)S 166 x(and)S 167 x(VMS.)S 10773 X 897 y 3588 24 R 10773 35132 XY(Copyright)S 166 x(\251199)S 2 x (4)S 166 x(David)S 166 x(M.)S 166 x(Fabritius.)S 249 x(ALL)S 166 x(RIGHTS)S 165 x(RESER)S -9 x(VED.)S 14679 X 896 y(This)S 166 x(docum)S 2 x(ent)S 166 x(was)S 166 x(prepar)S 2 x(ed)S 166 x(using)S 167 x(V)S -33 x(AX)S 166 x(DOCUMENT)S -51 x(,)S 166 x(V)S -25 x(ersion)S 167 x(2.2.)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Helvetica %%PageProcessColors: %%PageCustomColors: (BLACK) % % < Beginning of included file SWITCH_CONTENTS.DVI_PS > %%Page: (III) 3 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 4546 XY 23160 48 R 5094 5520 XY F20(Contents)S 7187 6812 XY 21072 72 R 7187 7410 XY F36(PREF)S -27 x(ACE)S 27981 X(v)S 5094 9203 XY 23160 144 R 5094 9900 XY F28(CHAPTER)S 164 x(1)S 599 x(INST)S -45 x (ALLA)S -45 x(TION)S 166 x(INSTRUCTIONS)S 27260 X(1\2031)S 7187 11096 XY 21072 72 R 7187 11693 XY F36(1.1)S 9279 X(PREP)S -37 x(ARING)S 165 x (T)S -8 x(O)S 165 x(INST)S -36 x(ALL)S 167 x(EXTENDED)S 166 x(SWITCH)S 27427 X(1\2031)S 9279 X 698 y(1.1.1)S 11371 X(Prerequisite)S 167 x(Software)S 498 x 8556 24 R 27427 12391 XY(1\2031)S 9279 X 697 y(1.1.2)S 11371 X (Accessing)S 167 x(the)S 166 x(Online)S 167 x(Release)S 166 x(Notes)S 498 x 4980 24 R 27427 13088 XY(1\2031)S 9279 X 698 y(1.1.3)S 11371 X (Installati)S 2 x(on)S 167 x(Procedure)S 166 x(Requirements)S 499 x 4956 24 R 27427 13786 XY(1\2031)S 7187 14981 XY 21072 72 R 7187 15579 XY (1.2)S 9279 X(INST)S -36 x(ALLING)S 166 x(EXTENDED)S 166 x(SWITCH)S 27427 X(1\2031)S 9279 X 697 y(1.2.1)S 11371 X(Invokin)S 2 x(g)S 166 x (VMSINST)S -35 x(AL)S 498 x 8640 24 R 27427 16276 XY(1\2032)S 9279 X 698 y(1.2.2)S 11371 X(Installati)S 2 x(on)S 167 x(Options)S 499 x 9024 24 R 27427 16974 XY(1\2032)S 9279 X 697 y(1.2.3)S 11371 X(Disk)S 166 x(and)S 167 x(Directory)S 165 x(Selectio)S 2 x(n)S 498 x 6864 24 R 27427 17671 XY (1\2032)S 9279 X 697 y(1.2.4)S 11371 X(Adding)S 167 x(the)S 167 x(SWITCH)S 166 x(Command)S 167 x(and)S 166 x(Help)S 167 x(File)S 499 x 3012 24 R 27427 18368 XY(1\2033)S 9279 X 698 y(1.2.5)S 11371 X(Substituti)S 2 x (on)S 166 x(Selectio)S 2 x(n)S 498 x 8412 24 R 27427 19066 XY(1\2033)S 9279 X 697 y(1.2.6)S 11371 X(Unix-style)S 166 x(Directory)S 166 x(Separators)S 499 x 6192 24 R 27427 19763 XY(1\2033)S 9279 X 698 y(1.2.7)S 11371 X (The)S 167 x(Installatio)S 2 x(n)S 166 x(Completes)S 499 x 7308 24 R 27427 20461 XY(1\2034)S 7187 21656 XY 21072 72 R 7187 22254 XY(1.3)S 9279 X(POST)S -27 x(-INST)S -37 x(ALLA)S -36 x(TION)S 166 x(INFORMA)S -38 x(TION)S 27427 X(1\2034)S 9279 X 697 y(1.3.1)S 11371 X(Starting)S 167 x(Extended)S 167 x(Switch)S 499 x 7632 24 R 27427 22951 XY(1\2034)S 7187 24147 XY 21072 72 R 7187 24745 XY(1.4)S 9279 X(REGISTERING)S 166 x (YOUR)S 165 x(INST)S -36 x(ALLA)S -37 x(TION)S 27427 X(1\2034)S 5094 26538 XY 23160 144 R 5094 27235 XY F28(CHAPTER)S 164 x(2)S 599 x(REFER)S -2 x (ENCE)S 165 x(GUIDE)S 27260 X(2\2031)S 7187 28431 XY 21072 72 R 7187 29028 XY F36(2.1)S 9279 X(PREP)S -37 x(ARING)S 165 x(T)S -8 x(O)S 165 x(USE)S 166 x(EXTE)S 2 x(NDED)S 165 x(SWITCH)S 27427 X(2\2031)S 7187 30224 XY 21072 72 R 7187 30822 XY(2.2)S 9279 X(EXTENDED)S 166 x(SWITCH)S 167 x (BASICS)S 27427 X(2\2031)S 7187 32017 XY 21072 72 R 7187 32615 XY(2.3)S 9279 X(ADDITIONAL)S 165 x(FEA)S -36 x(TURES)S 27427 X(2\2031)S 9279 X 697 y(2.3.1)S 11371 X(Partial)S 167 x(Directory)S 166 x(Name)S 165 x (Matching)S 499 x 5952 24 R 27427 33312 XY(2\2032)S 9279 X 698 y(2.3.2)S 11371 X(Best-Guess)S 165 x(Directory)S 166 x(Name)S 165 x(Matching)S 500 x 4704 24 R 27427 34010 XY(2\2032)S 9279 X 697 y(2.3.3)S 11371 X (T)S -9 x(ild)S 2 x(e)S 166 x(Parameter)S 497 x 9948 24 R 27427 34707 XY (2\2033)S -416 x 36925 Y(iii)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (IV) 4 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Contents)S 9279 4872 XY F36(2.3.4)S 11371 X(Non-VMS)S 167 x(Speci\211catio)S 2 x(ns)S 498 x 7944 24 R 27427 4872 XY(2\2033)S 9279 X 697 y(2.3.5)S 11371 X(Devices)S 166 x(and)S 167 x(Concealed)S 167 x(Logical)S 2 x(s)S 498 x 5892 24 R 27427 5569 XY(2\2033)S 9279 X 698 y(2.3.6)S 11371 X(Default)S 166 x(History)S 498 x 10128 24 R 27427 6267 XY (2\2034)S 9279 X 697 y(2.3.7)S 11371 X(Updating)S 167 x(Y)S -36 x(our)S 166 x(Prompt)S 499 x 8364 24 R 27427 6964 XY(2\2035)S 9279 X 697 y(2.3.8)S 11371 X(Substituti)S 2 x(ons)S 499 x 10512 24 R 27427 7661 XY(2\2035)S 9279 X 698 y(2.3.9)S 11371 X(Complex)S 166 x(Subd)S 2 x(irectory)S 166 x (Speci\211cati)S 2 x(ons)S 498 x 4812 24 R 27427 8359 XY(2\2035)S 5094 10152 XY 23160 144 R 5094 10849 XY F28(APPEND)S -2 x(IX)S 166 x(A)S 598 x(EXTEN)S -2 x(DED)S 165 x(SWITCH)S 166 x(COMMAND)S 164 x(REFEREN)S -2 x(CE)S 27161 X(A\2031)S 11371 X 598 y F40(SWITCH)S 24745 X(A\2032)S 5094 13240 XY 23160 144 R 5094 13938 XY F28(APPEND)S -2 x(IX)S 166 x(B)S 598 x(SAMP)S -2 x(LE)S 166 x(INST)S -44 x(ALLA)S -45 x(TION)S 27161 X(B\2031)S 5094 36925 XY F36(iv)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % % < End of included file SWITCH_CONTENTS.DVI_PS > %%Page: (V) 5 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 4546 XY 23160 48 R 5094 5443 XY F20(Prefac)S -2 x(e)S 10773 7236 XY F151(Extended)S 177 x(Switch)S 176 x(is)S 175 x(a)S 177 x(VMS)S 176 x (utility)S 176 x(that)S 176 x(replaces)S 177 x(the)S 176 x(DCL)S 176 x (command)S 177 x(SET)S 10773 X 598 y(DEF)S -37 x(AUL)S -28 x(T)S -45 x (.)S 172 x(It)S 171 x(provides)S 171 x(all)S 172 x(of)S 171 x(the)S 172 x(functionality)S 172 x(of)S 172 x(the)S 171 x(original)S 173 x (command)S 171 x(as)S 10773 X 598 y(well)S 162 x(as)S 162 x(several)S 162 x(enhanc)S 2 x(ements)S 162 x(and)S 162 x(a)S 162 x(greatly)S 164 x (simpli\211ed)S 161 x(user)S 163 x(interface.)S 250 x(Both)S 10773 X 598 y(V)S -56 x(AX)S 166 x(and)S 166 x(Alpha)S 166 x(architectures)S 167 x(are)S 166 x(supported)S 166 x(by)S 166 x(Extended)S 166 x(Switch.)S 5094 9976 XY 23160 96 R 5094 10673 XY F24(Intended)S 166 x(Audience)S -533 x 897 y F151(This)S 193 x(manual)S 192 x(contains)S 193 x(both)S 193 x(installation)S 191 x(instructions)S 193 x(and)S 193 x(a)S 192 x (complete)S 10773 X 598 y(description)S 179 x(of)S 180 x(Extended)S 180 x(Switch.)S 276 x(The)S 180 x(section)S 179 x(describing)S 180 x (the)S 180 x(installation)S 10773 X 598 y(is)S 160 x(intended)S 161 x (for)S 160 x(VMS)S 160 x(system)S 160 x(managers.)S 250 x(The)S 161 x (section)S 160 x(describing)S 161 x(the)S 161 x(program)S 10773 X 597 y (itself)S 165 x(is)S 166 x(intended)S 166 x(for)S 166 x(gener)S 2 x (al)S 165 x(users.)S 5094 14310 XY 23160 96 R 5094 15007 XY F24(Acknowledgeme)S -2 x(nts)S -870 x 897 y F151(I)S 166 x(wish)S 166 x(to)S 167 x(thank)S 167 x(Hunter)S 167 x(Goatley)S 166 x(for)S 167 x(providing)S 168 x(a)S 166 x(working)S 167 x(model)S 167 x(upon)S 167 x(which)S 10773 X 598 y (this)S 173 x(documentation)S 173 x(is)S 173 x(based.)S 263 x(I)S 173 x (would)S 172 x(also)S 173 x(like)S 173 x(to)S 173 x(thank)S 174 x(Jon)S 173 x(Bohlke,)S 176 x(T)S -46 x(om)S 10773 X 597 y(Hopson,)S 182 x(T)S -46 x(om)S 178 x(McCormick,)S 183 x(and)S 178 x(Brian)S 178 x(Schenk)S 2 x(enberger)S 179 x(for)S 179 x(their)S 178 x(feedback)S 10773 X 598 y (and)S 166 x(assistance)S 166 x(in)S 166 x(developing)S 167 x(Extended)S 166 x(Switch.)S 27981 36925 XY F36(v)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (1-1) 6 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 2404 5875 XY F12(1)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Installation)S 165 x(Instruc)S -2 x(tions)S 10773 8652 XY F151(This)S 179 x(chapter)S 178 x(describes)S 178 x(the)S 178 x(installation)S 178 x(process)S 178 x (for)S 179 x(the)S 178 x(Extended)S 178 x(Switch)S 10773 X 598 y(utility)S -55 x(.)S 5094 10196 XY 23160 96 R 2404 10893 XY F24(1.1)S 5094 X(Preparing)S 167 x(to)S 166 x(Install)S 166 x(Extended)S 166 x(Switch)S 10773 X 897 y F151(This)S 176 x(section)S 176 x(describs)S 175 x(the)S 176 x(steps)S 174 x(which)S 176 x(should)S 176 x(be)S 176 x(taken)S 176 x(prior)S 176 x(to)S 176 x(installing)S 10773 X 598 y(Extended)S 166 x(Switch)S 166 x(V4.5-1.)S 5094 13583 XY 9564 48 R 2404 14281 XY F24(1.1.1)S 5094 X (Prerequisite)S 166 x(Software)S 10773 X 896 y F151(Extended)S 168 x (Switch)S 167 x(should)S 168 x(work)S 167 x(with)S 167 x(all)S 168 x (versions)S 167 x(of)S 168 x(VMS.)S 168 x(It)S 167 x(has)S 167 x(been)S 168 x(tested)S 10773 X 598 y(on)S 167 x(versions)S 166 x(4.7)S 166 x (and)S 167 x(above.)S 5094 16971 XY 9564 48 R 2404 17668 XY F24(1.1.2)S 5094 X(Accessing)S 165 x(the)S 166 x(Online)S 165 x(Releas)S -2 x(e)S 166 x(Notes)S 10773 X 897 y F151(Extended)S 180 x(Switch)S 180 x(provides)S 180 x(online)S 180 x(release)S 180 x(notes,)S 183 x(which)S 180 x(can)S 181 x(be)S 180 x(displayed)S 10773 X 597 y(or)S 183 x(printed)S 182 x (using)S 183 x(VMSINST)S -27 x(AL)S 182 x(with)S 182 x(the)S 182 x(OPTIONS)S 182 x(N)S 182 x(parameter)S -37 x(.)S 283 x(After)S 10773 X 598 y(the)S 195 x(installation,)S 203 x(the)S 195 x(release)S 195 x(notes)S 195 x (may)S 195 x(be)S 195 x(read)S 195 x(by)S 196 x(printing)S 196 x(the)S 195 x(\211le)S 10773 X 598 y(SYS$HELP:SWITCHvvn.RELEASE_NOTES,)S 183 x (where)S 183 x(`)S -9 x(`vvn')S -9 x(')S 184 x(denotes)S 183 x(the)S 10773 X 598 y(version)S 193 x(number)S 194 x(of)S 192 x(the)S 193 x (software.)S 302 x(For)S 193 x(example,)S 200 x(for)S 193 x(version)S 193 x(V4.5-1)S 193 x(of)S 10773 X 597 y(Extended)S 166 x(Switch,)S 166 x (the)S 167 x(\211le)S 166 x(name)S 166 x(would)S 166 x(be)S 166 x(SWITCH045.)S 5094 22749 XY 9564 48 R 2404 23446 XY F24(1.1.3)S 5094 X(Installation)S 166 x(Procedure)S 166 x(Requirements)S 10773 X 897 y F151(Before)S 178 x (installing)S 178 x(Extended)S 178 x(Switch,)S 180 x(ensure)S 179 x (that)S 177 x(the)S 178 x(following)S 178 x(privileges,)S 10773 X 598 y (resources,)S 167 x(and)S 166 x(requirements)S 167 x(are)S 166 x(met:)S 10773 X 896 y(\201)S 595 x(All)S 165 x(the)S 166 x(normal)S 167 x(privileges)S 166 x(and)S 167 x(quotas)S 165 x(of)S 166 x(the)S 167 x(default)S 166 x (SYSTEM)S 165 x(account.)S 10773 X 897 y(\201)S 595 x(Approximately)S 209 x(5)S 209 x(to)S 210 x(15)S 209 x(minutes,)S 220 x(depending)S 211 x (on)S 209 x(your)S 211 x(system)S 11670 X 598 y(con\211gu)S 2 x(ration,)S 166 x(distribution)S 166 x(medium,)S 167 x(and)S 166 x(options)S 166 x (selected.)S 10773 X 896 y(\201)S 595 x(Approximately)S 166 x(900)S 167 x(free)S 167 x(blocks)S 166 x(on)S 167 x(a)S 167 x(disk)S 166 x (for)S 167 x(use)S 167 x(during)S 167 x(the)S 167 x(installation)S 11670 X 598 y(procedure;)S 191 x(this)S 181 x(can)S 182 x(be)S 182 x(the)S 182 x (system)S 181 x(disk)S 182 x(or)S 182 x(a)S 181 x(disk)S 182 x(speci\211ed)S 182 x(with)S 181 x(the)S 11670 X 598 y(VMSINST)S -28 x(AL)S 166 x(A)S -46 x(WD)S 165 x(option.)S 10773 X 897 y(\201)S 595 x(Approximately)S 163 x(450)S 162 x(free)S 163 x(blocks)S 163 x(on)S 163 x(the)S 163 x (system)S 162 x(disk)S 163 x(for)S 163 x(a)S 162 x(full)S 163 x(installation)S 11670 X 597 y(including)S 167 x(source)S 167 x(code)S 166 x(and)S 166 x (related)S 166 x(\211les.)S 5094 32114 XY 23160 96 R 2404 32811 XY F24 (1.2)S 5094 X(Installing)S 166 x(Extended)S 166 x(Switch)S 10773 X 897 y F151(Extended)S 168 x(Switch)S 167 x(uses)S 167 x(VMSINST)S -28 x(AL)S 168 x(for)S 167 x(installation.)S 253 x(For)S 168 x(more)S 167 x(information)S 10773 X 598 y(on)S 168 x(how)S 167 x(to)S 167 x(use)S 168 x(VMSINST)S -28 x(AL,)S 168 x(read)S 167 x(the)S 168 x(chapter)S 167 x(on)S 168 x (installing)S 168 x(software)S 166 x(in)S 168 x(the)S 10773 X 597 y F152(VMS)S 171 x(System)S 172 x(Manage)S 2 x(r)S 27 x(')S -19 x(s)S 172 x(Manual)S F151(.)S 260 x(T)S -46 x(o)S 172 x(perform)S 171 x(the)S 171 x(installation,)S 173 x(log)S 171 x(into)S 172 x(the)S 10773 X 598 y (SYSTEM)S 166 x(account)S 166 x(or)S 167 x(another)S 167 x(suitably)S 166 x(privileged)S 166 x(accoun)S 2 x(t.)S 27427 36925 XY F36(1\2031)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ NewCenturySchlbk-Italic %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (1-2) 7 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Insta)S 2 x(llation)S 167 x(Instruction)S 2 x (s)S 5094 4546 XY 9564 48 R 2404 5244 XY F24(1.2.1)S 5094 X(Invoking)S 166 x(VMSINST)S -52 x(AL)S 10773 X 896 y F151(Invoke)S 167 x(VMSINST)S -28 x(AL)S 166 x(to)S 166 x(install)S 166 x(Extended)S 166 x(Switch.)S 10773 X 897 y F102($)S 239 x F104(@SYS$UPDATE:)S 2 x(VMSINSTAL)S 240 x (SWITCHvvn)S 240 x(ddcu:)S 10773 X 897 y F151(Substitute)S 166 x(the)S 166 x(appropriate)S 166 x(values)S 166 x(for)S 166 x F152(vvn)S 166 x F151(and)S 166 x F152(ddcu)S F151(.)S 12925 9129 XY F102(VAX/VMS)S 240 x (Software)S 240 x(Product)S 240 x(Installation)S 240 x(Procedure)S 240 x (Vv.n)S 10773 X 747 y(It)S 239 x(is)S 240 x(DD-MMM-YYYY)S 240 x(at)S 239 x(hh:mm.)S 10773 X 449 y(Enter)S 240 x(a)S 239 x(question)S 240 x (mark)S 239 x(\(?\))S 240 x(at)S 239 x(any)S 240 x(time)S 239 x(for)S 239 x(help.)S 10773 X 896 y F151(If)S 173 x(there)S 174 x(are)S 174 x (any)S 175 x(users)S 173 x(logged)S 175 x(into)S 173 x(the)S 174 x(system,)S 176 x(the)S 173 x(following)S 174 x(message)S 173 x(will)S 10773 X 598 y (be)S 166 x(displayed:)S 10773 X 897 y F102(%VMSINSTAL-W-A)S 2 x(CTIVE,)S 239 x(The)S 240 x(following)S 240 x(processes)S 240 x(are)S 239 x(still)S 240 x(active:)S 10773 X 448 y F103(...process)S 240 x(names...)S 10773 X 897 y F151(Extended)S 175 x(Switch)S 175 x(may)S 175 x(be)S 175 x(installed)S 175 x(while)S 174 x(users)S 175 x(are)S 176 x(logged)S 176 x(in,)S 177 x (although)S 177 x(it)S 10773 X 598 y(will)S 178 x(not)S 180 x(be)S 179 x (available)S 179 x(as)S 178 x(a)S 179 x(command)S 179 x(verb)S 180 x (until)S 180 x(they)S 179 x(log)S 180 x(out)S 179 x(and)S 179 x(back)S 180 x(in)S 10773 X 597 y(again.)S 10773 X 897 y F102(*)S 239 x(Do)S 240 x(you)S 239 x(want)S 240 x(to)S 239 x(continue)S 240 x(anyway)S 240 x([NO]?)S 239 x F104(YES)S 10773 X 897 y F102(*)S 239 x(Are)S 240 x (you)S 239 x(satisfied)S 240 x(with)S 240 x(the)S 239 x(backup)S 240 x (of)S 239 x(your)S 240 x(system)S 239 x(disk)S 240 x([YES]?)S 339 x -267 y 1512 24 R 25936 X 355 y 24 360 R 26062 17030 XY F106(Return)S 107 x 108 y 24 360 R 25936 X 20 y 1512 24 R 10773 17946 XY F151(Answer)S 166 x(NO)S 165 x(to)S 166 x(abort)S 166 x(the)S 166 x(installation)S 166 x(if)S 166 x(it)S 165 x(is)S 166 x(necessary)S 166 x(to)S 166 x (perform)S 166 x(a)S 166 x(backup.)S 5094 19142 XY 9564 48 R 2404 19839 XY F24(1.2.2)S 5094 X(Installation)S 166 x(Options)S -804 x 897 y F151 (The)S 167 x(next)S 167 x(question)S 166 x(is:)S 10773 X 896 y F102 (*)S 239 x(Do)S 240 x(you)S 239 x(want)S 240 x(to)S 239 x(purge)S 239 x (files)S 240 x(replaced)S 240 x(by)S 239 x(this)S 240 x(installation)S 240 x([YES]?)S 340 x -266 y 1512 24 R 26654 X 355 y 24 360 R 26779 21612 XY F106(Return)S 107 x 109 y 24 360 R 26654 X 20 y 1512 24 R 10773 22529 XY F151(If)S 175 x(this)S 174 x(is)S 175 x(the)S 175 x(\211rst)S 175 x (installation)S 175 x(of)S 175 x(Extended)S 175 x(Switch,)S 177 x(answering)S 176 x(NO)S 174 x(to)S 175 x(this)S 10773 X 598 y(question)S 176 x(can)S 177 x(save)S 176 x(some)S 175 x(time)S 176 x(when)S 176 x(the)S 176 x (Extended)S 176 x(Switch)S 176 x(\211les)S 176 x(are)S 176 x(moved)S 10773 X 598 y(into)S 166 x(their)S 167 x(directories.)S\ ~ SWITCH045.A/![FABRITIUS.ESW.SWITCH]SWITCH.PS;1K|F 5094 24920 XY 9564 48 R 2404 25617 XY F24(1.2.3)S 5094 X(Disk)S 165 x(and)S 166 x (Directory)S 166 x(Selection)S 10773 X 897 y F151(T)S -45 x(o)S 175 x (install)S 174 x(the)S 175 x(source)S 176 x(code,)S 178 x(documentation,)S 178 x(and/or)S 176 x(help)S 175 x(\211les)S 175 x(for)S 175 x(Extended)S 10773 X 598 y(Switch,)S 186 x(a)S 181 x(target)S 182 x(directory)S 182 x (is)S 181 x(created)S 182 x(during)S 183 x(the)S 181 x(installation)S 181 x(procedure.)S 10773 X 598 y(Additionally)S -55 x(,)S 177 x(the)S 174 x(following)S 175 x(three)S 175 x(\211les)S 174 x(will)S 174 x(be)S 174 x(installed)S 174 x(to)S 175 x(make)S 174 x(Extended)S 10773 X 597 y (Switch)S 166 x(available)S 166 x(to)S 166 x(all)S 166 x(users)S 165 x (of)S 166 x(the)S 167 x(system:)S 10773 X 897 y(\201)S 595 x(The)S 260 x (executable)S 260 x(image.)S 437 x(Normally)S 259 x(installed)S 259 x (in)S 11670 X 598 y(SYS$CO)S -2 x(MMON:[SYSEXE].)S 10773 X 896 y(\201)S 595 x(The)S 166 x(startup)S 166 x(\211le.)S 250 x(Installed)S 165 x (in)S 167 x(SYS$MANA)S -2 x(GER.)S 10773 X 897 y(\201)S 595 x(The)S 166 x(release)S 166 x(notes.)S 250 x(Installed)S 165 x(in)S 166 x(SYS$HELP)S -64 x(.)S 10773 32541 XY F102(*)S 239 x(Do)S 240 x(you)S 239 x(wish)S 240 x(to)S 239 x(install)S 240 x(the)S 239 x(source)S 240 x(files)S 239 x([YES]?)S 340 x -266 y 1512 24 R 22589 X 355 y 24 360 R 22714 32522 XY F106(Return)S 107 x 108 y 24 360 R 22589 X 20 y 1512 24 R 10773 32990 XY F102(*)S 239 x(Directory)S 240 x(for)S 240 x(source)S 239 x(files?)S 240 x([SYS$COMMON:[)S 2 x(SYSMGR.SWITCH]]:)S 340 x -267 y 1512 24 R 25219 X 355 y 24 360 R 25344 32970 XY F106(Retur)S 2 x(n)S 105 x 108 y 24 360 R 25219 X 20 y 1512 24 R 10773 33737 XY F102(*)S 239 x(Directory)S 240 x(for)S 240 x(image)S 239 x(file?)S 240 x([SYS$COMMON:[SY)S 2 x (SEXE]]:)S 339 x -267 y 1512 24 R 23067 X 355 y 24 360 R 23193 33717 XY F106(Return)S 106 x 108 y 24 360 R 23067 X 20 y 1512 24 R 5094 36925 XY F36(1\2032)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier Courier-Bold NewCenturySchlbk-Italic %%+ Courier-Oblique %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (1-3) 8 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 21515 1807 XY F28(Installa)S 2 x(tion)S 167 x(Instructions)S 5094 4546 XY 9564 48 R 2404 5244 XY F24(1.2.4)S 5094 X(Adding)S 166 x(the)S 166 x (SWITCH)S 166 x(Command)S 165 x(and)S 166 x(Help)S 166 x(File)S 10773 X 896 y F151(T)S -45 x(o)S 192 x(make)S 193 x(Extended)S 192 x(Switch)S 192 x(and)S 193 x(its)S 192 x(help)S 193 x(available)S 192 x(to)S 192 x (all)S 193 x(users)S 192 x(in)S 193 x(the)S 10773 X 598 y(same)S 178 x (way)S 179 x(that)S 178 x(DEC)S 177 x(layered)S 179 x(products)S 179 x (are,)S 182 x(answer)S 178 x(YES)S 178 x(to)S 178 x(the)S 179 x(following)S 10773 X 598 y(questions.)S 253 x(If)S 168 x(Extended)S 168 x(Switch)S 168 x(is)S 167 x(not)S 168 x(added)S 168 x(to)S 168 x(the)S 168 x(DCL)S -28 x(T)S -27 x(ABLES,)S 167 x(it)S 168 x(may)S 168 x(be)S 10773 X 598 y (de\211ned)S 167 x(as)S 165 x(a)S 166 x(foreign)S 167 x(command.)S 10773 X 896 y F102(*)S 239 x(Do)S 240 x(you)S 239 x(wish)S 240 x(to)S 239 x (add)S 239 x(the)S 240 x(SWITCH)S 239 x(command)S 240 x(to)S 240 x(the)S 239 x(DCLTABLES)S 240 x([YES]?)S 339 x -266 y 1512 24 R 26175 X 355 y 24 360 R 26301 8810 XY F106(Return)S 107 x 109 y 24 360 R 26175 X 20 y 1512 24 R 10773 9578 XY F102(*)S 239 x(Do)S 240 x(you)S 239 x(wish)S 240 x(to)S 239 x(add)S 239 x(SWITCH)S 240 x(to)S 239 x(a)S 240 x(help)S 239 x(library)S 240 x([YES]?)S 339 x -267 y 1512 24 R 23545 X 355 y 24 360 R 23671 9558 XY F106(Return)S 107 x 108 y 24 360 R 23545 X 20 y 1512 24 R 10773 10474 XY F151(Enter)S 188 x(the)S 188 x(name)S 187 x (of)S 188 x(the)S 188 x(help)S 188 x(library)S 188 x(into)S 188 x(which)S 188 x(the)S 187 x(help)S 188 x(for)S 188 x(Extended)S 10773 X 598 y (Switch)S 166 x(should)S 166 x(be)S 166 x(installed.)S 11251 X 897 y F102(The)S 240 x(follow)S 239 x(is)S 240 x(a)S 239 x(list)S 239 x(of)S 240 x(some)S 239 x(of)S 240 x(the)S 239 x(available)S 240 x(libraries)S 240 x(into)S 240 x(which)S 239 x(the)S 240 x(help)S 11251 X 448 y(file)S 240 x(for)S 239 x(Extended)S 240 x(Switch)S 240 x(may)S 239 x(be)S 240 x (installed:)S 12686 X 747 y(SYS$SYSROOT:[SYS)S 2 x(HLP]HELPLIB.HLB)S 10773 X 747 y(*)S 239 x(Which)S 240 x(library)S 240 x(do)S 239 x(you)S 239 x(wish)S 240 x(to)S 239 x(use?)S 240 x([SYS$SYSROOT:[SYS)S 2 x(HLP]HELPLIB.HLB]:)S 340 x -267 y 1512 24 R 27849 X 356 y 24 360 R 27975 13891 XY F106(Return)S 107 x 109 y 24 360 R 27849 X 20 y 1512 24 R 5094 15107 XY 9564 48 R 2404 15804 XY F24(1.2.5)S 5094 X(Substitution)S 167 x(Selection)S 10773 X 897 y F151(At)S 181 x(this)S 182 x(point,)S 186 x(the)S 182 x(substitutions)S 181 x(which)S 183 x(Extended)S 182 x(Switch)S 181 x(is)S 182 x(to)S 181 x(make)S 182 x(are)S 10773 X 598 y(de\211ned.)S 273 x(Additional)S 177 x(information)S 178 x(concern)S 2 x(ing)S 178 x(substitions)S 177 x (may)S 177 x(be)S 178 x(found)S 178 x(in)S 10773 X 597 y(Section)S 167 x (2.3.8.)S 253 x(Simply)S 166 x(enter)S 168 x(the)S 167 x(substitutions)S 166 x(to)S 167 x(be)S 167 x(made)S 167 x(or)S 167 x(press)S 167 x -380 y 1440 24 R 26155 X 492 y 24 492 R 26274 17876 XY F42(Retur)S -2 x(n)S 100 x 132 y 24 492 R 26155 X 20 y 1440 24 R 27757 17896 XY F151(to)S 10773 X 598 y(continue)S 167 x(the)S 166 x(installation.)S 10773 X 897 y F102(*)S 239 x(Do)S 240 x(you)S 239 x(want)S 240 x(Extended)S 239 x (Switch)S 240 x(to)S 240 x(make)S 239 x(logical)S 240 x(name)S 239 x (substitutio)S 2 x(ns)S 239 x([YES]?)S 339 x -267 y 1512 24 R 28088 X 355 y 24 360 R 28214 19371 XY F106(Return)S 107 x 108 y 24 360 R 28088 X 20 y 1512 24 R 10773 20138 XY F102(*)S 239 x(Specificatio)S 2 x(n)S 239 x(to)S 239 x(be)S 239 x(substituted)S 2 x(:)S 239 x F104(DISK$SYS3140:[MANA)S 2 x(GER.])S 10773 X 448 y F102(*)S 239 x(Logical)S 240 x(name)S 240 x (to)S 239 x(be)S 239 x(used)S 240 x(in)S 239 x(its)S 240 x(place:)S 239 x F104(MICRO$MGR)S 10773 X 747 y F102(*)S 239 x(Specificatio)S 2 x (n)S 239 x(to)S 239 x(be)S 239 x(substituted)S 2 x(:)S 338 x -266 y 1512 24 R 19241 X 355 y 24 360 R 19367 21314 XY F106(Return)S 107 x 108 y 24 360 R 19241 X 20 y 1512 24 R 10773 22230 XY F151(The)S 179 x (substitutions)S 177 x(are)S 178 x(then)S 178 x(redisplayed)S 178 x (for)S 178 x(veri\211cation.)S 274 x(Answering)S 178 x(YES)S 10773 X 598 y(will)S 181 x(accept)S 181 x(the)S 181 x(substitutions)S 180 x (as)S 181 x(shown.)S 280 x(Answering)S 181 x(NO)S 181 x(will)S 180 x (restart)S 181 x(the)S 10773 X 598 y(de\211nition)S 167 x(process.)S 11251 X 896 y F102(You)S 240 x(have)S 239 x(defined)S 240 x(the)S 239 x (following)S 241 x(substitutions:)S 11251 X 747 y(DISK$SYS3140)S 2 x (:[MANAGER.])S 240 x(=)S 239 x(MICRO$MGR)S 10773 X 748 y(*)S 239 x(Are)S 240 x(these)S 239 x(substitution)S 2 x(s)S 239 x(correct)S 240 x([YES]?)S 339 x -267 y 1512 24 R 20676 X 355 y 24 360 R 20802 25797 XY F106(Return)S 106 x 108 y 24 360 R 20676 X 20 y 1512 24 R 5094 27012 XY 9564 48 R 2404 27710 XY F24(1.2.6)S 5094 X(Unix-style)S 165 x(Directory)S 166 x (Separators)S 10773 X 896 y F151(The)S 177 x(last)S 176 x(question)S 176 x(which)S 177 x(is)S 176 x(asked)S 176 x(concerns)S 177 x(the)S 177 x(use)S 176 x(of)S 177 x(forward)S 176 x(slashes)S 175 x(as)S 10773 X 598 y(directory)S 178 x(separators.)S 271 x(While)S 177 x(this)S 177 x (is)S 176 x(the)S 178 x(way)S 177 x(of)S 177 x(things)S 177 x(in)S 178 x (the)S 177 x(Unix)S 178 x(world,)S 10773 X 598 y(this)S 169 x(is)S 168 x F153(not)S 169 x F151(how)S 169 x(VMS)S 169 x(works.)S 254 x(The)S 170 x (DCL)S 168 x(command)S 169 x(languag)S 2 x(e)S 168 x(interpreter)S 170 x (can)S 10773 X 598 y(be)S 177 x(forced)S 178 x(to)S 177 x(accept)S 177 x (forward)S 177 x(slashes)S 176 x(as)S 177 x(part)S 177 x(of)S 177 x (a)S 177 x(parameter)S -37 x(,)S 181 x(but)S 177 x(doing)S 178 x(so)S 10773 X 597 y(limits)S 165 x(where)S 167 x(valid)S 166 x(quali\211ers)S 167 x(may)S 166 x(be)S 166 x(placed)S 166 x(on)S 167 x(the)S 166 x(command)S 167 x(line)S 166 x(and)S 167 x(what)S 10773 X 598 y(error)S 167 x(checking)S 168 x(the)S 166 x(CLI)S 166 x(can)S 166 x(do.)S 10773 X 897 y(Each)S 174 x(site)S 172 x(must)S 173 x(weigh)S 174 x(the)S 173 x(advantages)S 174 x(and)S 174 x(disadvantages)S 173 x(associated)S 172 x(with)S 10773 X 597 y(providing)S 167 x(this)S 166 x(feature)S 166 x(and)S 167 x(decide)S 166 x(whether)S 166 x(or)S 166 x(not)S 167 x(it)S 165 x(is)S 166 x(appropriate.)S 10773 X 897 y F102(*)S 239 x(Do)S 240 x(you)S 239 x(wish)S 240 x(to)S 239 x(accept)S 240 x(Unix-style)S 240 x(directory)S 240 x(separators)S 240 x([NO]?)S 339 x -267 y 1512 24 R 25697 X 355 y 24 360 R 25823 33966 XY F106(Return)S 107 x 108 y 24 360 R 25697 X 20 y 1512 24 R 27427 36925 XY F36(1\2033)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier Helvetica Courier-Bold NewCenturySchlbk-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (1-4) 9 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Insta)S 2 x(llation)S 167 x(Instruction)S 2 x (s)S 5094 4546 XY 9564 48 R 2404 5244 XY F24(1.2.7)S 5094 X(The)S 166 x (Installation)S 166 x(Completes)S 10773 X 896 y F151(After)S 168 x(the)S 169 x(con\211gur)S 2 x(ation)S 168 x(questions,)S 169 x(the)S 169 x (installation)S 168 x(completes)S 168 x(in)S 168 x(accordance)S 10773 X 598 y(with)S 191 x(the)S 191 x(given)S 193 x(input.)S 300 x(Files)S 191 x(are)S 192 x(copied)S 191 x(from)S 191 x(the)S 191 x(installation)S 191 x(kit,)S 198 x(the)S 10773 X 598 y(Extended)S 186 x(Switch)S 185 x (image)S 185 x(is)S 185 x(compiled)S 185 x(and)S 186 x(linked,)S 191 x (and)S 186 x(all)S 185 x(installed)S 185 x(\211les)S 10773 X 598 y(are)S 173 x(copied)S 173 x(to)S 172 x(their)S 173 x(destination)S 172 x(directories.)S 263 x(Informational)S 173 x(messages)S 172 x(about)S 10773 X 598 y(the)S 166 x(individual)S 167 x(components)S 166 x(are)S 167 x(displayed)S 165 x(when)S 167 x(appropriate.)S 5094 9478 XY 23160 96 R 2404 10175 XY F24(1.3)S 5094 X(Post-Installation)S 166 x(Information)S 10773 X 897 y F151(This)S 166 x(section)S 166 x(contains)S 167 x(startup)S 165 x(information)S 166 x(for)S 167 x(Extended)S 166 x(Switch.)S 5094 12267 XY 9564 48 R 2404 12965 XY F24(1.3.1)S 5094 X(Starting)S 167 x(Extended)S 166 x(Switch)S 10773 X 897 y F151(Once)S 170 x(the)S 170 x(installation)S 169 x(is)S 169 x(complete,)S 171 x(Extended)S 170 x(Switch)S 169 x(can)S 171 x (be)S 169 x(used)S 170 x(by)S 170 x(simply)S 10773 X 597 y(entering)S 167 x(the)S 167 x(SWITCH)S 165 x(command.)S 10773 X 897 y(T)S -45 x (o)S 191 x(make)S 193 x(all)S 191 x(features)S 192 x(of)S 192 x(Extended)S 192 x(Switch)S 191 x(automatically)S 192 x(available)S 192 x(at)S 10773 X 598 y(system)S 174 x(startup,)S 176 x(add)S 175 x(a)S 174 x(line)S 175 x (similar)S 173 x(to)S 174 x(the)S 175 x(following)S 174 x(to)S 175 x (the)S 174 x(system)S 174 x(startup)S 10773 X 597 y(procedure:)S 10773 X 897 y F102($)S 239 x(@SYS$MANAGER)S 2 x(:SWITCH_STARTUP.COM)S 10773 X 897 y F151(This)S 175 x(will)S 174 x(install)S 174 x(the)S 175 x(Extended)S 175 x(Switch)S 174 x(image)S 175 x(with)S 174 x(the)S 175 x(SYSPR)S -20 x(V)S 175 x(privilege.)S 10773 X 597 y(This)S 172 x(is)S 171 x(used)S 171 x F152(only)S 172 x F151(to)S 171 x(allow)S 171 x(users)S 171 x (to)S 172 x(read)S 171 x(the)S 172 x(home)S 172 x(directory)S 172 x (of)S 171 x(other)S 172 x(users)S 10773 X 598 y(out)S 166 x(of)S 166 x (the)S 167 x(authorization)S 166 x(\211le.)S 5094 20487 XY 23160 96 R 2404 21184 XY F24(1.4)S 5094 X(Registering)S 166 x(Y)S -52 x(our)S 167 x (Installation)S 10773 X 897 y F151(Extended)S 158 x(Switch)S 158 x(is)S 157 x(freely)S 159 x(distributable)S 157 x(software,)S 159 x(and)S 158 x (no)S 158 x(license)S 158 x(is)S 158 x(required)S 10773 X 597 y(to)S 167 x(use)S 167 x(it.)S 250 x(Registration)S 167 x(of)S 167 x(your)S 168 x(installation)S 166 x(is)S 166 x(at)S 167 x(your)S 168 x(discretion)S 167 x(and)S 167 x(is)S 166 x(used)S 10773 X 598 y(by)S 168 x(the)S 168 x (author)S 168 x(only)S 169 x(to)S 167 x(determine)S 168 x(the)S 168 x (size)S 166 x(of)S 168 x(the)S 168 x(Extended)S 168 x(Switch)S 167 x (user)S 168 x(base)S 10773 X 598 y(and)S 166 x(the)S 167 x(future)S 166 x(directions)S 166 x(for)S 166 x(the)S 167 x(program.)S 10773 X 897 y(T)S -45 x(o)S 204 x(register)S -37 x(,)S 215 x(simply)S 204 x (send)S 204 x(a)S 204 x(note)S 205 x(to)S 204 x(the)S 204 x(author)S 205 x(with)S 204 x(the)S 204 x(following)S 10773 X 597 y(information:)S 11670 X 897 y(Installer)S 27 x(')S -19 x(s)S 166 x(name)S 11670 X 598 y (Company)S 166 x(name)S 166 x(and)S 167 x(address)S 11670 X 598 y(System\(s\))S 165 x(on)S 166 x(which)S 167 x(the)S 166 x(Extended)S 166 x(Switch)S 166 x(is)S 165 x(runn)S 2 x(ing)S 11670 X 597 y(Any)S 166 x(comments)S 166 x(and/or)S 167 x(suggestions)S 166 x(you)S 167 x(might)S 167 x(have)S 10773 29154 XY(Y)S -56 x(ou)S 173 x(can)S 173 x(send)S 173 x(it)S 172 x (electronically)S 174 x(to:)S 262 x F153(FabritDM@CS.Rose-Hulman.)S 2 x(Edu)S F151(,)S 175 x(or)S 10773 X 598 y(by)S 167 x(mail)S 165 x (to)S 166 x(the)S 166 x(following)S 166 x(address:)S 11670 X 897 y(David)S 166 x(Fabritius)S 11670 X 597 y(1001)S 166 x(4th)S 166 x(A)S -37 x(venue,)S 167 x(Suite)S 166 x(2830)S 11670 X 598 y(Seattle,)S 166 x(W)S -47 x (A)S 166 x(98154)S 11670 X 598 y(USA)S 5094 36925 XY F36(1\2034)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier NewCenturySchlbk-Italic NewCenturySchlbk-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-1) 10 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 2404 5875 XY F12(2)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Referenc)S -2 x(e)S 166 x(Guide)S 10773 8652 XY F151(This)S 176 x(chapter)S 176 x (describes)S 175 x(Extended)S 176 x(Switch,)S 178 x(its)S 175 x(uses,)S 178 x(and)S 176 x(its)S 175 x(enhancemen)S 2 x(ts)S 10773 X 598 y(over)S 189 x(the)S 188 x(DCL)S 187 x(command)S 188 x(SET)S 188 x(DEF)S -38 x (AUL)S -27 x(T)S -46 x(.)S 189 x(Examples)S 187 x(demostrating)S 188 x (the)S 10773 X 597 y(various)S 167 x(features)S 166 x(are)S 166 x(also)S 165 x(provided.)S 5094 10794 XY 23160 96 R 2404 11491 XY F24(2.1)S 5094 X (Preparing)S 167 x(to)S 166 x(Use)S 165 x(Extended)S 166 x(Switch)S 10773 X 897 y F151(Extended)S 186 x(Switch)S 184 x(may)S 186 x(be)S 185 x(installed)S 185 x(in)S 185 x(the)S 185 x(system-wide)S 184 x(DCL)S 185 x(command)S 10773 X 598 y(tables)S 196 x(or)S 197 x(may)S 197 x (be)S 197 x(provided)S 198 x(as)S 196 x(a)S 197 x(foreign)S 198 x(command.)S 311 x(If)S 196 x(the)S 197 x(SWITCH)S 10773 X 597 y(command)S 180 x (is)S 179 x(not)S 179 x(automatically)S 180 x(available,)S 183 x(it)S 179 x(may)S 180 x(be)S 179 x(de\211ned)S 180 x(as)S 179 x(a)S 179 x (foreign)S 10773 X 598 y(command)S 166 x(as)S 166 x(follows:)S 10773 X 897 y F102($)S 239 x F104(SW*ITCH)S 240 x(:==)S 240 x($SWITCH$EXE:SWITCH)S 10773 X 896 y F151(Any)S 166 x(symbol)S 166 x(name)S 165 x(may)S 166 x (be)S 166 x(used)S 165 x(in)S 166 x(place)S 166 x(of)S 165 x(SW*ITCH,)S 166 x(including)S 167 x(CD,)S 165 x(SD,)S 165 x(or)S 10773 X 598 y(other)S 165 x(popular)S 165 x(favorites.)S 249 x(Also,)S 165 x(any)S 165 x(desired)S 164 x(quali\211ers)S 165 x(may)S 165 x(be)S 164 x(added,)S 165 x(such)S 165 x(as)S 10773 X 598 y(/UPDA)S -27 x(TE_PROMPT/LINE_FEED.)S 5094 18199 XY 23160 96 R 2404 18897 XY F24(2.2)S 5094 X(Extended)S 166 x(Switch)S 166 x(Basics)S 10773 X 896 y F151(Extended)S 187 x(Switch)S 186 x(gives)S 188 x(the)S 187 x(VMS)S 186 x(user)S 187 x(an)S 187 x(easy)S 187 x(and)S 187 x(conven)S 2 x(ient)S 186 x(way)S 187 x(to)S 10773 X 598 y(navigate)S 195 x(among)S 195 x(available)S 195 x(devices)S 194 x(and)S 195 x(directories.)S 306 x(Unlike)S 195 x(the)S 194 x(DCL)S 10773 X 598 y(command)S 173 x (SET)S 173 x(DEF)S -37 x(AUL)S -28 x(T)S -46 x(,)S 174 x(Extended)S 173 x(Switch)S 173 x(uses)S 172 x(a)S 173 x(very)S 175 x(simple,)S 174 x (straight-)S 10773 X 598 y(forward)S 188 x(syntax.)S 295 x(For)S 188 x (example,)S 195 x(to)S 188 x(switch)S 188 x(to)S 188 x(a)S 188 x(subdirectory)S 189 x(using)S 189 x(SET)S 10773 X 597 y(DEF)S -37 x(AUL)S -28 x(T)S -45 x(,)S 166 x(the)S 166 x(command)S 167 x(is)S 165 x(given)S 167 x (as:)S 10773 X 897 y F102($)S 239 x F104(SET)S 240 x(DEFAULT)S 240 x ([.SUBDIRECTORY])S 10773 X 897 y F151(This)S 169 x(is)S 168 x(very)S 170 x(cumbersome)S 169 x(and)S 169 x(confusing)S 2 x(,)S 170 x(especially)S 168 x(to)S 169 x(new)S 169 x(users;)S 170 x(and)S 169 x(even)S 10773 X 597 y(experienced)S 171 x(users)S 171 x(must)S 169 x(contend)S 171 x (with)S 170 x(entering)S 171 x(this)S 170 x(awkard)S 170 x(syntax.)S 259 x(Using)S 10773 X 598 y(Extended)S 166 x(Switch)S 166 x(makes)S 166 x(this)S 166 x(much)S 166 x(easier)S -37 x(,)S 167 x(simply)S 166 x (enter)S 166 x(the)S 166 x(command:)S 10773 X 897 y F102($)S 239 x F104 (SWITCH)S 240 x(SUBDIRECTORY)S 10773 X 896 y F151(T)S -45 x(o)S 174 x (switch)S 174 x(down)S 174 x(several)S 175 x(subdirectory)S 175 x(levels,)S 177 x(use)S 175 x(dots)S 174 x(\(or)S 174 x(backslashes,)S 177 x(see)S 10773 X 598 y(Section)S 166 x(2.3.4\))S 167 x(as)S 166 x(separators.)S 10773 X 897 y F102($)S 239 x F104(SWITCH)S 240 x(SUB1.SUB2.SUB3)S 5094 29656 XY 23160 96 R 2404 30354 XY F24(2.3)S 5094 X(Additional)S 166 x(Features)S -804 x 896 y F151(Ease)S 196 x(of)S 196 x(use)S 196 x(is)S 196 x(a)S 196 x(primary)S 197 x(advantage)S 197 x(provided)S 197 x(by)S 197 x (Extended)S 196 x(Switch.)S 10773 X 598 y(However)S -36 x(,)S 200 x (a)S 193 x(simpli\211ed)S 193 x(syntax)S 193 x(is)S 193 x(only)S 194 x (a)S 193 x(small)S 193 x(part)S 193 x(of)S 193 x(what)S 192 x(makes)S 193 x(it)S 10773 X 598 y(valuable.)S 250 x(Other)S 166 x(features)S 166 x(include:)S 10773 X 897 y(\201)S 595 x(V)S -46 x(eri\211cation)S 166 x(of)S 166 x(the)S 167 x(destination)S 165 x(directory)S 10773 X 896 y(\201)S 595 x(Partial)S 166 x(directory)S 166 x(name)S 167 x(matching)S 10773 X 897 y(\201)S 595 x(Best-guess)S 165 x(directory)S 167 x(name)S 166 x(matching)S 27427 36925 XY F36(2\2031)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier Courier-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-2) 11 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Reference)S 168 x(Guide)S 10773 4866 XY F151(\201)S 595 x(Switching)S 166 x(to)S 166 x(a)S 166 x(user)S 28 x(')S -19 x(s)S 165 x(home)S 167 x(directory)S 167 x(using)S 166 x(~)S F152(username)S 10773 X 897 y F151(\201)S 595 x(Support)S 166 x(for)S 166 x(non-VMS)S 166 x(directory)S 167 x(speci\211cations)S 10773 X 896 y(\201)S 595 x (Easily)S 165 x(switching)S 167 x(to)S 165 x(the)S 167 x(root)S 166 x (of)S 166 x(devices)S 166 x(or)S 166 x(concealed)S 167 x(logicals)S 10773 X 897 y(\201)S 595 x(Switching)S 166 x(back)S 167 x(to)S 165 x (previously)S 168 x(visited)S 165 x(directories)S 10773 X 897 y(\201)S 595 x(Updating)S 166 x(the)S 166 x(prompt)S 166 x(to)S 166 x(display)S 166 x(the)S 166 x(current)S 167 x(directory)S 10773 X 896 y(\201)S 595 x (Substitution)S 165 x(of)S 166 x(concealed)S 167 x(logicals)S 166 x (for)S 166 x(commonly)S 167 x(used)S 166 x(defaults)S 10773 X 897 y (\201)S 595 x(Saving)S 167 x(the)S 166 x(current)S 167 x(default)S 166 x (to)S 166 x(a)S 166 x(logical)S 166 x(when)S 167 x(switching)S 166 x (to)S 166 x(a)S 166 x(new)S 166 x(one)S 10773 X 896 y(\201)S 595 x(Switching)S 166 x(to)S 166 x(subdirectories)S 166 x(from)S 166 x(logicals)S 166 x (or)S 166 x(tilde)S 166 x(speci\211cations)S 10773 12238 XY(Many)S 168 x (of)S 166 x(the)S 167 x(above)S 167 x(features)S 167 x(may)S 167 x(be)S 166 x(combined)S 167 x(to)S 166 x(make)S 167 x(Extended)S 167 x(Switch)S 166 x(an)S 10773 X 598 y(extremely)S 167 x(powerful)S 166 x(and)S 166 x (effective)S 167 x(tool.)S 5094 14032 XY 9564 48 R 2404 14729 XY F24 (2.3.1)S 5094 X(Partial)S 166 x(Directory)S 166 x(Name)S 165 x(Matching)S 10773 X 897 y F151(One)S 177 x(of)S 177 x(the)S 177 x(most)S 177 x(convenien)S 2 x(t)S 177 x(features)S 177 x(of)S 177 x(Extended)S 177 x(Switch)S 177 x(is)S 176 x(its)S 177 x(ability)S 177 x(to)S 10773 X 597 y(recognize)S 177 x(a)S 175 x(partially)S 176 x(speci\211ed)S 175 x(directory)S 177 x (name.)S 268 x(Now)S 176 x(it)S 175 x(is)S 175 x(possible)S 175 x(to)S 175 x(give)S 10773 X 598 y(meaningful)S 181 x(names)S 180 x(to)S 179 x (subdirectories)S 180 x(without)S 180 x(the)S 180 x(drawback)S 180 x (of)S 180 x(having)S 181 x(to)S 10773 X 598 y(type)S 166 x(them)S 166 x (out)S 167 x(in)S 166 x(full)S 166 x(when)S 166 x(switching)S 167 x (into)S 166 x(them.)S 249 x(For)S 167 x(example:)S 10773 X 897 y F102 ($)S 239 x F104(DIRECTORY/WI)S 2 x(DTH=FILENAME=80)S 10773 X 747 y F102 (Directory)S 240 x(DKA0:[ACCOUNTI)S 2 x(NG])S 10773 X 747 y(APRIL_REPORTS.)S 2 x(DIR;1)S 10773 X 448 y(FEBRUARY_REPOR)S 2 x(TS.DIR;1)S 10773 X 449 y (JANUARY_REPORT)S 2 x(S.DIR;1)S 10773 X 448 y(MARCH_REPORTS.)S 2 x(DIR;1)S 10773 X 747 y(Total)S 240 x(of)S 239 x(4)S 239 x(files.)S 10773 X 448 y ($)S 239 x F104(SWITCH)S 240 x(FEB)S 10773 X 449 y F102(DKA0:[ACCOUNTI)S 2 x(NG.FEBRUARY_REPORTS)S 2 x(])S 5094 23994 XY 9564 48 R 2404 24692 XY F24(2.3.2)S 5094 X(Best-Guess)S 165 x(Directory)S 165 x(Name)S 165 x (Matching)S 10773 X 896 y F151(A)S 185 x(related)S 185 x(feature,)S 191 x(and)S 185 x(one)S 186 x(that)S 185 x(could)S 186 x(potentially)S 185 x(save)S 186 x(hours)S 185 x(during)S 187 x(a)S 10773 X 598 y(lifetime)S 181 x(of)S 182 x(sloppy)S 182 x(typing,)S 187 x(is)S 182 x(Extended)S 182 x(Switch')S -20 x(s)S 182 x(ability)S 182 x(to)S 181 x(make)S 182 x (a)S 182 x("best-)S 10773 X 598 y(guess")S 169 x(at)S 169 x(an)S 169 x (incorrectly)S 171 x(typed)S 169 x(directory)S 170 x(name.)S 255 x(The)S 170 x(same)S 169 x(results)S 168 x(shown)S 169 x(in)S 10773 X 598 y (the)S 166 x(previous)S 167 x(example)S 166 x(would)S 166 x(be)S 166 x (achieved)S 167 x(by)S 167 x(entering)S 167 x(the)S 166 x(following:)S 10773 X 896 y F102($)S 239 x F104(SWITCH)S 240 x(FEBUARY)S 10773 X 449 y F102(DKA0:[ACCOUNTI)S 2 x(NG.FEBRUARY_REPORTS)S 2 x(])S 10773 X 896 y F151(This)S 184 x(is)S 183 x(accomplished)S 184 x(by)S 184 x(repeatedly)S 184 x(removing)S 185 x(the)S 184 x(last)S 183 x(character)S 185 x(of)S 184 x(the)S 10773 X 598 y(given)S 193 x(directory)S 192 x(name)S 191 x (until)S 192 x(a)S 191 x(partial)S 191 x(match)S 192 x(is)S 191 x(found)S 191 x(or)S 192 x(there)S 192 x(are)S 191 x(no)S 10773 X 598 y(characters)S 189 x(left.)S 293 x(Note)S 188 x(that)S 188 x(this)S 187 x(can)S 189 x (cause)S 188 x(some)S 188 x(confusion)S 189 x(when)S 188 x(there)S 10773 X 597 y(are)S 166 x(several)S 167 x(subdirectories)S 166 x(with)S 165 x (similiar)S 165 x(names,)S 167 x(as)S 165 x(in)S 167 x(the)S 166 x(following)S 166 x(case:)S 10773 X 897 y F102($)S 239 x F104(DIRECTORY/WI)S 2 x(DTH=FILENAME=80)S 10773 X 747 y F102(Directory)S 240 x(DKA0:[PROGRAM])S 10773 X 747 y (VERSION_1.DIR;)S 2 x(1)S 10773 X 449 y(VERSION_2.DIR;)S 2 x(1)S 10773 X 448 y(VERSION_3.DIR;)S 2 x(1)S 5094 36925 XY F36(2\2032)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ NewCenturySchlbk-Italic Courier Courier-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-3) 12 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 23507 1807 XY F28(Reference)S 167 x(Guide)S 10773 4766 XY F102 (Total)S 240 x(of)S 239 x(4)S 239 x(files.)S 10773 X 448 y($)S 239 x F104(SWITCH)S 240 x(VURSION_3)S 10773 X 448 y F102(DKA0:[PROGRAM.)S 2 x(VERSION_1])S 10773 X 897 y F151(Of)S 165 x(course,)S 167 x(explicitly)S 166 x(supplying)S 166 x(a)S 166 x(wildcard)S 165 x(character)S 166 x (at)S 166 x(the)S 165 x(beginn)S 2 x(ing)S 166 x(of)S 165 x(the)S 10773 X 598 y(parameter)S 166 x(would)S 166 x(make)S 166 x(more)S 166 x(sense)S 166 x(in)S 166 x(this)S 166 x(situation.)S 10773 X 896 y F102($)S 239 x F104(SWITCH)S 240 x(*3)S 10773 X 449 y F102(DKA0:[PROGRAM.)S 2 x(VERSION_3])S 5094 9697 XY 9564 48 R 2404 10395 XY F24(2.3.3)S 5094 X(T)S -12 x(ilde)S 166 x(Parameter)S 486 x 896 y F151(A)S 167 x(popular)S 168 x(feature)S 167 x(found)S 168 x(in)S 168 x(other)S 168 x(operating)S 168 x(systems)S 166 x(is)S 167 x(the)S 168 x(ability)S 167 x(to)S 167 x(switch)S 10773 X 598 y(to)S 177 x(the)S 177 x(home)S 178 x(directory)S 178 x(of)S 177 x (a)S 177 x(user)S 177 x(by)S 178 x(entering)S 178 x(his/her)S 178 x (username)S 178 x(preceeded)S 10773 X 598 y(by)S 169 x(a)S 168 x(tilde.)S 253 x(This)S 168 x(functionality)S 169 x(has)S 168 x(been)S 168 x(incorporated)S 169 x(into)S 168 x(Extended)S 168 x(Switch.)S 10773 X 597 y(Entering)S 174 x(a)S 173 x(tilde)S 172 x(without)S 173 x(a)S 173 x(username)S 174 x (will)S 172 x(switch)S 172 x(to)S 173 x(the)S 173 x(home)S 174 x(directory)S 173 x(of)S 10773 X 598 y(the)S 166 x(curren)S 2 x(t)S 165 x(process)S 166 x(as)S 166 x(de\211ned)S 166 x(by)S 167 x(the)S 166 x(job)S 167 x (logical)S 166 x(SYS$LOGIN)S -2 x(.)S 10773 X 897 y F102($)S 239 x F104 (SWITCH)S 240 x(~DAVID)S 10773 X 448 y F102(DKA0:[USER.DAV)S 2 x(ID])S 5094 16223 XY 9564 48 R 2404 16920 XY F24(2.3.4)S 5094 X(Non-VMS)S 167 x (Speci\211cations)S 10773 X 897 y F151(T)S -45 x(o)S 180 x(make)S 180 x (changin)S 2 x(g)S 180 x(directories)S 180 x(as)S 180 x(easy)S 180 x (as)S 180 x(possible)S 179 x(for)S 180 x(all)S 180 x(different)S 180 x (types)S 10773 X 597 y(of)S 187 x(users,)S 193 x(Extended)S 187 x(Switch)S 187 x(has)S 187 x(included)S 187 x(support)S 187 x(for)S 187 x(certain)S 188 x(non-VMS)S 10773 X 598 y(directory)S 178 x(speci\211cations.)S 272 x(These)S 178 x(include)S 178 x(the)S 178 x(use)S 177 x(of)S 177 x (the)S 178 x(backslash)S 177 x(\(\\)S 50 x(\))S 177 x(as)S 177 x(a)S 10773 X 598 y(subdirectory)S 168 x(separator)S -37 x(,)S 167 x(the)S 168 x(use)S 167 x(of)S 167 x(multiple)S 166 x(dots)S 167 x(\(..{.}\))S 168 x(to)S 166 x(switch)S 167 x(up)S 167 x(multiple)S 10773 X 598 y (directory)S 171 x(levels,)S 171 x(and)S 171 x(partial)S 169 x(support)S 170 x(for)S 170 x(the)S 170 x(use)S 170 x(of)S 170 x(the)S 171 x(forward)S 169 x(slash)S 170 x(\(/\))S 170 x(as)S 10773 X 597 y(a)S 166 x(subdirectory)S 167 x(separator)S -37 x(.)S 10773 X 897 y F102($)S 239 x F104(SHOW)S 240 x(DEFAULT)S 11251 X 448 y F102(DKA0:[USER.D)S 2 x(AVID])S 10773 X 449 y($)S 239 x F104(SWITCH)S 240 x(\\MANAGER\\FABRIT)S 2 x(IUS)S 10773 X 448 y F102(DKA0:[MANAGER.)S 2 x(FABRITIUS])S 10773 X 448 y($)S 239 x F104(SWITCH)S 240 x(...)S 10773 X 449 y F102(DKA0:[000000])S 10773 X 448 y($)S 239 x F104(SWITCH)S 240 x(USER/DAVID)S 10773 X 448 y F102 (DKA0:[MANAGER.)S 2 x(FABRITIUS])S 10773 X 897 y F151(Note)S 183 x(that)S 183 x(using)S 184 x(a)S 184 x(leading)S 183 x(backslash)S 184 x(causes)S 183 x(you)S 184 x(to)S 183 x(switch)S 183 x(from)S 183 x(root)S 183 x (of)S 10773 X 598 y(the)S 171 x(current)S 172 x(device,)S 173 x(but)S 171 x(a)S 171 x(leading)S 171 x(slash)S 170 x(causes)S 171 x(DCL)S 170 x (to)S 171 x(view)S 171 x(your)S 172 x(intended)S 10773 X 598 y(parameter)S 166 x(as)S 166 x(a)S 166 x(quali\211er)S -36 x(.)S 5094 28128 XY 9564 48 R 2404 28825 XY F24(2.3.5)S 5094 X(Devices)S 165 x(and)S 166 x(Concea)S -2 x(led)S 166 x(Logicals)S 10773 X 897 y F151(Extended)S 178 x(Switch)S 177 x(attempts)S 176 x(to)S 178 x(make)S 177 x(chang)S 2 x(ing)S 178 x (your)S 179 x(device)S 178 x(as)S 177 x(simple)S 177 x(and)S 10773 X 598 y(intuitive)S 168 x(as)S 167 x(possible.)S 251 x(Given)S 167 x(a)S 168 x(device)S 168 x(speci\211cation,)S 168 x(Extended)S 167 x(Switch)S 167 x(checks)S 10773 X 598 y(to)S 171 x(see)S 171 x(if)S 171 x(the)S 171 x(directory)S 172 x(you)S 172 x(are)S 171 x(in)S 172 x(exists)S 170 x(on)S 172 x(the)S 171 x(new)S 171 x(device.)S 260 x(If)S 171 x (so,)S 173 x(it)S 171 x(simply)S 10773 X 597 y(change)S 2 x(s)S 165 x (your)S 167 x(device.)S 250 x(If)S 166 x(not,)S 167 x(it)S 166 x(changes)S 167 x(to)S 165 x(the)S 167 x(root)S 166 x(of)S 166 x(the)S 166 x(new)S 166 x(device.)S 10773 X 897 y(This)S 161 x(same)S 160 x(behavior)S 162 x (occurs)S 162 x(when)S 161 x(using)S 162 x(concealed)S 161 x(logical)S 161 x(names)S 161 x(when)S 161 x(given)S 10773 X 598 y(with)S 181 x (a)S 182 x(trailing)S 181 x(colon.)S 281 x(Leavin)S 2 x(g)S 181 x(the)S 182 x(colon)S 182 x(off)S 181 x(causes)S 182 x(Extended)S 181 x(Switch)S 181 x(to)S 10773 X 597 y(switch)S 166 x(to)S 165 x(the)S 167 x(root)S 166 x(of)S 166 x(the)S 166 x(concealed)S 167 x(logical.)S 27427 36925 XY F36(2\2033)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Courier %%+ Courier-Bold NewCenturySchlbk-Roman %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-4) 13 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Reference)S 168 x(Guide)S 10773 4766 XY F102($)S 239 x F104(SHOW)S 240 x(DEFAULT)S 11251 X 448 y F102(DKA0:[USER.D)S 2 x(AVID])S 10773 X 448 y($)S 239 x F104(SWITCH)S 240 x(DKA100:)S 18664 X F102(!)S 239 x(has)S 239 x(the)S 240 x(same)S 239 x(directory)S 240 x (structure)S 10773 X 449 y(DKA100:[USER.D)S 2 x(AVID])S 10773 X 448 y ($)S 239 x F104(SWITCH)S 240 x(DKA200:)S 18664 X F102(!)S 239 x(has)S 239 x(a)S 239 x(differenet)S 240 x(directory)S 241 x(structure)S 10773 X 448 y(DKA200:[000000)S 2 x(])S 10773 X 449 y($)S 239 x F104(SWITCH)S 240 x(CL)S 18664 X F102(!)S 239 x(where)S 239 x(CL)S 240 x(is)S 239 x (a)S 239 x(concealed)S 240 x(logical)S 10773 X 448 y(CL:[000000])S 10773 X 896 y F151(Subdirectories)S 187 x(may)S 187 x(also)S 187 x(be)S 187 x (added)S 187 x(after)S 186 x(the)S 187 x(device)S 188 x(name.)S 292 x (Y)S -56 x(ou)S 187 x(will)S 187 x(be)S 10773 X 598 y(switched)S 171 x (relative)S 172 x(to)S 172 x(your)S 172 x(curren)S 2 x(t)S 171 x(default)S 172 x(if)S 171 x(it)S 171 x(exists)S 171 x(on)S 172 x(the)S 172 x(new)S 172 x(device,)S 174 x(or)S 10773 X 598 y(from)S 166 x(the)S 166 x(root)S 166 x(if)S 166 x(it)S 166 x(does)S 166 x(not.)S 10773 X 897 y F102($)S 239 x F104(SWITCH)S 240 x(DKA0:USER)S 10773 X 448 y F102(DKA0:[USER])S 10773 X 448 y($)S 239 x F104(SWITCH)S 240 x(DKA0:DAVID)S 10773 X 449 y F102(DKA0:[USER.DAV)S 2 x(ID])S 5094 13433 XY 9564 48 R 2404 14131 XY F24(2.3.6)S 5094 X(Default)S 166 x(History)S 746 x 896 y F151(A)S 201 x (popular)S 201 x(feature)S 201 x(of)S 201 x(Extended)S 202 x(Switch)S 200 x(is)S 201 x(its)S 200 x(ability)S 201 x(to)S 201 x(keep)S 201 x (track)S 10773 X 598 y(of)S 198 x(and)S 199 x(return)S 200 x(to)S 198 x (directories)S 198 x(which)S 199 x(have)S 199 x(been)S 199 x(recently)S 200 x(visited.)S 314 x(Up)S 10773 X 598 y(to)S 207 x(\211ve)S 208 x (directories)S 207 x(are)S 207 x(stored)S 207 x(and)S 208 x(may)S 207 x (be)S 207 x(switched)S 207 x(to)S 207 x(using)S 208 x(the)S 10773 X 597 y(/BACKW)S -47 x(ARDS[)S -2 x(=n)S 84 x(|)S 83 x(str])S 165 x(quali\211er)S -36 x(.)S 10773 X 897 y F102($)S 239 x F104(SWITCH/HISTO)S 2 x(RY)S 10773 X 448 y F102(The)S 240 x(last)S 239 x(five)S 240 x(directories)S 240 x(you)S 239 x(visited)S 240 x(are:)S 11012 X 748 y(1.)S 240 x(DKA0:[PROJECT])S 11012 X 448 y(2.)S 240 x(DKA0:[RELATED_PROJEC)S 2 x(T])S 11012 X 448 y (3.)S 240 x(DKA0:[DATA])S 11012 X 449 y(4.)S 240 x(DKA0:[USER.DAVID.MAI)S 2 x(L])S 11012 X 448 y(5.)S 240 x(DKA0:[USER.DAVID])S 10773 X 448 y ($)S 239 x F104(SWITCH/BACK=)S 2 x(3)S 10773 X 448 y F102(DKA0:[DATA])S 10773 X 449 y($)S 239 x F104(SWITCH/BACK=)S 2 x(MAIL)S 10773 X 448 y F102(DKA0:[USER.DAV)S 2 x(ID.MAIL])S 10773 X 897 y F151(Y)S -56 x(ou)S 181 x(may)S 180 x(also)S 179 x(use)S 180 x(the)S 180 x(/RECALL)S 180 x (quali\211er)S 180 x(instead)S 180 x(of)S 179 x(the)S 180 x(/HISTOR)S -19 x(Y)S 180 x~ SWITCH045.A/![FABRITIUS.ESW.SWITCH]SWITCH.PS;1x(and)S 10773 X 598 y(/BACKW)S -47 x(ARDS)S 172 x(quali\211ers.)S 266 x(The)S 175 x(behavior)S 174 x(of)S 174 x(/RECALL)S 174 x(is)S 173 x (similar)S 173 x(to)S 174 x(that)S 174 x(of)S 10773 X 597 y(the)S 166 x (DCL)S 166 x(command)S 166 x(RECALL.)S 10773 X 897 y F102($)S 239 x F104(SWITCH/RECAL)S 2 x(L/ALL)S 10773 X 448 y F102(The)S 240 x(last)S 239 x(five)S 240 x(directories)S 240 x(you)S 239 x(visited)S 240 x(are:)S 11012 X 747 y(1.)S 240 x(DKA0:[PROJECT])S 11012 X 449 y(2.)S 240 x(DKA0:[RELATED_PROJEC)S 2 x(T])S 11012 X 448 y(3.)S 240 x(DKA0:[DATA])S 11012 X 448 y(4.)S 240 x (DKA0:[USER.DAVID.MAI)S 2 x(L])S 11012 X 449 y(5.)S 240 x(DKA0:[USER.DAVID])S 10773 X 448 y($)S 239 x F104(SWITCH/RECAL)S 2 x(L)S 239 x(3)S 10773 X 448 y F102(DKA0:[DATA])S 10773 X 449 y($)S 239 x F104(SWITCH/RECAL)S 2 x(L)S 239 x(MAIL)S 10773 X 448 y F102(DKA0:[USER.DAV)S 2 x(ID.MAIL])S 10773 X 448 y($)S 239 x F104(SWITCH/RECAL)S 2 x(L/ERASE)S 10773 X 449 y F102($)S 239 x F104(SWITCH/RECAL)S 2 x(L/ALL)S 10773 X 448 y F102(%ESW-W-NOHIST,)S 241 x(directory)S 240 x(history)S 240 x(not)S 239 x(available.)S 5094 36925 XY F36(2\2034)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Courier %%+ Courier-Bold NewCenturySchlbk-Roman %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-5) 14 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 23507 1807 XY F28(Reference)S 167 x(Guide)S 5094 4546 XY 9564 48 R 2404 5244 XY F24(2.3.7)S 5094 X(Updating)S 166 x(Y)S -51 x(our)S 166 x (Prompt)S 10773 X 896 y F151(Another)S 172 x(feature)S 171 x(found)S 172 x(in)S 171 x(several)S 172 x(other)S 171 x(operating)S 172 x(systems)S 170 x(is)S 171 x(the)S 171 x(ability)S 172 x(to)S 10773 X 598 y(have)S 172 x(the)S 172 x(prompt)S 171 x(re\212ect)S 172 x(the)S 172 x(current)S 173 x(directory)S -55 x(.)S 261 x(This)S 171 x(effect)S 172 x(can)S 172 x(be)S 171 x(achieved)S 10773 X 598 y(by)S 181 x(using)S 180 x(switch)S 180 x(with)S 179 x(the)S 181 x(/UPDA)S -28 x(TE_PROMPT)S 180 x(quali\211er)S -36 x(.)S 278 x(Additionally)S -56 x(,)S 184 x(a)S 10773 X 598 y(linefeed)S 181 x(may)S 182 x(be)S 181 x(added)S 181 x(to)S 181 x(the)S 182 x(beginning)S 183 x(of)S 181 x(the)S 181 x(prompt)S 181 x(to)S 181 x(provide)S 182 x (extra)S 10773 X 598 y(spacing.)S 10773 X 896 y F102($)S 239 x(SW*ITCH)S 240 x(:==)S 240 x(SWITCH/UPDATE_PROMP)S 2 x(T/LINEFEED)S 10773 X 448 y ($)S 239 x F104(SW)S 10773 X 748 y F102(DKA0:[USER.DAV)S 2 x(ID])S F104 (SW)S 239 x(\\MGR\\FAB)S 10773 X 747 y F102(DKA0:[MANAGER.)S 2 x(FABRITIUS])S F104(SHOW)S 240 x(DEFAULT)S 11251 X 448 y F102(DKA0:[MANAGE)S 2 x(R.FABRITIUS])S 10773 X 747 y(DKA0:[MANAGER.)S 2 x(FABRITIUS])S 10773 X 897 y F151(Because)S 161 x(prompt)S 160 x(strings)S 161 x(are)S 161 x(limited)S 160 x(to)S 161 x(32)S 160 x(characters,)S 163 x(Extended)S 161 x(Switch)S 160 x (may)S 10773 X 598 y(shorten)S 168 x(the)S 168 x(prompt)S 167 x(when)S 168 x(necessary)S -54 x(.)S 252 x(Also,)S 168 x(the)S 168 x(prompt)S 167 x(may)S 168 x(include)S 168 x(a)S 168 x(short)S 10773 X 598 y(header)S 167 x(\(up)S 166 x(to)S 166 x(8)S 166 x(characters\),)S 167 x(an)S 166 x (even)S 167 x(shorter)S 166 x(trailer)S 166 x(\(6)S 166 x(characters\),)S 167 x(or)S 166 x(both.)S 10773 X 896 y F102($)S 239 x F104(SW*ITCH)S 240 x(==)S 239 x("SWITCH/UPD)S 2 x(ATE_PROMPT=\(""\(NODE)S 2 x(\)"",""_$)S 239 x(""\)/LINEFE)S 2 x(ED")S 10773 X 448 y F102($)S 239 x F104(SW)S 10773 X 748 y F102(\(NODE\)DKA0:[US)S 2 x(ER.DAVID]_$)S 240 x F104(SW)S 239 x(PROJECT.DATA.S)S 2 x(AMPLES)S 10773 X 747 y F102(\(NODE\)DKA0:[..)S 2 x(.DATA.SAMPLES]_$)S 4272 X 144 4932 R 5094 18693 XY 9564 48 R 2404 19391 XY F24(2.3.8)S 5094 X(Substitutions)S 10773 X 896 y F151(When)S 172 x(using)S 173 x(Extended)S 172 x(Switch)S 171 x(to)S 172 x(update)S 171 x(the)S 172 x(prompt,)S 173 x(it)S 172 x(can)S 172 x(be)S 172 x(very)S 173 x (useful)S 10773 X 598 y(to)S 183 x(de\211ne)S 184 x(concealed)S 183 x (logicals)S 183 x(which)S 184 x(may)S 183 x(be)S 183 x(used)S 183 x (to)S 183 x(simplify)S 182 x(the)S 183 x(prompt)S 10773 X 598 y(string)S 166 x(and)S 167 x(make)S 166 x(it)S 166 x(more)S 166 x(meaningful.)S 10773 X 897 y F102($!)S 239 x(A)S 240 x(definition)S 240 x(such)S 239 x (as)S 240 x(the)S 239 x(following:)S 10773 X 448 y($!)S -478 x 448 y ($)S 239 x F104(DEFINE/TRANS)S 2 x(=CONCEAL)S 239 x(PROJECT)S 240 x (DKA0:[USER.D)S 2 x(AVID.PROJECT.])S 10773 X 449 y F102($!)S -478 x 448 y($!)S 239 x(Can)S 240 x(provide)S 240 x(a)S 239 x(useful)S 240 x (substitution)S 10773 X 448 y($!)S -478 x 448 y($)S 239 x F104(SW)S 240 x(~DAVID.PROJ.DAT.SAM)S 2 x(PLE)S 10773 X 449 y F102(PROJECT:[DATA.)S 2 x(SAMPLES])S 10773 X 896 y F151(This)S 175 x(feature)S 175 x(is)S 174 x(controlled)S 175 x(by)S 175 x(the)S 174 x(installation)S 174 x (procedure)S 176 x(because)S 174 x(it)S 175 x(effects)S 10773 X 598 y (the)S 166 x(behavior)S 167 x(of)S 166 x(Extended)S 167 x(Switch)S 165 x (for)S 166 x(all)S 166 x(users.)S 5094 28208 XY 9564 48 R 2404 28905 XY F24(2.3.9)S 5094 X(Complex)S 165 x(Subdirectory)S 167 x(Speci\211cations)S 10773 X 897 y F151(Several)S 200 x(of)S 200 x(the)S 200 x(parameter)S 200 x(styles)S 200 x(described)S 199 x(above)S 201 x(can)S 200 x(be)S 200 x(combined)S 10773 X 598 y(to)S 192 x(navig)S 2 x(ate)S 192 x(the)S 192 x(directory)S 193 x(structure)S 193 x(quickly)S 194 x(and)S 192 x (easily)S -55 x(.)S 302 x(A)S 192 x(few)S 192 x(of)S 192 x(the)S 10773 X 597 y(possibilities)S 164 x(are)S 167 x(listed)S 165 x(and)S 166 x(shown)S 166 x(below)S -46 x(.)S 10773 X 897 y(\201)S 595 x(under)S 167 x(a)S 166 x(logical)S 11670 X 897 y F102($)S 239 x F104(SHOW)S 239 x(LOGICAL)S 240 x(DATA)S 12387 X 448 y F102("DATA")S 240 x(=)S 239 x("DKA0:[USER.DAV)S 2 x(ID.PROJECT.DATA]")S 240 x(\(LNM$PROCES)S 2 x(S_TABLE\))S 11670 X 448 y($)S 239 x F104(SWITCH)S 240 x(DATA.SAMP)S 11670 X 448 y F102(DKA0:[USER.DAVID.P)S 2 x(ROJECT.DATA.SAMPLES)S 2 x(])S 27427 36925 XY F36(2\2035)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier Courier-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (2-6) 15 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Reference)S 168 x(Guide)S 10773 4866 XY F151(\201)S 595 x(above)S 166 x(a)S 166 x(logical)S 167 x(\(also)S 165 x(works)S 166 x(for)S 166 x(concealed)S 167 x(logicals\))S 11670 X 897 y F102 ($)S 239 x F104(SWITCH)S 240 x(DATA....)S 11670 X 448 y F102(DKA0:[USER])S 11670 X 747 y($)S 239 x F104(SHOW)S 239 x(LOGICAL)S 240 x(PROJECT)S 12387 X 448 y F102("PROJECT")S 240 x(=)S 239 x("DKA0:[USER.)S 2 x(DAVID.PROJECT.]")S 240 x(\(LNM$PROCESS)S 2 x(_TABLE\))S 11670 X 449 y($)S 239 x F104(SW)S 239 x(PROJECT:DATA)S 11670 X 448 y F102(PROJECT:[DATA])S 11670 X 448 y ($)S 239 x F104(SWITCH)S 240 x(...)S 11670 X 449 y F102(DKA0:[USER.DAVID])S 10773 X 896 y F151(\201)S 595 x(under)S 167 x(a)S 166 x(directory)S 166 x(that)S 166 x(is)S 166 x(above)S 166 x(a)S 166 x(logical)S 11670 X 897 y F102($)S 239 x F104(SWITCH)S 240 x(DATA...MAIL)S 11670 X 448 y F102(DKA0:[USER.DAVID.M)S 2 x(AIL])S 10773 X 897 y F151(\201)S 595 x (above)S 166 x(or)S 167 x(below)S 165 x(a)S 166 x(user)S 28 x(')S -19 x (s)S 166 x(home)S 166 x(directory)S 11670 X 897 y F102($)S 239 x F104 (SWITCH)S 240 x(~TOM.MAIL)S 11670 X 448 y F102(DKA0:[USER.TOM.MAI)S 2 x(L])S 11670 X 448 y($)S 239 x F104(SWITCH)S 240 x(~TOM..DAVID.PROJEC)S 2 x(T)S 11670 X 449 y F102(DKA0:[USER.DAVID.P)S 2 x(ROJECT])S 11670 X 896 y F151(Or)S 165 x(even)S 167 x(something)S 167 x(as)S 166 x(bizarre)S 166 x(as,)S 11670 X 897 y F102($)S 239 x F104(cd)S 239 x(~david/projec)S 2 x(t/data)S 11670 X 448 y F102(DKA0:[USER.DAVID.P)S 2 x(ROJECT.DATA])S 5094 36925 XY F36(2\2036)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier Courier-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (A-1) 16 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 2404 5875 XY F12(A)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Extende)S -2 x(d)S 166 x(Switch)S 165 x(Command)S 166 x(Refere)S -2 x(nce)S 10773 8652 XY F151(This)S 176 x(appendix)S 177 x(includes)S 176 x(a)S 176 x(complete)S 176 x(command)S 176 x(reference)S 177 x(for)S 176 x(the)S 176 x(Extended)S 10773 X 598 y(Switch)S 166 x(command.)S 27344 36925 XY F36(A\2031)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (A-2) 17 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F24(SWITCH)S 5094 4546 XY 23160 48 R 5094 5543 XY F20(SWITCH)S 10773 7934 XY F34(Changes)S 178 x(your)S 179 x(default)S 178 x(device)S 179 x(and)S 178 x(directory)S 178 x(speci\211cations.)S 275 x(The)S 178 x(new)S 178 x(default)S 10773 X 598 y(is)S 174 x(applied)S 173 x(to)S 175 x(all)S 174 x(subsequent)S 174 x(\211le)S 174 x(speci\211cations)S 174 x(that)S 175 x(do)S 175 x(not)S 174 x(explicitly)S 174 x(include)S 173 x(a)S 10773 X 597 y(device)S 166 x(or)S 166 x(directory)S 165 x (name.)S 10773 X 897 y(When)S 181 x(you)S 181 x(change)S 181 x(the)S 181 x(default)S 181 x(device)S 180 x(assignment,)S 185 x(the)S 181 x (system)S 182 x(equates)S 181 x(the)S 10773 X 598 y(speci\211ed)S 166 x (device)S 165 x(with)S 166 x(the)S 167 x(process)S 166 x(logical)S 164 x (name)S 166 x(SYS$DISK.)S 10773 X 896 y(The)S 176 x(commands)S 176 x (SW)S 177 x(and)S 176 x(CD)S 175 x(are)S 176 x(synonyms)S 176 x(of)S 177 x(the)S 176 x(command)S 176 x(SWITCH.)S 177 x(This)S 10773 X 598 y (command)S 166 x(replaces)S 165 x(the)S 167 x(DCL)S 165 x(command)S 166 x(SET)S 167 x(DEF)S -27 x(AUL)S -37 x(T)S -55 x(.)S 5094 13314 XY 23160 204 R 5094 14331 XY F24(FORMA)S -53 x(T)S 10773 X(SWITCH,)S 165 x (SW)S -37 x(,)S 166 x(CD)S 696 x F23([/quali\211)S -2 x(ers])S 17033 X 797 y([devic)S -2 x(e-name:][direc)S -2 x(tory-spec])S 10773 X 797 y 17484 48 R 10773 16523 XY F36(Command)S 166 x(Quali\211)S 2 x(ers)S 18544 X(Defaults)S 10773 X 698 y F35(/ALL)S 10773 X 597 y(/BACKW)S -8 x (ARDS[=n)S 83 x(|)S 83 x(str])S 10773 X 598 y(/ERASE)S 10773 X 598 y (/HIST)S -8 x(OR)S -19 x(Y)S 10773 X 598 y(/LINE_FE)S 2 x(ED)S 18544 X (/NOLINEFEED)S 10773 X 597 y(/RECALL)S 10773 X 598 y(/SA)S -26 x(VE_DEF)S -36 x(AUL)S -37 x(T)S 18544 X(/NOSA)S -27 x(VE_DEF)S -36 x(AUL)S -37 x (T)S 10773 X 598 y(/UPDA)S -36 x(TE_PROMPT[=\("header"[,"trailer"]\)])S 4272 X 107 y 144 612 R 10773 22003 XY(/VERSION)S 5094 23198 XY 23160 204 R 5094 24017 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y F25(device-name:)S 10773 X 548 y F151(Speci\211es)S 166 x(the)S 166 x(name)S 167 x(of)S 166 x(the)S 166 x(device)S 166 x(to)S 166 x(which)S 167 x(you)S 167 x (want)S 165 x(to)S 166 x(go.)S 10773 25639 XY F25(directory-spec)S 10773 X 598 y F151(Speci\211es)S 168 x(the)S 168 x(name)S 169 x(of)S 168 x(the)S 168 x(directory)S 169 x(to)S 168 x(which)S 168 x(you)S 169 x(want)S 168 x(to)S 168 x(go.)S 254 x(If)S 167 x(you)S 169 x(specify)S 10773 X 548 y(only)S 176 x(the)S 176 x(directory)S 177 x(name,)S 178 x(the)S 176 x(current)S 177 x(device)S 176 x(is)S 175 x(the)S 176 x(default)S 175 x(for)S 176 x(the)S 176 x F152(device-)S 10773 X 548 y(spec)S 176 x F151(parameter)S -37 x(.)S 268 x(If)S 174 x(you)S 177 x(specify)S 175 x (neither)S 176 x(a)S 175 x(device)S 176 x(nor)S 175 x(directory)S 176 x (name,)S 178 x(your)S 10773 X 548 y(default)S 173 x(will)S 172 x(be)S 173 x(swit)S -2 x(ched)S 174 x(to)S 172 x(your)S 174 x(home)S 173 x (directory)S 174 x(as)S 172 x(de\211ned)S 173 x(by)S 174 x(the)S 173 x (process)S 10773 X 548 y(logical)S 167 x(SYS$LOG)S -2 x(IN.)S 5094 29624 XY 23160 204 R 5094 30443 XY F24(QUALIFIERS)S 10773 X -22 y F25(/ALL)S 10773 X 548 y F151(Used)S 176 x(only)S 177 x(in)S 176 x(combination)S 176 x(with)S 176 x(/RECALL,)S 176 x(this)S 176 x(quali\211er)S 177 x (pair)S 176 x(displays)S 175 x(up)S 10773 X 548 y(to)S 182 x(the)S 182 x (last)S 181 x(\211ve)S 182 x(directories)S 182 x(which)S 182 x(you)S 182 x(have)S 183 x(visited.)S 281 x(This)S 181 x(is)S 182 x(functionally)S 10773 X 548 y(equivalent)S 167 x(to)S 166 x(using)S 167 x(the)S 166 x (/HISTOR)S -19 x(Y)S 166 x(quali\211er)S -37 x(.)S 10773 33161 XY F25 (/BACK)S -2 x(W)S -38 x(ARDS[=n)S 116 x(|)S 116 x(str])S 10773 X 598 y F151(Switches)S 194 x(back)S 195 x(to)S 195 x(any)S 195 x(of)S 195 x (the)S 195 x(last)S 193 x(\211ve)S 196 x(directories)S 195 x(to)S 194 x (which)S 195 x(you)S 196 x(have)S 10773 X 548 y(previously)S 194 x(switched.)S 303 x(If)S 193 x(a)S 193 x(parameter)S 193 x(is)S 193 x(not)S 193 x (given)S 2 x(,)S 200 x(the)S 193 x(last)S 193 x(directory)S 10773 X 547 y(is)S 186 x(recalled.)S 290 x(The)S 186 x(numbers)S 187 x(one)S 186 x(throug)S 2 x(h)S 186 x(\211ve)S 187 x(or)S 186 x(substrings)S 187 x(contained)S 186 x(in)S 10773 X 548 y(previous)S 169 x(directory)S 170 x(speci\211cations)S 169 x(may)S 169 x(be)S 168 x(used)S 169 x(to)S 169 x(select)S 168 x(the)S 169 x(desired)S 168 x(default.)S 10773 X 548 y(These)S 167 x(directories)S 165 x(are)S 167 x(stored)S 165 x(in)S 167 x(the)S 166 x(logical)S 166 x(list)S 166 x(DEF)S -38 x(AUL)S -27 x (T_HISTOR)S -20 x(Y)S -55 x(.)S 5094 X 850 y F36(A\2032)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Helvetica %%+ Helvetica-Oblique Helvetica-BoldOblique %%+ NewCenturySchlbk-Roman NewCenturySchlbk-Italic %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (A-3) 18 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 25507 1807 XY F24(SWITCH)S 10773 4866 XY F151(T)S -45 x(o)S 166 x (see)S 165 x(a)S 166 x(list)S 166 x(of)S 166 x(your)S 167 x(last)S 165 x (\211ve)S 167 x(directories,)S 166 x(use)S 166 x(/HISTOR)S -19 x(Y)S 166 x(or)S 166 x(/RECALL/ALL.)S 10773 5962 XY F25(/ERASE)S 10773 X 598 y F151(Used)S 177 x(only)S 179 x(in)S 178 x(combination)S 178 x(with)S 178 x(/RECALL,)S 178 x(this)S 177 x(quali\211er)S 179 x(pair)S 177 x (deletes)S 178 x(the)S 10773 X 548 y(process)S 152 x(logical)S 152 x (DEF)S -37 x(AUL)S -28 x(T_HISTOR)S -19 x(Y)S -55 x(,)S 152 x(which)S 153 x(is)S 151 x(used)S 152 x(to)S 152 x(store)S 152 x(recently)S 153 x (visited)S 10773 X 548 y(directories.)S 10773 8751 XY F25(/HIST)S -13 x (OR)S -13 x(Y)S 10773 X 598 y F151(Displays)S 181 x(up)S 182 x(to)S 181 x(the)S 182 x(last)S 181 x(\211ve)S 182 x(directories)S 182 x(which)S 182 x(you)S 182 x(have)S 183 x(visited.)S 280 x(This)S 182 x(is)S 10773 X 548 y(useful)S 166 x(in)S 167 x(conjunc)S 2 x(tion)S 166 x(with)S 165 x (the)S 167 x(/BACKW)S -48 x(ARDS[=n])S 165 x(quali\211er)S -36 x(.)S 10773 10993 XY F25(/LINE_FEED)S 10773 X 598 y F151(Adds)S 186 x(a)S 187 x(linefeed)S 188 x(to)S 187 x(the)S 187 x(beginning)S 189 x(of)S 187 x(your)S 188 x(prompt)S 187 x(when)S 187 x(used)S 187 x(with)S 187 x (the)S 10773 X 548 y(/UPDA)S -27 x(TE_PROMPT)S 166 x(quali\211er)S -36 x (.)S 10773 13235 XY F25(/RECALL)S 10773 X 597 y F151(Switches)S 194 x (back)S 195 x(to)S 195 x(any)S 195 x(of)S 195 x(the)S 195 x(last)S 193 x (\211ve)S 196 x(directories)S 195 x(to)S 194 x(which)S 195 x(you)S 196 x (have)S 10773 X 548 y(previously)S 194 x(switched.)S 303 x(If)S 193 x (a)S 193 x(parameter)S 193 x(is)S 193 x(not)S 193 x(given)S 2 x(,)S 200 x(the)S 193 x(last)S 193 x(directory)S 10773 X 548 y(is)S 186 x (recalled.)S 290 x(The)S 186 x(numbers)S 187 x(one)S 186 x(throug)S 2 x(h)S 186 x(\211ve)S 187 x(or)S 186 x(substrings)S 187 x(contained)S 186 x(in)S 10773 X 548 y(previous)S 169 x(directory)S 170 x(speci\211cations)S 169 x(may)S 169 x(be)S 168 x(used)S 169 x(to)S 169 x(select)S 168 x (the)S 169 x(desired)S 168 x(default.)S 10773 X 548 y(These)S 173 x (directories)S 172 x(are)S 173 x(stored)S 172 x(in)S 172 x(the)S 173 x (logical)S 173 x(list)S 171 x(DEF)S -37 x(AUL)S -28 x(T_HISTOR)S -19 x (Y)S -56 x(.)S 173 x(This)S 10773 X 548 y(is)S 166 x(functionally)S 167 x(equivalent)S 167 x(to)S 166 x(using)S 166 x(the)S 167 x(/BACKW)S -48 x(ARDS)S 165 x(quali\211er)S -36 x(.)S 10773 X 897 y(T)S -45 x(o)S 166 x(see)S 165 x(a)S 166 x(list)S 166 x(of)S 166 x(your)S 167 x(last)S 165 x(\211ve)S 167 x(directories,)S 166 x(use)S 166 x(/HISTOR)S -19 x (Y)S 166 x(or)S 166 x(/RECALL/ALL.)S 10773 18565 XY F25(/SA)S -52 x (VE_DEF)S -38 x(AUL)S -53 x(T)S 10773 X 597 y F151(Assigns)S 185 x(the)S 186 x(curren)S 2 x(t)S 185 x(directory)S 187 x(speci\211cation)S 186 x (to)S 186 x(the)S 186 x(logical)S 186 x(PREVIOUS_)S 10773 X 548 y(DEF)S -37 x(AUL)S -28 x(T)S -45 x(.)S 10773 20806 XY F25(/UPDA)S -53 x(TE_PROMPT[=\("header"[,"traile)S -2 x(r"]\)])S 10773 X 598 y F151(Modi\211es)S 183 x(your)S 184 x(prompt)S 182 x(each)S 183 x(time)S 183 x(you)S 183 x(switch)S 182 x(directories)S 183 x(to)S 183 x(display)S 182 x(your)S 10773 X 548 y(current)S 173 x (default)S 172 x(directory)S -54 x(.)S 262 x(This)S 172 x(quali\211er)S 173 x(is)S 172 x(analogous)S 173 x(to)S 172 x(using)S 173 x(the)S 172 x (prompt)S 10773 X 548 y($p$g)S 183 x(command)S 183 x(on)S 183 x(a)S 182 x(PC.)S 183 x(There)S 183 x(is)S 182 x(a)S 183 x(32)S 182 x(character)S 184 x(limit)S 182 x(to)S 182 x(the)S 183 x(length)S 183 x(of)S 10773 X 548 y(your)S 170 x(prompt,)S 169 x(so)S 169 x(directory)S 169 x(speci\211cations)S 169 x(that)S 169 x(are)S 168 x(longer)S 170 x(are)S 169 x(abbreviated)S 169 x(as)S 10773 X 548 y(DEVIC)S -2 x(E:[...)S 2 x(SUB3.SUB4].)S 10773 X 896 y(The)S 174 x(optional)S 173 x(quoted)S 173 x(string)S 174 x(parameters)S 172 x(\(maximum)S 173 x(of)S 173 x(8)S 173 x(characters)S 174 x(for)S 173 x(the)S 10773 X 548 y(header)S 180 x(and)S 180 x(6)S 179 x(characters)S 180 x(for)S 180 x(the)S 179 x(trailer\))S 179 x(are)S 180 x(placed)S 179 x(before)S 180 x(and)S 180 x(after)S 179 x(the)S 10773 X 548 y(directory)S 174 x(speci\211cation,)S 175 x(respectively)S -55 x(.)S 263 x(T)S -46 x (o)S 173 x(specify)S 173 x(a)S 172 x(trailer)S 173 x(only)S -54 x(,)S 174 x(use)S 173 x(the)S 173 x(null)S 10773 X 548 y(string)S 166 x(\(""\))S 166 x(for)S 166 x(the)S 166 x(header)S -36 x(.)S 4272 X 144 2940 R 10773 27232 XY F25(/VERSION)S 10773 X 598 y F151(Displays)S 165 x(the)S 167 x(version)S 167 x(of)S 166 x(Extended)S 166 x(Switch)S 166 x(currently)S 168 x(installed)S 165 x(on)S 167 x(the)S 166 x(system,)S 10773 X 548 y(including)S 168 x (dates)S 165 x(and)S 166 x(times)S 165 x(for)S 167 x(the)S 166 x(source)S 166 x(code)S 167 x(and)S 166 x(last)S 165 x(installation.)S 10773 X 896 y(Also)S 185 x(displays)S 186 x(a)S 186 x(list)S 185 x(of)S 186 x (the)S 186 x(substitutions)S 186 x(which)S 186 x(are)S 186 x(de\211ned)S 187 x(for)S 186 x(a)S 186 x(given)S 10773 X 548 y(installation.)S 4272 X 144 1848 R 27344 36925 XY F36(A\2033)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Helvetica-BoldOblique %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (B-1) 19 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 2404 5875 XY F12(B)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Sample)S 166 x(Installat)S -2 x(ion)S 10773 8652 XY F151(This)S 170 x(appendix)S 170 x(includes)S 170 x(an)S 171 x(example)S 170 x(of)S 169 x(a)S 170 x (complete)S 170 x(installation)S 169 x(of)S 170 x(Extended)S 10773 X 598 y(Switch)S 166 x(V4.5-1.)S 27344 36925 XY F36(B\2031)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (B-2) 20 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 5094 1807 XY F28(Sample)S 168 x(Installa)S 2 x(tion)S 5094 4790 XY F102($)S 240 x F104(@SYS$UPDATE:VMSINST)S 2 x(AL)S 239 x(SWITCH045)S 240 x(DKA0:)S 5333 X 747 y F102(VAX/VMS)S 240 x(Software)S 240 x(Product)S 240 x(Installation)S 240 x(Procedure)S 240 x(V6.1)S 5094 X 747 y(It)S 240 x(is)S 239 x(15-SEP-1994)S 240 x(at)S 240 x(13:15.)S 5094 X 747 y (Enter)S 240 x(a)S 239 x(question)S 240 x(mark)S 240 x(\(?\))S 239 x (at)S 239 x(any)S 240 x(time)S 239 x(for)S 240 x(help.)S 5094 X 748 y (*)S 240 x(Are)S 239 x(you)S 239 x(satisfied)S 240 x(with)S 240 x(the)S 239 x(backup)S 240 x(of)S 239 x(your)S 240 x(system)S 240 x(disk)S 239 x ([YES]?)S 340 x -267 y 1512 24 R 20258 X 355 y 24 360 R 20383 7759 XY F106(Return)S 107 x 108 y 24 360 R 20258 X 20 y 1512 24 R 5094 8526 XY F102(The)S 240 x(following)S 240 x(products)S 240 x(will)S 239 x(be)S 240 x(processed:)S 5573 X 747 y(SWITCH)S 239 x(V4.5)S 5333 X 747 y(Beginning)S 241 x(installation)S 240 x(of)S 239 x(SWITCH)S 240 x(V4.5)S 239 x(at)S 240 x(13:15)S 5094 X 747 y(%VMSINSTAL-)S 2 x(I-RESTORE,)S 240 x(Restoring)S 240 x(product)S 240 x(save)S 239 x(set)S 239 x(A)S 240 x(...)S 5094 X 449 y(%VMSINSTAL-)S 2 x(I-RELMOVED,)S 240 x(Product's)S 240 x(release)S 240 x(notes)S 239 x(have)S 240 x(been)S 239 x(moved)S 240 x(to)S 239 x (SYS$HELP.)S 5573 12262 XY(*******************)S 2 x(*******************)S 2 x(*******************)S 2 x(********)S 5573 X 448 y(**)S 20636 X(**)S 5573 X 448 y(**)S 10594 X(Extended)S 240 x(Switch)S 239 x(V4.5-1)S 20636 X (**)S 5573 X 449 y(**)S 20636 X(**)S 5573 X 448 y(**)S 8681 X(Copyright)S 240 x(\(c\))S 239 x(1994)S 240 x(by)S 239 x(David)S 240 x(M.)S 239 x (Fabritius)S 20636 X(**)S 5573 X 448 y(**)S 20636 X(**)S 5573 X 449 y (*******************)S 2 x(*******************)S 2 x(*******************)S 2 x(********)S 5094 X 747 y(*)S 240 x(Do)S 239 x(you)S 239 x(want)S 240 x(to)S 239 x(purge)S 240 x(files)S 239 x(replaced)S 240 x(by)S 240 x (this)S 239 x(installation)S 241 x([YES]?)S 339 x -267 y 1512 24 R 20975 X 355 y 24 360 R 21100 15679 XY F106(Return)S 107 x 108 y 24 360 R 20975 X 20 y 1512 24 R 5094 16446 XY F102(*)S 240 x(Do)S 239 x(you)S 239 x(wish)S 240 x(to)S 239 x(install)S 240 x(the)S 239 x(source)S 240 x(files)S 240 x([YES]?)S 339 x -267 y 1512 24 R 16910 X 355 y 24 360 R 17036 16426 XY F106(Return)S 107 x 108 y 24 360 R 16910 X 20 y 1512 24 R 5094 16894 XY F102(*)S 240 x(Directory)S 240 x(for)S 239 x(source)S 240 x(files?)S 240 x([SYS$COMMON:[SYSMGR.)S 2 x(SWITCH]]:)S 339 x -266 y 1512 24 R 19540 X 355 y 24 360 R 19666 16874 XY F106(Return)S 107 x 109 y 24 360 R 19540 X 20 y 1512 24 R 5094 17642 XY F102(*)S 240 x(Directory)S 240 x (for)S 239 x(image)S 240 x(file?)S 239 x([SYS$COMMON:)S 2 x([SYSEXE]]:)S 339 x -267 y 1512 24 R 17388 X 355 y 24 360 R 17514 17622 XY F106(Return)S 107 x 108 y 24 360 R 17388 X 20 y 1512 24 R 5573 18389 XY F102(The)S 239 x(SWITCH)S 240 x(command)S 240 x(can)S 239 x(be)S 239 x(added)S 240 x(to)S 239 x(the)S 240 x(system-wide)S 240 x(DCLTABLES,)S 5573 X 448 y(making)S 239 x(the)S 240 x(command)S 240 x(available)S 240 x(to)S 239 x(all)S 239 x(users,)S 240 x(or)S 239 x(it)S 240 x(can)S 239 x(be)S 5573 X 448 y(defined)S 239 x(as)S 240 x(a)S 239 x(foreign)S 240 x(command.)S 5094 X 748 y(*)S 240 x(Do)S 239 x(you)S 239 x(wish)S 240 x(to)S 239 x (add)S 240 x(the)S 239 x(SWITCH)S 240 x(command)S 240 x(to)S 239 x(the)S 239 x(DCLTABLES)S 240 x([YES]?)S 340 x -267 y 1512 24 R 20497 X 355 y 24 360 R 20622 20013 XY F106(Return)S 107 x 108 y 24 360 R 20497 X 20 y 1512 24 R 5094 20780 XY F102(*)S 240 x(Do)S 239 x(you)S 239 x(wish)S 240 x(to)S 239 x(add)S 240 x(SWITCH)S 239 x(to)S 240 x(a)S 239 x(help)S 239 x(library)S 240 x([YES]?)S 340 x -267 y 1512 24 R 17867 X 355 y 24 360 R 17992 20760 XY F106(Return)S 107 x 108 y 24 360 R 17867 X 20 y 1512 24 R 5573 21527 XY F102(The)S 239 x(follow)S 240 x(is)S 239 x(a)S 239 x(list)S 240 x(of)S 239 x(some)S 240 x(of)S 239 x(the)S 239 x(available)S 240 x(libraries)S 240 x(into)S 240 x(which)S 240 x(the)S 239 x(help)S 5573 X 448 y(file)S 239 x(for)S 240 x(Extended)S 239 x(Switch)S 240 x (may)S 240 x(be)S 239 x(installed:)S 7007 X 747 y(SYS$SYSROOT:[)S 2 x (SYSHLP]HELPLIB.HLB)S 5094 X 748 y(*)S 240 x(Which)S 239 x(library)S 240 x(do)S 239 x(you)S 240 x(wish)S 239 x(to)S 240 x(use?)S 239 x([SYS$SYSROOT:[)S 2 x(SYSHLP]HELPLIB.HLB])S 2 x(:)S 338 x -267 y 1512 24 R 22170 X 355 y 24 360 R 22296 23450 XY F106(Return)S 107 x 108 y 24 360 R 22170 X 20 y 1512 24 R 5573 24217 XY F102(One)S 239 x(of)S 239 x(the)S 240 x(many)S 239 x(features)S 240 x(of)S 240 x(Extended)S 239 x(Switch)S 240 x(is)S 239 x(its)S 240 x(ability)S 240 x(to)S 239 x(subsititute)S 5573 X 448 y (concealed)S 240 x(logicals)S 240 x(for)S 239 x(long)S 240 x(directory)S 240 x(specifications.)S 479 x(This)S 240 x(is)S 239 x(especially)S 5573 X 449 y(useful)S 239 x(when)S 240 x(updating)S 240 x(your)S 239 x(prompt)S 240 x(to)S 239 x(indicate)S 240 x(the)S 240 x(current)S 240 x(directory.)S 479 x(For)S 5573 X 448 y(example,)S 240 x(if)S 239 x(a)S 239 x(group)S 240 x(of)S 239 x(users)S 240 x(has)S 239 x(a)S 239 x(common)S 240 x (root)S 239 x(such)S 240 x(as:)S 6290 X 747 y(NODE$DKA100:[USE)S 2 x (RS.GROUP.usernames])S 5573 X 747 y(and)S 239 x(there)S 240 x(is)S 239 x (a)S 239 x(logical)S 240 x(definition)S 240 x(such)S 240 x(as:)S 6290 X 747 y("GROUP")S 240 x(=)S 239 x("NODE$DKA100:[U)S 2 x(SERS.GROUP.]")S 240 x(\(LNM$SYSTEM_TAB)S 2 x(LE\))S 5573 X 748 y(then)S 239 x(Extended)S 240 x(Switch)S 240 x(can)S 239 x(be)S 240 x(configured)S 240 x(to)S 239 x(automatically)S 240 x(substitute)S 241 x(the)S 5573 X 448 y(logical)S 239 x(name)S 240 x(instead)S 240 x(of)S 239 x(using)S 240 x(the)S 239 x (full)S 240 x(directory)S 240 x(specification.)S 479 x(\(For)S 5573 X 448 y(additional)S 240 x(explanation,)S 240 x(please)S 240 x(see)S 239 x (the)S 240 x(release)S 239 x(notes.\))S 5094 X 747 y(*)S 240 x(Do)S 239 x(you)S 239 x(want)S 240 x(Extended)S 240 x(Switch)S 240 x(to)S 239 x(make)S 239 x(logical)S 240 x(name)S 240 x(substitutions)S 240 x ([YES]?)S 339 x -266 y 1512 24 R 22409 X 355 y 24 360 R 22535 30175 XY F106(Return)S 107 x 108 y 24 360 R 22409 X 20 y 1512 24 R 12268 30942 XY F102(**)S 239 x(CAUTION)S 240 x(**)S 7007 X 747 y(Invalid)S 240 x(substitutions)S 241 x(will)S 239 x(cause)S 240 x(Extended)S 240 x(Switch)S 239 x(to)S 240 x(behave)S 7007 X 448 y(in)S 240 x(unexpected)S 240 x(ways.)S 478 x (Please)S 240 x(enter)S 240 x(substitutions)S 240 x(carefully!)S 5573 X 747 y(Please)S 239 x(enter)S 240 x(the)S 239 x(specificati)S 2 x(ons)S 239 x(which)S 240 x(are)S 239 x(to)S 239 x(be)S 240 x(substituted)S 240 x(as)S 239 x(follows:)S 6051 X 748 y(DEVICE:[DIRECTORY)S 2 x(.SUBDIRECTORY.])S 5573 X 747 y(Press)S 239 x()S 240 x(on)S 239 x(a)S 240 x(line)S 239 x(by)S 240 x(itself)S 239 x(when)S 240 x(finished.)S 5094 X 747 y (*)S 240 x(Specification)S 240 x(to)S 239 x(be)S 240 x(substituted:)S 240 x F104(DISK$SYSTEM:[MA)S 2 x(NAGER.])S 5094 X 448 y F102(*)S 240 x (Logical)S 239 x(name)S 240 x(to)S 239 x(be)S 240 x(used)S 239 x(in)S 239 x(its)S 240 x(place:)S 240 x F104(MGR)S 5094 36925 XY F36(B\2032)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Courier %%+ Courier-Bold %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Page: (B-3) 21 %%PageFonts: (atend) %%PageProcessColors: (atend) %%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XY 0 SC 22810 1807 XY F28(Sample)S 167 x(Installa)S 2 x(tion)S 5094 4783 XY F102(*)S 240 x(Specification)S 240 x(to)S 239 x(be)S 240 x(substituted:)S 340 x -266 y 1512 24 R 13563 X 355 y 24 360 R 13688 4763 XY F106(Return)S 107 x 109 y 24 360 R 13563 X 20 y 1512 24 R 5573 5531 XY F102(You)S 239 x(have)S 240 x(defined)S 239 x(the)S 240 x(following)S 240 x(substitutions:)S 5573 X 747 y(DISK$SYSTEM:[MANAGE)S 2 x(R.])S 239 x(=)S 239 x(MGR)S 5094 X 747 y(*)S 240 x(Are)S 239 x(these)S 240 x(substitutions)S 240 x(correct)S 240 x([YES]?)S 339 x -267 y 1512 24 R 14997 X 355 y 24 360 R 15123 7005 XY F106(Return)S 107 x 108 y 24 360 R 14997 X 20 y 1512 24 R 5094 7772 XY F102(*)S 240 x(Do)S 239 x(you)S 239 x(wish)S 240 x(to)S 239 x(accept)S 240 x(Unix-style)S 240 x(directory)S 240 x(separators)S 240 x([NO]?)S 339 x -267 y 1512 24 R 20018 X 356 y 24 360 R 20144 7752 XY F106(Return)S 107 x 109 y 24 360 R 20018 X 19 y 1512 24 R 5094 8519 XY F102(**)S 479 x (No)S 239 x(further)S 240 x(questions)S 240 x(will)S 240 x(be)S 239 x (asked)S 239 x(during)S 240 x(the)S 240 x(installation.)S 5094 X 748 y (**)S 479 x(Creating)S 240 x(substitution)S 240 x(file...)S 5094 X 747 y (**)S 479 x(Copying)S 240 x(source)S 239 x(files...)S 5094 X 747 y(%VMSINSTAL-)S 2 x(I-SYSDIR,)S 240 x(This)S 239 x(product)S 240 x(creates)S 240 x(system)S 239 x(disk)S 240 x(directory)S 479 x(SYS$COMMON:[SY)S 2 x(SMGR.SWITCH].)S 5094 X 747 y(**)S 240 x(Building)S 240 x(Extended)S 240 x(Switch)S 239 x (image...)S 5094 X 747 y(*)S 479 x(Compiling...)S 5094 X 449 y(*)S 479 x (Linking...)S 5094 X 747 y(**)S 240 x(Updating)S 240 x(DCLTABLES...)S 5094 X 448 y(**)S 240 x(Updating)S 240 x(system)S 239 x(help)S 240 x (file...)S 5573 X 747 y(*******************)S 2 x(*******************)S 2 x(*******************)S 2 x(********)S 5573 X 449 y(**)S 20636 X(**)S 5573 X 448 y(**)S 717 x(To)S 239 x(complete)S 240 x(the)S 240 x(installation,)S 240 x(please)S 240 x(add)S 239 x(the)S 240 x(following)S 20636 X(**)S 5573 X 448 y(**)S 717 x(line)S 240 x(to)S 239 x(SYS$MANAGER:SYS)S 2 x (TARTUP.COM)S 15854 X(\(VMS)S 240 x(V4.x\))S 20636 X(**)S 5573 X 449 y (**)S 7964 X(or)S 239 x(SYS$MANAGER:SYS)S 2 x(TARTUP_V5.COM)S 479 x (\(VMS)S 240 x(V5.x\):)S 20636 X(**)S 5573 X 448 y(**)S 7964 X(or)S 239 x(SYS$MANAGER:SYS)S 2 x(TARTUP_VMS.COM)S 240 x(\(VMS)S 240 x(V6.x\):)S 20636 X(**)S 5573 X 448 y(**)S 20636 X(**)S 5573 X 449 y(**)S 7246 X ($)S 240 x(@SYS$MANAGER:SWITCH)S 2 x(_STARTUP.COM)S 20636 X(**)S 5573 X 448 y(**)S 20636 X(**)S 5573 X 448 y(*******************)S 2 x(*******************)S 2 x(*******************)S 2 x(********)S 5333 X 747 y(Installati)S 2 x (on)S 239 x(of)S 239 x(SWITCH)S 240 x(V4.5)S 239 x(completed)S 240 x (at)S 240 x(13:20)S 5333 X 748 y(VMSINSTAL)S 241 x(procedure)S 240 x (done)S 239 x(at)S 239 x(13:20)S 27344 36925 XY F36(B\2033)S EP PP %%PageTrailer %%PageFonts: Helvetica-Bold Courier %%PageProcessColors: %%PageCustomColors: (BLACK) % %%Trailer %%Pages: 21 %%BoundingBox: 0 0 612 792 %%DocumentFonts: NewCenturySchlbk-Bold %%+ NewCenturySchlbk-Italic NewCenturySchlbk-Roman %%+ Courier Courier-Bold Courier-Oblique %%+ Helvetica Helvetica-Bold Helvetica-Oblique %%+ Helvetica-BoldOblique %%DocumentNeededFonts: NewCenturySchlbk-Bold %%+ NewCenturySchlbk-Italic NewCenturySchlbk-Roman %%+ Courier Courier-Bold Courier-Oblique %%+ Helvetica Helvetica-Bold Helvetica-Oblique %%+ Helvetica-BoldOblique %%DocumentProcessColors: %%DocumentCustomColors: (BLACK) %%CMYKCustomColor: 0.0 0.0 0.0 1.0 (BLACK) % DVC$PSJob restore end %DEC_DVC$dict end %Color5044Dict % %%EOF #*[FABRITIUS.ESW.SWITCH]SWITCH.SDML;1+,r!.B/ 4`BA-/0123KPWOC56kG7kG8_|M9GHJ ! ! Copyright 1993,1994 by David Fabritius. All rights reserved. Permission ! is given to freely distribute and modify this software for no commercial ! gain as long as this copyright notice is retained. ! File: SWITCH.SDML Author: David Fabritius, FABRITDM@CS.ROSE-HULMAN.EDU Date: October 15, 1993 Abstract: VAX DOCUMENT source file for the _Extended Switch Reference Guide_. It was created almost entirely by using Hunter Goatley's SUPERVISOR documentation as a template. %~ SWITCH045.Ar!/#[FABRITIUS.ESW.SWITCH]SWITCH.SDML;1`BF3| Modified by: 01-004 David Fabritius 15-SEP-1994 Updated for V4.5-1 01-003 David Fabritius 15-JUN-1994 Updated for V4.5 01-002 David Fabritius 15-JAN-1994 Updated for V4.4-4 01-001 David Fabritius 01-NOV-1993 Updated for V4.4-3 01-000 David Fabritius 15-OCT-1993 (ESW\Extended Switch) (VER\V4.5-1) (MAJ_MIN\V4.5) (MONTH\September) (DAY\15) (YEAR\1994) (DATE\15-SEP-1994) (CMD\SWITCH) (KIT\SWITCH045) (INSTBLKS\900) (SYSDISK\450) (Guide to<LINE>EXTENDED SWITCH) <ABSTRACT>(<REFERENCE>(MONTH) <REFERENCE>(YEAR)) <P> This manual describes the installation and use of <REFERENCE>(ESW). <ENDABSTRACT> <REVISION> <REVISION_INFO>(This is a revised manual.) <REVISION_INFO>(Operating System and Version:\All versions of VMS) <REVISION_INFO>(Software Version:\<REFERENCE>(ESW) <REFERENCE>(VER)) <ENDTITLE_PAGE> <COPYRIGHT_PAGE> <PRINT_DATE>(<REFERENCE>(MONTH) <REFERENCE>(DAY), <REFERENCE>(YEAR)) <P> Permission is granted to copy and redistribute this document for no commercial gain. <P> The information in this document is subject to change without notice and should not be construed as a commitment by the author. The author assumes no responsibility for any errors that may appear in this document. <P> <EMPHASIS>(DISCLAIMER:\BOLD) The software described in this document is provided <QUOTE>(<EMPHASIS>(as is\BOLD)). No guarantee is made by the author as to the suitability, reliability, security, usefulness, or performance of this software. <P> The author is not responsible for any losses that may occur from the use of this software. <P> The following are trademarks of Digital Equipment Corporation: DEC, VAX, Alpha, AXP, and VMS. <COPYRIGHT_DATE>(<REFERENCE>(YEAR)\David M. Fabritius. ALL RIGHTS RESERVED.) <ENDCOPYRIGHT_PAGE>(This document was prepared using VAX DOCUMENT, Version 2.2.) <CONTENTS_FILE> <PREFACE> <P> <REFERENCE>(ESW) is a VMS utility that replaces the DCL command SET DEFAULT. It provides all of the functionality of the original command as well as several enhancements and a greatly simplified user interface. Both VAX and Alpha architectures are supported by <REFERENCE>(ESW). <HEAD1>(Intended Audience) <P> This manual contains both installation instructions and a complete description of <REFERENCE>(ESW). The section describing the installation is intended for VMS system managers. The section describing the program itself is intended for general users. <HEAD1>(Acknowledgements) <P> I wish to thank Hunter Goatley for providing a working model upon which this documentation is based. I would also like to thank Jon Bohlke, Tom Hopson, Tom McCormick, and Brian Schenkenberger for their feedback and assistance in developing <REFERENCE>(ESW). <ENDPREFACE> <ENDFRONT_MATTER> <CHAPTER>(Installation Instructions) <P> This chapter describes the installation process for the <REFERENCE>(ESW) utility. <HEAD1>(Preparing to Install <REFERENCE>(ESW)) <P> This section describs the steps which should be taken prior to installing <REFERENCE>(ESW) <REFERENCE>(VER). <HEAD2>(Prerequisite Software) <P> <REFERENCE>(ESW) should work with all versions of VMS. It has been tested on versions 4.7 and above. <HEAD2>(Accessing the Online Release Notes) <P> <REFERENCE>(ESW) provides online release notes, which can be displayed or printed using VMSINSTAL with the OPTIONS N parameter. After the installation, the release notes may be read by printing the file SYS$HELP:SWITCHvvn.RELEASE_NOTES, where <QUOTE>(vvn) denotes the version number of the software. For example, for version <REFERENCE>(VER) of <REFERENCE>(ESW), the file name would be <REFERENCE>(KIT). <HEAD2>(Installation Procedure Requirements) <P> Before installing <REFERENCE>(ESW), ensure that the following privileges, resources, and requirements are met: <LIST>(UNNUMBERED) <LE> All the normal privileges and quotas of the default SYSTEM account. <LE> Approximately 5 to 15 minutes, depending on your system configuration, distribution medium, and options selected. <LE> Approximately <REFERENCE>(INSTBLKS) free blocks on a disk for use during the installation procedure; this can be the system disk or a disk specified with the VMSINSTAL AWD option. <LE> Approximately <REFERENCE>(SYSDISK) free blocks on the system disk for a full installation including source code and related files. <ENDLIST> <HEAD1>(Installing <REFERENCE>(ESW)) <P> <REFERENCE>(ESW) uses VMSINSTAL for installation. For more information on how to use VMSINSTAL, read the chapter on installing software in the <EMPHASIS>(VMS System Manager's Manual). To perform the installation, log into the SYSTEM account or another suitably privileged account. <HEAD2>(Invoking VMSINSTAL) <P> Invoke VMSINSTAL to install <REFERENCE>(ESW). <INTERACTIVE> <S>($ <EMPHASIS>(@SYS$UPDATE:VMSINSTAL SWITCHvvn ddcu:\BOLD)) <ENDINTERACTIVE> <P> Substitute the appropriate values for <EMPHASIS>(vvn) and <EMPHASIS>(ddcu). <INTERACTIVE> VAX/VMS Software Product Installation Procedure Vv.n It is DD-MMM-YYYY at hh:mm. Enter a question mark (?) at any time for help. <ENDINTERACTIVE> <P> If there are any users logged into the system, the following message will be displayed: <INTERACTIVE> %VMSINSTAL-W-ACTIVE, The following processes are still active: <EMPHASIS>(...process names...) <ENDINTERACTIVE> <P> <REFERENCE>(ESW) may be installed while users are logged in, although it will not be available as a command verb until they log out and back in again. <INTERACTIVE> <S>(* Do you want to continue anyway [NO]? <EMPHASIS>(YES\BOLD)) <ENDINTERACTIVE> <INTERACTIVE> <S>(* Are you satisfied with the backup of your system disk [YES]? <KEY>(Return\BOX)) <ENDINTERACTIVE> <P> Answer NO to abort the installation if it is necessary to perform a backup. <HEAD2>(Installation Options) <P> The next question is: <INTERACTIVE> <S>(* Do you want to purge files replaced by this installation [YES]? <KEY>(Return\BOX)) <ENDINTERACTIVE> <P> If this is the first installation of <REFERENCE>(ESW), answering NO to this question can save some time when the <REFERENCE>(ESW) files are moved into their directories. <HEAD2>(Disk and Directory Selection) <P> To install the source code, documentation, and/or help files for <REFERENCE>(ESW), a target directory is created during the installation procedure. Additionally, the following three files will be installed to make <REFERENCE>(ESW) available to all users of the system: <LIST>(UNNUMBERED) <LE> The executable image. Normally installed in SYS$COMMON:[SYSEXE]. <LE> The startup file. Installed in SYS$MANAGER. <LE> The release notes. Installed in SYS$HELP. <ENDLIST> <INTERACTIVE> <S>(* Do you wish to install the source files [YES]? <KEY>(Return\BOX)) <S>(* Directory for source files? [SYS$COMMON:[SYSMGR.SWITCH]]: <KEY>(Return\BOX)) <S>() <S>(* Directory for image file? [SYS$COMMON:[SYSEXE]]: <KEY>(Return\BOX)) <ENDINTERACTIVE> <HEAD2>(Adding the <REFERENCE>(CMD) Command and Help File) <P> To make <REFERENCE>(ESW) and its help available to all users in the same way that DEC layered products are, answer YES to the following questions. If <REFERENCE>(ESW) is not added to the DCLTABLES, it may be defined as a foreign command. <INTERACTIVE> <S>(* Do you wish to add the <REFERENCE>(CMD) command to the DCLTABLES [YES]? <KEY>(Return\BOX)) <S>() <S>(* Do you wish to add <REFERENCE>(CMD) to a help library [YES]? <KEY>(Return\BOX)) <ENDINTERACTIVE> <P> Enter the name of the help library into which the help for <REFERENCE>(ESW) should be installed. <INTERACTIVE> <S>( The follow is a list of some of the available libraries into which the help) <S>( file for Extended Switch may be installed:) <S>() <S>( SYS$SYSROOT:[SYSHLP]HELPLIB.HLB) <S>() <S>(* Which library do you wish to use? [SYS$SYSROOT:[SYSHLP]HELPLIB.HLB]: <KEY>(Return\BOX)) <ENDINTERACTIVE> <HEAD2>(Substitution Selection) <P> At this point, the substitutions which <REFERENCE>(ESW) is to make are defined. Additional information concerning substitions may be found in <REFERENCE>(SUBS). Simply enter the substitutions to be made or press <KEY>(Return\BOX) to continue the installation. <INTERACTIVE> <S>(* Do you want Extended Switch to make logical name substitutions [YES]? <KEY>(Return\BOX)) <S>() <S>(* Specification to be substituted: <EMPHASIS>(DISK$SYS3140:[MANAGER.]\BOLD)) <S>(* Logical name to be used in its place: <EMPHASIS>(MICRO$MGR\BOLD)) <S>() <S>(* Specification to be substituted: <KEY>(Return\BOX)) <ENDINTERACTIVE> <P> The substitutions are then redisplayed for verification. Answering YES will accept the substitutions as shown. Answering NO will restart the definition process. <INTERACTIVE> <S>( You have defined the following substitutions:) <S>() <S>( DISK$SYS3140:[MANAGER.] = MICRO$MGR) <S>() <S>(* Are these substitutions correct [YES]? <KEY>(Return\BOX)) <ENDINTERACTIVE> <HEAD2>(Unix-style Directory Separators) <P> The last question which is asked concerns the use of forward slashes as directory separators. While this is the way of things in the Unix world, this is <EMPHASIS>(not\BOLD) how VMS works. The DCL command language interpreter can be forced to accept forward slashes as part of a parameter, but doing so limits where valid qualifiers may be placed on the command line and what error checking the CLI can do. <P> Each site must weigh the advantages and disadvantages associated with providing this feature and decide whether or not it is appropriate. <INTERACTIVE> <S>(* Do you wish to accept Unix-style directory separators [NO]? <KEY>(Return\BOX)) <ENDINTERACTIVE> <HEAD2>(The Installation Completes) <P> After the configuration questions, the installation completes in accordance with the given input. Files are copied from the installation kit, the <REFERENCE>(ESW) image is compiled and linked, and all installed files are copied to their destination directories. Informational messages about the individual components are displayed when appropriate. <HEAD1>(Post-Installation Information) <P> This section contains startup information for <REFERENCE>(ESW). <HEAD2>(Starting <REFERENCE>(ESW)) <P> Once the installation is complete, <REFERENCE>(ESW) can be used by simply entering the <REFERENCE>(CMD) command. <P> To make all features of <REFERENCE>(ESW) automatically available at system startup, add a line similar to the following to the system startup procedure: <INTERACTIVE> $ @SYS$MANAGER:SWITCH_STARTUP.COM <ENDINTERACTIVE> <P> This will install the <REFERENCE>(ESW) image with the SYSPRV privilege. This is used <EMPHASIS>(only\ITALIC) to allow users to read the home directory of other users out of the authorization file. <HEAD1>(Registering Your Installation) <P> <REFERENCE>(ESW) is freely distributable software, and no license is required to use it. Registration of your installation is at your discretion and is used by the author only to determine the size of the <REFERENCE>(ESW) user base and the future directions for the program. <P> To register, simply send a note to the author with the following information: <LIST>(SIMPLE) <LE> Installer's name <LE> Company name and address <LE> System(s) on which the <REFERENCE>(ESW) is running <LE> Any comments and/or suggestions you might have <ENDLIST> <P> You can send it electronically to: <EMPHASIS>(FabritDM@CS.Rose-Hulman.Edu\BOLD), or by mail to the following address: <LIST>(SIMPLE) <LE> David Fabritius <LE> 1001 4th Avenue, Suite 2830 <LE> Seattle, WA 98154 <LE> USA <ENDLIST> <CHAPTER>(Reference Guide) <P> This chapter describes <REFERENCE>(ESW), its uses, and its enhancements over the DCL command SET DEFAULT. Examples demostrating the various features are also provided. <HEAD1>(Preparing to Use <REFERENCE>(ESW)) <P> <REFERENCE>(ESW) may be installed in the system-wide DCL command tables or may be provided as a foreign command. If the <REFERENCE>(CMD) command is not automatically available, it may be defined as a foreign command as follows: <INTERACTIVE> <S>($ <EMPHASIS>(SW*ITCH :== $SWITCH$EXE:SWITCH\BOLD)) <ENDINTERACTIVE> <P> Any symbol name may be used in place of SW*ITCH, including CD, SD, or other popular favorites. Also, any desired qualifiers may be added, such as /UPDATE_PROMPT/LINE_FEED. <HEAD1>(<REFERENCE>(ESW) Basics) <P> <REFERENCE>(ESW) gives the VMS user an easy and convenient way to navigate among available devices and directories. Unlike the DCL command SET DEFAULT, <REFERENCE>(ESW) uses a very simple, straight-forward syntax. For example, to switch to a subdirectory using SET DEFAULT, the command is given as: <INTERACTIVE> <S>($ <EMPHASIS>(SET DEFAULT [.SUBDIRECTORY]\BOLD)) <ENDINTERACTIVE> <P> This is very cumbersome and confusing, especially to new users; and even experienced users must contend with entering this awkard syntax. Using <REFERENCE>(ESW) makes this much easier, simply enter the command: <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH SUBDIRECTORY\BOLD)) <ENDINTERACTIVE> <P> To switch down several subdirectory levels, use dots (or backslashes, see <REFERENCE>(PC)) as separators. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH SUB1.SUB2.SUB3\BOLD)) <ENDINTERACTIVE> <HEAD1>(Additional Features) <P> Ease of use is a primary advantage provided by <REFERENCE>(ESW). However, a simplified syntax is only a small part of what makes it valuable. Other features include: <LIST>(UNNUMBERED) <LE> Verification of the destination directory <LE> Partial directory name matching <LE> Best-guess directory name matching <LE> Switching to a user's home directory using ~<EMPHASIS>(username) <LE> Support for non-VMS directory specifications <LE> Easily switching to the root of devices or concealed logicals <LE> Switching back to previously visited directories <LE> Updating the prompt to display the current directory <LE> Substitution of concealed logicals for commonly used defaults <LE> Saving the current default to a logical when switching to a new one <LE> Switching to subdirectories from logicals or tilde specifications <ENDLIST> <P> Many of the above features may be combined to make <REFERENCE>(ESW) an extremely powerful and effective tool. <HEAD2>(Partial Directory Name Matching) <P> One of the most convenient features of <REFERENCE>(ESW) is its ability to recognize a partially specified directory name. Now it is possible to give meaningful names to subdirectories without the drawback of having to type them out in full when switching into them. For example: <INTERACTIVE> <S>($ <EMPHASIS>(DIRECTORY/WIDTH=FILENAME=80\BOLD)) <S>() <S>(Directory DKA0:[ACCOUNTING]) <S>() <S>(APRIL_REPORTS.DIR;1) <S>(FEBRUARY_REPORTS.DIR;1) <S>(JANUARY_REPORTS.DIR;1) <S>(MARCH_REPORTS.DIR;1) <S>() <S>(Total of 4 files.) <S>($ <EMPHASIS>(SWITCH FEB\BOLD)) <S>(DKA0:[ACCOUNTING.FEBRUARY_REPORTS]) <ENDINTERACTIVE> <HEAD2>(Best-Guess Directory Name Matching) <P> A related feature, and one that could potentially save hours during a lifetime of sloppy typing, is <REFERENCE>(ESW)'s ability to make a "best-guess" at an incorrectly typed directory name. The same results shown in the previous example would be achieved by entering the following: <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH FEBUARY\BOLD)) <S>(DKA0:[ACCOUNTING.FEBRUARY_REPORTS]) <ENDINTERACTIVE> <P> This is accomplished by repeatedly removing the last character of the given directory name until a partial match is found or there are no characters left. Note that this can cause some confusion when there are several subdirectories with similiar names, as in the following case: <INTERACTIVE> <S>($ <EMPHASIS>(DIRECTORY/WIDTH=FILENAME=80\BOLD)) <S>() <S>(Directory DKA0:[PROGRAM]) <S>() <S>(VERSION_1.DIR;1) <S>(VERSION_2.DIR;1) <S>(VERSION_3.DIR;1) <S>() <S>(Total of 4 files.) <S>($ <EMPHASIS>(SWITCH VURSION_3\BOLD)) <S>(DKA0:[PROGRAM.VERSION_1]) <ENDINTERACTIVE> <P> Of course, explicitly supplying a wildcard character at the beginning of the parameter would make more sense in this situation. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH *3\BOLD)) <S>(DKA0:[PROGRAM.VERSION_3]) <ENDINTERACTIVE> <HEAD2>(Tilde Parameter) <P> A popular feature found in other operating systems is the ability to switch to the home directory of a user by entering his/her username preceeded by a tilde. This functionality has been incorporated into <REFERENCE>(ESW). Entering a tilde without a username will switch to the home directory of the current process as defined by the job logical SYS$LOGIN. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH ~DAVID\BOLD)) <S>(DKA0:[USER.DAVID]) <ENDINTERACTIVE> <HEAD2>(Non-VMS Specifications\PC) <P> To make changing directories as easy as possible for all different types of users, <REFERENCE>(ESW) has included support for certain non-VMS directory specifications. These include the use of the backslash (\) as a subdirectory separator, the use of multiple dots (..{.}) to switch up multiple directory levels, and partial support for the use of the forward slash (/) as a subdirectory separator. <INTERACTIVE> <S>($ <EMPHASIS>(SHOW DEFAULT\BOLD)) <S>( DKA0:[USER.DAVID]) <S>($ <EMPHASIS>(SWITCH <BACKSLASH>MANAGER<BACKSLASH>FABRITIUS\BOLD)) <S>(DKA0:[MANAGER.FABRITIUS]) <S>($ <EMPHASIS>(SWITCH ...\BOLD)) <S>(DKA0:[000000]) <S>($ <EMPHASIS>(SWITCH USER/DAVID\BOLD)) <S>(DKA0:[MANAGER.FABRITIUS]) <ENDINTERACTIVE> <P> Note that using a leading backslash causes you to switch from root of the current device, but a leading slash causes DCL to view your intended parameter as a qualifier. <HEAD2>(Devices and Concealed Logicals) <P> <REFERENCE>(ESW) attempts to make changing your device as simple and intuitive as possible. Given a device specification, <REFERENCE>(ESW) checks to see if the directory you are in exists on the new device. If so, it simply changes your device. If not, it changes to the root of the new device. <P> This same behavior occurs when using concealed logical names when given with a trailing colon. Leaving the colon off causes <REFERENCE>(ESW) to switch to the root of the concealed logical. <INTERACTIVE> <S>($ <EMPHASIS>(SHOW DEFAULT\BOLD)) <S>( DKA0:[USER.DAVID]) <S>($ <EMPHASIS>(SWITCH DKA100:\BOLD) ! has the same directory structure) <S>(DKA100:[USER.DAVID]) <S>($ <EMPHASIS>(SWITCH DKA200:\BOLD) ! has a differenet directory structure) <S>(DKA200:[000000]) <S>($ <EMPHASIS>(SWITCH CL\BOLD) ! where CL is a concealed logical) <S>(CL:[000000]) <ENDINTERACTIVE> <P> Subdirectories may also be added after the device name. You will be switched relative to your current default if it exists on the new device, or from the root if it does not. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH DKA0:USER\BOLD)) <S>(DKA0:[USER]) <S>($ <EMPHASIS>(SWITCH DKA0:DAVID\BOLD)) <S>(DKA0:[USER.DAVID]) <ENDINTERACTIVE> <HEAD2>(Default History) <P> A popular feature of <REFERENCE>(ESW) is its ability to keep track of and return to directories which have been recently visited. Up to five directories are stored and may be switched to using the /BACKWARDS[=n|str] qualifier. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH/HISTORY\BOLD)) <S>(The last five directories you visited are:) <S>() <S>( 1. DKA0:[PROJECT]) <S>( 2. DKA0:[RELATED_PROJECT]) <S>( 3. DKA0:[DATA]) <S>( 4. DKA0:[USER.DAVID.MAIL]) <S>( 5. DKA0:[USER.DAVID]) <S>($ <EMPHASIS>(SWITCH/BACK=3\BOLD)) <S>(DKA0:[DATA]) <S>($ <EMPHASIS>(SWITCH/BACK=MAIL\BOLD)) <S>(DKA0:[USER.DAVID.MAIL]) <ENDINTERACTIVE> <P> You may also use the /RECALL qualifier instead of the /HISTORY and /BACKWARDS qualifiers. The behavior of /RECALL is similar to that of the DCL command RECALL. <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH/RECALL/ALL\BOLD)) <S>(The last five directories you visited are:) <S>() <S>( 1. DKA0:[PROJECT]) <S>( 2. DKA0:[RELATED_PROJECT]) <S>( 3. DKA0:[DATA]) <S>( 4. DKA0:[USER.DAVID.MAIL]) <S>( 5. DKA0:[USER.DAVID]) <S>($ <EMPHASIS>(SWITCH/RECALL 3\BOLD)) <S>(DKA0:[DATA]) <S>($ <EMPHASIS>(SWITCH/RECALL MAIL\BOLD)) <S>(DKA0:[USER.DAVID.MAIL]) <S>($ <EMPHASIS>(SWITCH/RECALL/ERASE\BOLD)) <S>($ <EMPHASIS>(SWITCH/RECALL/ALL\BOLD)) <S>(%ESW-W-NOHIST, directory history not available.) <ENDINTERACTIVE> <HEAD2>(Updating Your Prompt) <P> Another feature found in several other operating systems is the ability to have the prompt reflect the current directory. This effect can be achieved by using switch with the /UPDATE_PROMPT qualifier. Additionally, a linefeed may be added to the beginning of the prompt to provide extra spacing. <INTERACTIVE> <S>($ SW*ITCH :== SWITCH/UPDATE_PROMPT/LINEFEED) <S>($ <EMPHASIS>(SW\BOLD)) <S>() <S>(DKA0:[USER.DAVID]<EMPHASIS>(SW <BACKSLASH>MGR<BACKSLASH>FAB\BOLD)) <S>() <S>(DKA0:[MANAGER.FABRITIUS]<EMPHASIS>(SHOW DEFAULT\BOLD)) <S>( DKA0:[MANAGER.FABRITIUS]) <S>() <S>(DKA0:[MANAGER.FABRITIUS]) <ENDINTERACTIVE> <MARK> <P> Because prompt strings are limited to 32 characters, <REFERENCE>(ESW) may shorten the prompt when necessary. Also, the prompt may include a short header (up to 8 characters), an even shorter trailer (6 characters), or both. <INTERACTIVE> <S>($ <EMPHASIS>(SW*ITCH == "SWITCH/UPDATE_PROMPT=(""(NODE)"",""_$ "")/LINEFEED"\BOLD)) <S>($ <EMPHASIS>(SW\BOLD)) <S>() <S>((NODE)DKA0:[USER.DAVID]_$ <EMPHASIS>(SW PROJECT.DATA.SAMPLES\BOLD)) <S>() <S>((NODE)DKA0:[...DATA.SAMPLES]_$) <ENDINTERACTIVE> <ENDMARK> <HEAD2>(Substitutions\SUBS) <P> When using <REFERENCE>(ESW) to update the prompt, it can be very useful to define concealed logicals which may be used to simplify the prompt string and make it more meaningful. <INTERACTIVE> <S>($! A definition such as the following:) <S>($!) <S>($ <EMPHASIS>(DEFINE/TRANS=CONCEAL PROJECT DKA0:[USER.DAVID.PROJECT.]\BOLD)) <S>($!) <S>($! Can provide a useful substitution) <S>($!) <S>($ <EMPHASIS>(SW ~DAVID.PROJ.DAT.SAMPLE\BOLD)) <S>(PROJECT:[DATA.SAMPLES]) <ENDINTERACTIVE> <P> This feature is controlled by the installation procedure because it effects the behavior of <REFERENCE>(ESW) for all users. <HEAD2>(Complex Subdirectory Specifications) <P> Several of the parameter styles described above can be combined to navigate the directory structure quickly and easily. A few of the possibilities are listed and shown below. <LIST>(UNNUMBERED) <LE> under a logical <INTERACTIVE> <S>($ <EMPHASIS>(SHOW LOGICAL DATA\BOLD)) <S>( "DATA" = "DKA0:[USER.DAVID.PROJECT.DATA]" (LNM$PROCESS_TABLE)) <S>($ <EMPHASIS>(SWITCH DATA.SAMP\BOLD)) <S>(DKA0:[USER.DAVID.PROJECT.DATA.SAMPLES]) <ENDINTERACTIVE> <LE> above a logical (also works for concealed logicals) <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH DATA....\BOLD)) <S>(DKA0:[USER]) <S>() <S>($ <EMPHASIS>(SHOW LOGICAL PROJECT\BOLD)) <S>( "PROJECT" = "DKA0:[USER.DAVID.PROJECT.]" (LNM$PROCESS_TABLE)) <S>($ <EMPHASIS>(SW PROJECT:DATA\BOLD)) <S>(PROJECT:[DATA]) <S>($ <EMPHASIS>(SWITCH ...\BOLD)) <S>(DKA0:[USER.DAVID]) <ENDINTERACTIVE> <LE> under a directory that is above a logical <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH DATA...MAIL\BOLD)) <S>(DKA0:[USER.DAVID.MAIL]) <ENDINTERACTIVE> <LE> above or below a user's home directory <INTERACTIVE> <S>($ <EMPHASIS>(SWITCH ~TOM.MAIL\BOLD)) <S>(DKA0:[USER.TOM.MAIL]) <S>($ <EMPHASIS>(SWITCH ~TOM..DAVID.PROJECT\BOLD)) <S>(DKA0:[USER.DAVID.PROJECT]) <ENDINTERACTIVE> <P> Or even something as bizarre as, <INTERACTIVE> <S>($ <EMPHASIS>(cd ~david/project/data\BOLD)) <S>(DKA0:[USER.DAVID.PROJECT.DATA]) <ENDINTERACTIVE> <ENDLIST> <APPENDIX>(<REFERENCE>(ESW) Command Reference) <P> This appendix includes a complete command reference for the <REFERENCE>(ESW) command. <COMMAND_SECTION>(Command Reference\\NEWPAGE) <COMMAND>(<REFERENCE>(CMD)) <OVERVIEW> <P> Changes your default device and directory specifications. The new default is applied to all subsequent file specifications that do not explicitly include a device or directory name. <P> When you change the default device assignment, the system equates the specified device with the process logical name SYS$DISK. <P> The commands SW and CD are synonyms of the command SWITCH. This command replaces the DCL command SET DEFAULT. <ENDOVERVIEW> <FORMAT> <FCMD>(SWITCH, SW, CD) <FPARMS>([/qualifiers] [device-name:][directory-spec]) <QUAL_LIST> <QPAIR>(/ALL\) <QPAIR>(/BACKWARDS[=n<VBAR>str]\) <QPAIR>(/ERASE\) <QPAIR>(/HISTORY\) <QPAIR>(/LINE_FEED\/NOLINEFEED) <QPAIR>(/RECALL\) <QPAIR>(/SAVE_DEFAULT\/NOSAVE_DEFAULT) <MARK> <QPAIR>(/UPDATE_PROMPT[=("header"[,"trailer"])]\) <ENDMARK> <QPAIR>(/VERSION\) <ENDQUAL_LIST> <ENDFORMAT> <PARAMDEFLIST> <PARAMITEM>(device-name:) <PARAMDEF> Specifies the name of the device to which you want to go. <PARAMITEM>(directory-spec) <PARAMDEF> Specifies the name of the directory to which you want to go. If you specify only the directory name, the current device is the default for the <EMPHASIS>(device-spec\ITALIC) parameter. If you specify neither a device nor directory name, your default will be switched to your home directory as defined by the process logical SYS$LOGIN. <ENDPARAMDEFLIST> <QUALDEFLIST> <QUALITEM>(/ALL) <QUALDEF> Used only in combination with /RECALL, this qualifier pair displays up to the last five directories which you have visited. This is functionally equivalent to using the /HISTORY qualifier. <QUALITEM>(/BACKWARDS[=n<VBAR>str]) <QUALDEF> Switches back to any of the last five directories to which you have previously switched. If a parameter is not given, the last directory is recalled. The numbers one through five or substrings contained in previous directory specifications may be used to select the desired default. These directories are stored in the logical list DEFAULT_HISTORY. <P> To see a list of your last five directories, use /HISTORY or /RECALL/ALL. <QUALITEM>(/ERASE) <QUALDEF> Used only in combination with /RECALL, this qualifier pair deletes the process logical DEFAULT_HISTORY, which is used to store recently visited directories. <QUALITEM>(/HISTORY) <QUALDEF> Displays up to the last five directories which you have visited. This is useful in conjunction with the /BACKWARDS[=n] qualifier. <QUALITEM>(/LINE_FEED) <QUALDEF> Adds a linefeed to the beginning of your prompt when used with the /UPDATE_PROMPT qualifier. <QUALITEM>(/RECALL) <QUALDEF> Switches back to any of the last five directories to which you have previously switched. If a parameter is not given, the last directory is recalled. The numbers one through five or substrings contained in previous directory specifications may be used to select the desired default. These directories are stored in the logical list DEFAULT_HISTORY. This is functionally equivalent to using the /BACKWARDS qualifier. <P> To see a list of your last five directories, use /HISTORY or /RECALL/ALL. <QUALITEM>(/SAVE_DEFAULT) <QUALDEF> Assigns the current directory specification to the logical PREVIOUS_DEFAULT. <QUALITEM>(/UPDATE_PROMPT[=("header"[,"trailer"])]) <QUALDEF> Modifies your prompt each time you switch directories to display your current default directory. This qualifier is analogous to using the prompt $p$g command on a PC. There is a 32 character limit to the length of your prompt, so directory specifications that are longer are abbreviated as DEVICE:[...SUB3.SUB4]. <MARK> <P> The optional quoted string parameters (maximum of 8 characters for the header and 6 characters for the trailer) are placed before and after the directory specification, respectively. To specify a trailer only, use the null string ("") for the header. <ENDMARK> <QUALITEM>(/VERSION) <QUALDEF> Displays the version of <REFERENCE>(ESW) currently installed on the system, including dates and times for the source code and last installation. <MARK> <P> Also displays a list of the substitutions which are defined for a given installation. <ENDMARK> <ENDQUALDEFLIST> <ENDCOMMAND_SECTION> <ENDAPPENDIX> <APPENDIX>(Sample Installation) <P> This appendix includes an example of a complete installation of <REFERENCE>(ESW) <REFERENCE>(VER). <PAGE> <INTERACTIVE>(\WIDE) $ <EMPHASIS>(@SYS$UPDATE:VMSINSTAL SWITCH045 DKA0:\BOLD) VAX/VMS Software Product Installation Procedure V6.1 It is <REFERENCE>(DATE) at 13:15. Enter a question mark (?) at any time for help. * Are you satisfied with the backup of your system disk [YES]? <KEY>(Return\BOX) The following products will be processed: SWITCH <REFERENCE>(MAJ_MIN) Beginning installation of SWITCH <REFERENCE>(MAJ_MIN) at 13:15 %VMSINSTAL-I-RESTORE, Restoring product save set A ... %VMSINSTAL-I-RELMOVED, Product's release notes have been moved to SYS$HELP. ***************************************************************** ** ** ** Extended Switch V4.5-1 ** ** ** ** Copyright (c) 1994 by David M. Fabritius ** ** ** ***************************************************************** * Do you want to purge files replaced by this installation [YES]? <KEY>(Return\BOX) * Do you wish to install the source files [YES]? <KEY>(Return\BOX) * Directory for source files? [SYS$COMMON:[SYSMGR.SWITCH]]: <KEY>(Return\BOX) * Directory for image file? [SYS$COMMON:[SYSEXE]]: <KEY>(Return\BOX) The SWITCH command can be added to the system-wide DCLTABLES, making the command available to all users, or it can be defined as a foreign command. * Do you wish to add the SWITCH command to the DCLTABLES [YES]? <KEY>(Return\BOX) * Do you wish to add SWITCH to a help library [YES]? <KEY>(Return\BOX) The follow is a list of some of the available libraries into which the help file for Extended Switch may be installed: SYS$SYSROOT:[SYSHLP]HELPLIB.HLB * Which library do you wish to use? [SYS$SYSROOT:[SYSHLP]HELPLIB.HLB]: <KEY>(Return\BOX) One of the many features of Extended Switch is its ability to subsititute concealed logicals for long directory specifications. This is especially useful when updating your prompt to indicate the current directory. For example, if a group of users has a common root such as: NODE$DKA100:[USERS.GROUP.usernames] and there is a logical definition such as: "GROUP" = "NODE$DKA100:[USERS.GROUP.]" (LNM$SYSTEM_TABLE) then Extended Switch can be configured to automatically substitute the logical name instead of using the full directory specification. (For additional explanation, please see the release notes.) * Do you want Extended Switch to make logical name substitutions [YES]? <KEY>(Return\BOX) ** CAUTION ** Invalid substitutions will cause Extended Switch to behave in unexpected ways. Please enter substitutions carefully! Please enter the specifications which are to be substituted as follows: DEVICE:[DIRECTORY.SUBDIRECTORY.] Press <Return> on a line by itself when finished. * Specification to be substituted: <EMPHASIS>(DISK$SYSTEM:[MANAGER.]\BOLD) * Logical name to be used in its place: <EMPHASIS>(MGR\BOLD) * Specification to be substituted: <KEY>(Return\BOX) You have defined the following substitutions: DISK$SYSTEM:[MANAGER.] = MGR * Are these substitutions correct [YES]? <KEY>(Return\BOX) * Do you wish to accept Unix-style directory separators [NO]? <KEY>(Return\BOX) ** No further questions will be asked during the installation. ** Creating substitution file... ** Copying source files... %VMSINSTAL-I-SYSDIR, This product creates system disk directory SYS$COMMON:[SYSMGR.SWITCH]. ** Building Ex���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P�~������ SWITCH045.A��������������������r!��/��#[FABRITIUS.ESW.SWITCH]SWITCH.SDML;1��������������������������������������������������������������������������������������������`�����B�������������������������������@�������tended Switch image... * Compiling... * Linking... ** Updating DCLTABLES... ** Updating system help file... ***************************************************************** ** ** ** To complete the installation, please add the following ** ** line to SYS$MANAGER:SYSTARTUP.COM (VMS V4.x) ** ** or SYS$MANAGER:SYSTARTUP_V5.COM (VMS V5.x): ** ** or SYS$MANAGER:SYSTARTUP_VMS.COM (VMS V6.x): ** ** ** ** $ @SYS$MANAGER:SWITCH_STARTUP.COM ** ** ** ***************************************************************** Installation of SWITCH <REFERENCE>(MAJ_MIN) completed at 13:20 VMSINSTAL procedure done at 13:20 <ENDINTERACTIVE> <ENDAPPENDIX> ����������������������������������������������������������������������������������������������������������������"�*�[FABRITIUS.ESW.SWITCH]SWITCH.TXT;1�+��,�J���.�W����/��� �4�k���W���W���������������������-�/����0���1����2���3������K��P���W���O�X����5���6�kG��7�kG��8� 4o|M��9����������G����H���J�����������������v������������ Guide to EXTENDED SWITCH September 1994 This manual describes the installation and use of Extended Switch. Revision/Update Information: This is a revised manual. Operating System and Version: All versions of VMS Software Version: Extended Switch V4.5-1 ________________________ September 15, 1994 Permission is granted to copy and redistribute this document for no commercial gain. The information in this document is subject to change without notice and should not be construed as a commitment by the author. The author assumes no responsibility for any errors that may appear in this document. DISCLAIMER: The software described in this document is provided "as is". No guarantee is made by the author as to the suitability, reliability, security, usefulness, or performance of this software. The author is not responsible for any losses that may occur from the use of this software. The following are trademarks of Digital Equipment Corporation: DEC, VAX, Alpha, AXP, and VMS. __________ Copyright 1994 David M. Fabritius. ALL RIGHTS RESERVED. This document was prepared using VAX DOCUMENT, Version 2.2. _______________________________________________________ Contents _________________________________________________ PREFACE v _______________________________________________________ CHAPTER 1 INSTALLATION INSTRUCTIONS 1-1 _________________________________________________ 1.1 PREPARING TO INSTALL EXTENDED SWITCH 1-1 1.1.1 Prerequisite Software _________ 1-1 1.1.2 Accessing the Online Release Notes _________________________ 1-1 1.1.3 Installation Procedure Requirements __________________ 1-2 _________________________________________________ 1.2 INSTALLING EXTENDED SWITCH 1-2 1.2.1 Invoking VMSINSTAL ____________ 1-2 1.2.2 Installation Options __________ 1-3 1.2.3 Disk and Directory Selection __ 1-3 1.2.4 Adding the SWITCH Command and Help File _____________________ 1-4 1.2.5 Substitution Selection ________ 1-4 1.2.6 Unix-style Directory Separators ____________________ 1-5 1.2.7 The Installation Completes ____ 1-5 _________________________________________________ 1.3 POST-INSTALLATION INFORMATION 1-6 1.3.1 Starting Extended Switch ______ 1-6 _________________________________________________ 1.4 REGISTERING YOUR INSTALLATION 1-6 iii Contents _______________________________________________________ CHAPTER 2 REFERENCE GUIDE 2-1 _________________________________________________ 2.1 PREPARING TO USE EXTENDED SWITCH 2-1 _________________________________________________ 2.2 EXTENDED SWITCH BASICS 2-1 _________________________________________________ 2.3 ADDITIONAL FEATURES 2-2 2.3.1 Partial Directory Name Matching ______________________ 2-3 2.3.2 Best-Guess Directory Name Matching ______________________ 2-3 2.3.3 Tilde Parameter _______________ 2-4 2.3.4 Non-VMS Specifications ________ 2-5 2.3.5 Devices and Concealed Logicals ______________________ 2-5 2.3.6 Default History _______________ 2-6 2.3.7 Updating Your Prompt __________ 2-7 2.3.8 Substitutions _________________ 2-8 2.3.9 Complex Subdirectory Specifications ________________ 2-8 _______________________________________________________ APPENDIX A EXTENDED SWITCH COMMAND REFERENCE A-1 SWITCH A-2 _______________________________________________________ APPENDIX B SAMPLE INSTALLATION B-1 iv _______________________________________________________ Preface Extended Switch is a VMS utility that replaces the DCL command SET DEFAULT. It provides all of the functionality of the original command as well as several enhancements and a greatly simplified user interface. Both VAX and Alpha architectures are supported by Extended Switch. __________________________________________________________________ Intended Audience This manual contains both installation instructions and a complete description of Extended Switch. The section describing the installation is intended for VMS system managers. The section describing the program itself is intended for general users. __________________________________________________________________ Acknowledgements I wish to thank Hunter Goatley for providing a working model upon which this documentation is based. I would also like to thank Jon Bohlke, Tom Hopson, Tom McCormick, and Brian Schenkenberger for their feedback and assistance in developing Extended Switch. v _______________________________________________________ 1 Installation Instructions This chapter describes the installation process for the Extended Switch utility. __________________________________________________________________ 1.1 Preparing to Install Extended Switch This section describs the steps which should be taken prior to installing Extended Switch V4.5-1. ___________________________ 1.1.1 Prerequisite Software Extended Switch should work with all versions of VMS. It has been tested on versions 4.7 and above. ___________________________ 1.1.2 Accessing the Online Release Notes Extended Switch provides online release notes, which can be displayed or printed using VMSINSTAL with the OPTIONS N parameter. After the installation, the release notes may be read by printing the file SYS$HELP:SWITCHvvn.RELEASE_NOTES, where "vvn" denotes the version number of the software. For example, for version V4.5-1 of Extended Switch, the file name would be SWITCH045. 1-1 Installation Instructions ___________________________ 1.1.3 Installation Procedure Requirements Before installing Extended Switch, ensure that the following privileges, resources, and requirements are met: o All the normal privileges and quotas of the default SYSTEM account. o Approximately 5 to 15 minutes, depending on your system configuration, distribution medium, and options selected. o Approximately 900 free blocks on a disk for use during the installation procedure; this can be the system disk or a disk specified with the VMSINSTAL AWD option. o Approximately 450 free blocks on the system disk for a full installation including source code and related files. __________________________________________________________________ 1.2 Installing Extended Switch Extended Switch uses VMSINSTAL for installation. For more information on how to use VMSINSTAL, read the chapter on installing software in the VMS System Manager's Manual. To perform the installation, log into the SYSTEM account or another suitably privileged account. ___________________________ 1.2.1 Invoking VMSINSTAL Invoke VMSINSTAL to install Extended Switch. $ @SYS$UPDATE:VMSINSTAL SWITCHvvn ddcu: 1-2 Installation Instructions Substitute the appropriate values for vvn and ddcu. VAX/VMS Software Product Installation Procedure Vv.n It is DD-MMM-YYYY at hh:mm. Enter a question mark (?) at any time for help. If there are any users logged into the system, the following message will be displayed: %VMSINSTAL-W-ACTIVE, The following processes are still active: ...process names... Extended Switch may be installed while users are logged in, although it will not be available as a command verb until they log out and back in again. * Do you want to continue anyway [NO]? YES * Are you satisfied with the backup of your system disk [YES]? <Return> Answer NO to abort the installation if it is necessary to perform a backup. ___________________________ 1.2.2 Installation Options The next question is: * Do you want to purge files replaced by this installation [YES]? <Return> If this is the first installation of Extended Switch, answering NO to this question can save some time when the Extended Switch files are moved into their directories. ___________________________ 1.2.3 Disk and Directory Selection To install the source code, documentation, and/or help files for Extended Switch, a target directory is created during the installation procedure. Additionally, the following three files will be installed to make Extended Switch available to all users of the system: 1-3 Installation Instructions o The executable image. Normally installed in SYS$COMMON:[SYSEXE]. o The startup file. Installed in SYS$MANAGER. o The release notes. Installed in SYS$HELP. * Do you wish to install the source files [YES]? <Return> * Directory for source files? [SYS$COMMON:[SYSMGR.SWITCH]]: <Return> * Directory for image file? [SYS$COMMON:[SYSEXE]]: <Return> ___________________________ 1.2.4 Adding the SWITCH Command and Help File To make Extended Switch and its help available to all users in the same way that DEC layered products are, answer YES to the following questions. If Extended Switch is not added to the DCLTABLES, it may be defined as a foreign command. * Do you wish to add the SWITCH command to the DCLTABLES [YES]? <Return> * Do you wish to add SWITCH to a help library [YES]? <Return> Enter the name of the help library into which the help for Extended Switch should be installed. The follow is a list of some of the available libraries into which the help file for Extended Switch may be installed: SYS$SYSROOT:[SYSHLP]HELPLIB.HLB * Which library do you wish to use? [SYS$SYSROOT:[SYSHLP]HELPLIB.HLB]: <Return> ___________________________ 1.2.5 Substitution Selection At this point, the substitutions which Extended Switch is to make are defined. Additional information concerning substitions may be found in Section 2.3.8. Simply enter the substitutions to be made or press <Return> to continue the installation. 1-4 Installation Instructions * Do you want Extended Switch to make logical name substitutions [YES]? <Return> * Specification to be substituted: DISK$SYS3140:[MANAGER.] * Logical name to be used in its place: MICRO$MGR * Specification to be substituted: <Return> The substitutions are then redisplayed for verification. Answering YES will accept the substitutions as shown. Answering NO will restart the definition process. You have defined the following substitutions: DISK$SYS3140:[MANAGER.] = MICRO$MGR * Are these substitutions correct [YES]? <Return> ___________________________ 1.2.6 Unix-style Directory Separators The last question which is asked concerns the use of forward slashes as directory separators. While this is the way of things in the Unix world, this is not how VMS works. The DCL command language interpreter can be forced to accept forward slashes as part of a parameter, but doing so limits where valid qualifiers may be placed on the command line and what error checking the CLI can do. Each site must weigh the advantages and disadvantages associated with providing this feature and decide whether or not it is appropriate. * Do you wish to accept Unix-style directory separators [NO]? <Return> ___________________________ 1.2.7 The Installation Completes After the configuration questions, the installation completes in accordance with the given input. Files are copied from the installation kit, the Extended Switch image is compiled and linked, and all installed files are copied to their destination directories. 1-5 Installation Instructions Informational messages about the individual components are displayed when appropriate. __________________________________________________________________ 1.3 Post-Installation Information This section contains startup information for Extended Switch. ___________________________ 1.3.1 Starting Extended Switch Once the installation is complete, Extended Switch can be used by simply entering the SWITCH command. To make all features of Extended Switch automatically available at system startup, add a line similar to the following to the system startup procedure: $ @SYS$MANAGER:SWITCH_STARTUP.COM This will install the Extended Switch image with the SYSPRV privilege. This is used only to allow users to read the home directory of other users out of the authorization file. __________________________________________________________________ 1.4 Registering Your Installation Extended Switch is freely distributable software, and no license is required to use it. Registration of your installation is at your discretion and is used by the author only to determine the size of the Extended Switch user base and the future directions for the program. To register, simply send a note to the author with the following information: Installer's name Company name and address System(s) on which the Extended Switch is running Any comments and/or suggestions you might have 1-6 Installation Instructions You can send it electronically to: FabritDM@CS.Rose- Hulman.Edu, or by mail to the following address: David Fabritius 1001 4th Avenue, Suite 2830 Seattle, WA 98154 USA 1-7 _______________________________________________________ 2 Reference Guide This chapter describes Extended Switch, its uses, and its enhancements over the DCL command SET DEFAULT. Examples demostrating the various features are also provided. __________________________________________________________________ 2.1 Preparing to Use Extended Switch Extended Switch may be installed in the system-wide DCL command tables or may be provided as a foreign command. If the SWITCH command is not automatically available, it may be defined as a foreign command as follows: $ SW*ITCH :== $SWITCH$EXE:SWITCH Any symbol name may be used in place of SW*ITCH, including CD, SD, or other popular favorites. Also, any desired qualifiers may be added, such as /UPDATE_ PROMPT/LINE_FEED. __________________________________________________________________ 2.2 Extended Switch Basics Extended Switch gives the VMS user an easy and convenient way to navigate among available devices and directories. Unlike the DCL command SET DEFAULT, Extended Switch uses a very simple, straight-forward syntax. For example, to switch to a subdirectory using SET DEFAULT, the command is given as: $ SET DEFAULT [.SUBDIRECTORY] 2-1 Reference Guide This is very cumbersome and confusing, especially to new users; and even experienced users must contend with entering this awkard syntax. Using Extended Switch makes this much easier, simply enter the command: $ SWITCH SUBDIRECTORY To switch down several subdirectory levels, use dots (or backslashes, see Section 2.3.4) as separators. $ SWITCH SUB1.SUB2.SUB3 __________________________________________________________________ 2.3 Additional Features Ease of use is a primary advantage provided by Extended Switch. However, a simplified syntax is only a small part of what makes it valuable. Other features include: o Verification of the destination directory o Partial directory name matching o Best-guess directory name matching o Switching to a user's home directory using ~username o Support for non-VMS directory specifications o Easily switching to the root of devices or concealed logicals o Switching back to previously visited directories o Updating the prompt to display the current directory o Substitution of concealed logicals for commonly used defaults o Saving the current default to a logical when switching to a new one o Switching to subdirectories from logicals or tilde specifications 2-2 Reference Guide Many of the above features may be combined to make Extended Switch an extremely powerful and effective tool. ___________________________ 2.3.1 Partial Directory Name Matching One of the most convenient features of Extended Switch is its ability to recognize a partially specified directory name. Now it is possible to give meaningful names to subdirectories without the drawback of having to type them out in full when switching into them. For example: $ DIRECTORY/WIDTH=FILENAME=80 Directory DKA0:[ACCOUNTING] APRIL_REPORTS.DIR;1 FEBRUARY_REPORTS.DIR;1 JANUARY_REPORTS.DIR;1 MARCH_REPORTS.DIR;1 Total of 4 files. $ SWITCH FEB DKA0:[ACCOUNTING.FEBRUARY_REPORTS] ___________________________ 2.3.2 Best-Guess Directory Name Matching A related feature, and one that could potentially save hours during a lifetime of sloppy typing, is Extended Switch's ability to make a "best-guess" at an incorrectly typed directory name. The same results shown in the previous example would be achieved by entering the following: $ SWITCH FEBUARY DKA0:[ACCOUNTING.FEBRUARY_REPORTS] 2-3 Reference Guide This is accomplished by repeatedly removing the last character of the given directory name until a partial match is found or there are no characters left. Note that this can cause some confusion when there are several subdirectories with similiar names, as in the following case: $ DIRECTORY/WIDTH=FILENAME=80 Directory DKA0:[PROGRAM] VERSION_1.DIR;1 VERSION_2.DIR;1 VERSION_3.DIR;1 Total of 4 files. $ SWITCH VURSION_3 DKA0:[PROGRAM.VERSION_1] Of course, explicitly supplying a wildcard character at the beginning of the parameter would make more sense in this situation. $ SWITCH *3 DKA0:[PROGRAM.VERSION_3] ___________________________ 2.3.3 Tilde Parameter A popular feature found in other operating systems is the ability to switch to the home directory of a user by entering his/her username preceeded by a tilde. This functionality has been incorporated into Extended Switch. Entering a tilde without a username will switch to the home directory of the current process as defined by the job logical SYS$LOGIN. $ SWITCH ~DAVID DKA0:[USER.DAVID] 2-4 Reference Guide ___________________________ 2.3.4 Non-VMS Specifications To make changing directories as easy as possible for all different types of users, Extended Switch has included support for certain non-VMS directory specifications. These include the use of the backslash (\) as a subdirectory separator, the use of multiple dots (..{.}) to switch up multiple directory levels, and partial support for the use of the forward slash (/) as a subdirectory separator. $ SHOW DEFAULT DKA0:[USER.DAVID] $ SWITCH \MANAGER\FABRITIUS DKA0:[MANAGER.FABRITIUS] $ SWITCH ... DKA0:[000000] $ SWITCH USER/DAVID DKA0:[MANAGER.FABRITIUS] Note that using a leading backslash causes you to switch from root of the current device, but a leading slash causes DCL to view your intended parameter as a qualifier. ___________________________ 2.3.5 Devices and Concealed Logicals Extended Switch attempts to make changing your device as simple and intuitive as possible. Given a device specification, Extended Switch checks to see if the directory you are in exists on the new device. If so, it simply changes your device. If not, it changes to the root of the new device. This same behavior occurs when using concealed logical names when given with a trailing colon. Leaving the colon off causes Extended Switch to switch to the root of the concealed logical. 2-5 Reference Guide $ SHOW DEFAULT DKA0:[USER.DAVID] $ SWITCH DKA100: ! has the same directory structure DKA100:[USER.DAVID] $ SWITCH DKA200: ! has a differenet directory structure DKA200:[000000] $ SWITCH CL ! where CL is a concealed logical CL:[000000] Subdirectories may also be added after the device name. You will be switched relative to your current default if it exists on the new device, or from the root if it does not. $ SWITCH DKA0:USER DKA0:[USER] $ SWITCH DKA0:DAVID DKA0:[USER.DAVID] ___________________________ 2.3.6 Default History A popular feature of Extended Switch is its ability to keep track of and return to directories which have been recently visited. Up to five directories are stored and may be switched to using the /BACKWARDS[=n|str] qualifier. $ SWITCH/HISTORY The last five directories you visited are: 1. DKA0:[PROJECT] 2. DKA0:[RELATED_PROJECT] 3. DKA0:[DATA] 4. DKA0:[USER.DAVID.MAIL] 5. DKA0:[USER.DAVID] $ SWITCH/BACK=3 DKA0:[DATA] $ SWITCH/BACK=MAIL DKA0:[USER.DAVID.MAIL] 2-6 Reference Guide You may also use the /RECALL qualifier instead of the /HISTORY and /BACKWARDS qualifiers. The behavior of /RECALL is similar to that of the DCL command RECALL. $ SWITCH/RECALL/ALL The last five directories you visited are: 1. DKA0:[PROJECT] 2. DKA0:[RELATED_PROJECT] 3. DKA0:[DATA] 4. DKA0:[USER.DAVID.MAIL] 5. DKA0:[USER.DAVID] $ SWITCH/RECALL 3 DKA0:[DATA] $ SWITCH/RECALL MAIL DKA0:[USER.DAVID.MAIL] $ SWITCH/RECALL/ERASE $ SWITCH/RECALL/ALL %ESW-W-NOHIST, directory history not available. ___________________________ 2.3.7 Updating Your Prompt Another feature found in several other operating systems is the ability to have the prompt reflect the current directory. This effect can be achieved by using switch with the /UPDATE_PROMPT qualifier. Additionally, a linefeed may be added to the beginning of the prompt to provide extra spacing. $ SW*ITCH :== SWITCH/UPDATE_PROMPT/LINEFEED $ SW DKA0:[USER.DAVID]SW \MGR\FAB DKA0:[MANAGER.FABRITIUS]SHOW DEFAULT DKA0:[MANAGER.FABRITIUS] DKA0:[MANAGER.FABRITIUS] 2-7 Reference Guide | Because prompt strings are limited to 32 characters, | Extended Switch may shorten the prompt when necessary. | Also, the prompt may include a short header (up to 8 | characters), an even shorter trailer (6 characters), | or both. | | $ SW*ITCH == "SWITCH/UPDATE_PROMPT=(""(NODE)"",""_$ "")/LINEFEED" | $ SW | | (NODE)DKA0:[USER.DAVID]_$ SW PROJECT.DATA.SAMPLES | | (NODE)DKA0:[...DATA.SAMPLES]_$ _____����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w�~������ SWITCH045.A��������������������J��/��"[FABRITIUS.ESW.SWITCH]SWITCH.TXT;1���������������������������������������������������������������������������������������������k�����W�������������������������B�8�����<�������______________________ 2.3.8 Substitutions When using Extended Switch to update the prompt, it can be very useful to define concealed logicals which may be used to simplify the prompt string and make it more meaningful. $! A definition such as the following: $! $ DEFINE/TRANS=CONCEAL PROJECT DKA0:[USER.DAVID.PROJECT.] $! $! Can provide a useful substitution $! $ SW ~DAVID.PROJ.DAT.SAMPLE PROJECT:[DATA.SAMPLES] This feature is controlled by the installation procedure because it effects the behavior of Extended Switch for all users. ___________________________ 2.3.9 Complex Subdirectory Specifications Several of the parameter styles described above can be combined to navigate the directory structure quickly and easily. A few of the possibilities are listed and shown below. o under a logical 2-8 Reference Guide $ SHOW LOGICAL DATA "DATA" = "DKA0:[USER.DAVID.PROJECT.DATA]" (LNM$PROCESS_TABLE) $ SWITCH DATA.SAMP DKA0:[USER.DAVID.PROJECT.DATA.SAMPLES] o above a logical (also works for concealed logicals) $ SWITCH DATA.... DKA0:[USER] $ SHOW LOGICAL PROJECT "PROJECT" = "DKA0:[USER.DAVID.PROJECT.]" (LNM$PROCESS_TABLE) $ SW PROJECT:DATA PROJECT:[DATA] $ SWITCH ... DKA0:[USER.DAVID] o under a directory that is above a logical $ SWITCH DATA...MAIL DKA0:[USER.DAVID.MAIL] o above or below a user's home directory $ SWITCH ~TOM.MAIL DKA0:[USER.TOM.MAIL] $ SWITCH ~TOM..DAVID.PROJECT DKA0:[USER.DAVID.PROJECT] Or even something as bizarre as, $ cd ~david/project/data DKA0:[USER.DAVID.PROJECT.DATA] 2-9 _______________________________________________________ A Extended Switch Command Reference This appendix includes a complete command reference for the Extended Switch command. A-1 SWITCH _______________________________________________________ SWITCH Changes your default device and directory specifications. The new default is applied to all subsequent file specifications that do not explicitly include a device or directory name. When you change the default device assignment, the system equates the specified device with the process logical name SYS$DISK. The commands SW and CD are synonyms of the command SWITCH. This command replaces the DCL command SET DEFAULT. _______________________________________________________ FORMAT SWITCH, SW, CD [/qualifiers] [device-name:][directory-spec] _______________________________________________________ Command Qualifiers Defaults /ALL /BACKWARDS[=n|str] /ERASE /HISTORY /LINE_FEED /NOLINEFEED /RECALL /SAVE_DEFAULT /NOSAVE_DEFAULT | /UPDATE_PROMPT[=("header"[,"trailer"])] /VERSION A-2 SWITCH _______________________________________________________ PARAMETERS device-name: Specifies the name of the device to which you want to go. directory-spec Specifies the name of the directory to which you want to go. If you specify only the directory name, the current device is the default for the device- spec parameter. If you specify neither a device nor directory name, your default will be switched to your home directory as defined by the process logical SYS$LOGIN. _______________________________________________________ QUALIFIERS /ALL Used only in combination with /RECALL, this qualifier pair displays up to the last five directories which you have visited. This is functionally equivalent to using the /HISTORY qualifier. /BACKWARDS[=n|str] Switches back to any of the last five directories to which you have previously switched. If a parameter is not given, the last directory is recalled. The numbers one through five or substrings contained in previous directory specifications may be used to select the desired default. These directories are stored in the logical list DEFAULT_HISTORY. To see a list of your last five directories, use /HISTORY or /RECALL/ALL. /ERASE Used only in combination with /RECALL, this qualifier pair deletes the process logical DEFAULT_HISTORY, which is used to store recently visited directories. A-3 SWITCH /HISTORY Displays up to the last five directories which you have visited. This is useful in conjunction with the /BACKWARDS[=n] qualifier. /LINE_FEED Adds a linefeed to the beginning of your prompt when used with the /UPDATE_PROMPT qualifier. /RECALL Switches back to any of the last five directories to which you have previously switched. If a parameter is not given, the last directory is recalled. The numbers one through five or substrings contained in previous directory specifications may be used to select the desired default. These directories are stored in the logical list DEFAULT_HISTORY. This is functionally equivalent to using the /BACKWARDS qualifier. To see a list of your last five directories, use /HISTORY or /RECALL/ALL. /SAVE_DEFAULT Assigns the current directory specification to the logical PREVIOUS_DEFAULT. /UPDATE_PROMPT[=("header"[,"trailer"])] Modifies your prompt each time you switch directories to display your current default directory. This qualifier is analogous to using the prompt $p$g command on a PC. There is a 32 character limit to the length of your prompt, so directory specifications that are longer are abbreviated as DEVICE:[...SUB3.SUB4]. | The optional quoted string parameters (maximum of 8 | characters for the header and 6 characters for the | trailer) are placed before and after the directory | specification, respectively. To specify a trailer | only, use the null string ("") for the header. A-4 SWITCH /VERSION Displays the version of Extended Switch currently installed on the system, including dates and times for the source code and last installation. | Also displays a list of the substitutions which are | defined for a given installation. A-5 _______________________________________________________ B Sample Installation This appendix includes an example of a complete installation of Extended Switch V4.5-1. B-1 Sample Installation $ @SYS$UPDATE:VMSINSTAL SWITCH045 DKA0: VAX/VMS Software Product Installation Procedure V6.1 It is 15-SEP-1994 at 13:15. Enter a question mark (?) at any time for help. * Are you satisfied with the backup of your system disk [YES]? <Return> The following products will be processed: SWITCH V4.5 Beginning installation of SWITCH V4.5 at 13:15 %VMSINSTAL-I-RESTORE, Restoring product save set A ... %VMSINSTAL-I-RELMOVED, Product's release notes have been moved to SYS$HELP. ***************************************************************** ** ** ** Extended Switch V4.5-1 ** ** ** ** Copyright (c) 1994 by David M. Fabritius ** ** ** ***************************************************************** * Do you want to purge files replaced by this installation [YES]? <Return> * Do you wish to install the source files [YES]? <Return> * Directory for source files? [SYS$COMMON:[SYSMGR.SWITCH]]: <Return> * Directory for image file? [SYS$COMMON:[SYSEXE]]: <Return> The SWITCH command can be added to the system-wide DCLTABLES, making the command available to all users, or it can be defined as a foreign command. * Do you wish to add the SWITCH command to the DCLTABLES [YES]? <Return> * Do you wish to add SWITCH to a help library [YES]? <Return> The follow is a list of some of the available libraries into which the help file for Extended Switch may be installed: SYS$SYSROOT:[SYSHLP]HELPLIB.HLB * Which library do you wish to use? [SYS$SYSROOT:[SYSHLP]HELPLIB.HLB]: <Return> B-2 Sample Installation One of the many features of Extended Switch is its ability to subsititute concealed logicals for long directory specifications. This is especially useful when updating your prompt to indicate the current directory. For example, if a group of users has a common root such as: NODE$DKA100:[USERS.GROUP.usernames] and there is a logical definition such as: "GROUP" = "NODE$DKA100:[USERS.GROUP.]" (LNM$SYSTEM_TABLE) then Extended Switch can be configured to automatically substitute the logical name instead of using the full directory specification. (For additional explanation, please see the release notes.) * Do you want Extended Switch to make logical name substitutions [YES]? <Return> ** CAUTION ** Invalid substitutions will cause Extended Switch to behave in unexpected ways. Please enter substitutions carefully! Please enter the specifications which are to be substituted as follows: DEVICE:[DIRECTORY.SUBDIRECTORY.] Press <Return> on a line by itself when finished. * Specification to be substituted: DISK$SYSTEM:[MANAGER.] * Logical name to be used in its place: MGR * Specification to be substituted: <Return> You have defined the following substitutions: DISK$SYSTEM:[MANAGER.] = MGR * Are these substitutions correct [YES]? <Return> * Do you wish to accept Unix-style directory separators [NO]? <Return> ** No further questions will be asked during the installation. ** Creating substitution file... ** Copying source files... %VMSINSTAL-I-SYSDIR, This product creates system disk directory SYS$COMMON:[SYSMGR.SWITCH]. ** Building Extended Switch image... B-3 Sample Installation * Compiling... * Linking... ** Updating DCLTABLES... ** Updating system help file... ***************************************************************** ** ** ** To complete the installation, please add the following ** ** line to SYS$MANAGER:SYSTARTUP.COM (VMS V4.x) ** ** or SYS$MANAGER:SYSTARTUP_V5.COM (VMS V5.x): ** ** or SYS$MANAGER:SYSTARTUP_VMS.COM (VMS V6.x): ** ** ** ** $ @SYS$MANAGER:SWITCH_STARTUP.COM ** ** ** ***************************************************************** Installation of SWITCH V4.5 completed at 13:20 VMSINSTAL procedure done at 13:20 B-4 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#�*�[FABRITIUS.ESW.SWITCH]SWITCH.UNIX;1�+��,�B0���.�����/��� �4�C��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�||M��9����������G����H���J����������������������������! SWITCH.CLD V4.5-1 15-SEP-1994 ! Unix support version: Will accept parameters with forward slashes ! define verb switch synonym sw synonym cd image "switch$exe:switch" parameter p1 label=switch_parm value (default="",type=$rest_of_line) qualifier all nonnegatable qualifier backwards nonnegatable value (default="1") syntax=no_params qualifier erase nonnegatable qualifier history nonnegatable syntax=no_params qualifier line_feed qualifier recall nonnegatable qualifier save_default qualifier update_prompt value (list,default="",type=$quoted_string) qualifier version nonnegatable syntax=no_params disallow any2 (save_default, history, recall, version) disallow any2 (backwards, history, recall, version) disallow (all or erase) and not recall define syntax no_params noparameters �������������������������������������������������������������������������������������������������������������������������/�*�[FABRITIUS.ESW.SWITCH]SWITCH045.RELEASE_NOTES;1�+��,�V���.�����/��� �4�L��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�@UL��9����������G����H���J����:������������ EXTENDED SWITCH Release Notes September 1994 This file contains the release notes for Extended Switch V4.5-1. It describes any features, restrictions, changes, or additions made to Extended Switch in this release, and includes information that is not provided in the Extended Switch Reference Guide. Revision/Update Information: This is a revised manual. Operating System and Version: All versions of VMS. Software version: Extended Switch V4.5-1 ________________________ September 15, 1994 Permission is granted to copy and redistribute this document for no commercial gain. The information in this document is subject to change without notice and should not be construed as a commitment by the author. The author assumes no responsibility for any errors that may appear in this document. DISCLAIMER: The software described in this document is provided "as is". No guarantee is made by the author as to the suitability, reliability, security, usefulness, or performance of this software. The author is not responsible for any losses that may occur from the use of this software. The following are trademarks of Digital Equipment Corporation: DEC, VAX, Alpha, AXP, and VMS. __________ Copyright 1994 David M. Fabritius. ALL RIGHTS RESERVED. This document was prepared using VAX DOCUMENT, Version 2.2. _______________________________________________________ Contents _________________________________________________ PREFACE v _______________________________________________________ CHAPTER 1 INSTALLATION NOTES 1-1 _________________________________________________ 1.1 ACCESSING THE INSTALLATION GUIDE 1-1 _________________________________________________ 1.2 COMMANDS 1-1 _________________________________________________ 1.3 ON-LINE HELP 1-2 _________________________________________________ 1.4 SUBSTITUTIONS 1-2 _______________________________________________________ CHAPTER 2 NEW FEATURES AND BUG FIXES 2-1 _________________________________________________ 2.1 NEW FEATURES 2-1 _________________________________________________ 2.2 BUG FIXES 2-2 _______________________________________________________ CHAPTER 3 BRIEF HISTORY 3-1 iii Contents _______________________________________________________ CHAPTER 4 KNOWN BUGS AND RESTRICTIONS 4-1 _________________________________________________ 4.1 BUGS 4-1 _________________________________________________ 4.2 RESTRICTIONS 4-1 _________________________________________________ 4.3 PROBLEM REPORTS 4-1 iv _______________________________________________________ Preface Extended Switch is a VMS utility that replaces the DCL command SET DEFAULT. It provides all of the functionality of the original command as well as several enhancements and a greatly simplified user interface. Both VAX and Alpha architectures are supported by Extended Switch. __________________________________________________________________ Intended Audience This manual is intended for all system users. Please read these release notes before installing Extended Switch V4.5-1. __________________________________________________________________ Acknowledgements I wish to thank Hunter Goatley for providing a working model upon which this documentation is based. I would also like to thank Jon Bohlke, Tom Hopson, Tom McCormick, and Brian Schenkenberger for their feedback and assistance during the development of Extended Switch. v _______________________________________________________ 1 Installation Notes This chapter contains items of interest pertaining to the installation of Extended Switch. __________________________________________________________________ 1.1 Accessing the Installation Guide The distribution kit includes an Installation/Reference Guide which you may wish to extract and print prior to the actual installation. Postscript and plain ASCII text versions of the manual are included. To extract both of these formats, use the following command: $ BACKUP SWITCH045.A/SAVE/SEL=(SWITCH.PS,SWITCH.TXT) *.* __________________________________________________________________ 1.2 Commands The commands used to invoke Extended Switch are normally placed in the system-wide DCL command tables (SYS$LIBRARY:DCLTABLES.EXE) during installation. The installation gives you the option of adding the commands to the DCL command tables or not. It is recommended that you do so to make Extended Switch available to all users on the system. Extended Switch may also be defined as a foreign command. 1-1 Installation Notes __________________________________________________________________ 1.3 On-line Help During the installation, you will be given the option of installing the help file for Extended Switch in a help library (the default is SYS$SYSROOT:[SYSHLP]HELPLIB.HLB). The on-line help files can be found in the directory where you choose to install them during the installation. __________________________________________________________________ 1.4 Substitutions One of the many features of Extended Switch is its ability to substitute concealed logicals for long directory specifications. This is especially useful when updating your prompt to indicate the current directory. For example, if a group of users has a common root such as: NODE$DKA100:[USERS.GROUP.usernames] and there is a logical definition such as: "GROUP" = "NODE$DKA100:[USERS.GROUP.]" (LNM$SYSTEM_TABLE) then Extended Switch can be configured to automatically substitute the logical name instead of using the full directory specification. This is done by simply providing this information during the installation procedure, where it is complied into the program itself. Because this information becomes a part of the executable image, these substitutions are always checked for every activation. Therefore, relatively few substitutions should be defined; and preferably only those that apply to a large percentage of the users of this utility. Performance was considered to be more important than flexibility when this feature was designed and implemented. 1-2 _______________________________________________________ 2 New Features and Bug Fixes This chapter describes changes from the original release of Extended Switch to the current release. __________________________________________________________________ 2.1 New Features | The following new features have been added. | V4.5-1: | | 1 Several code modifications were made to allow | for correct compilation on both the VAX and Alpha | architectures. | | 2 Instead of always changing both the device and the | directory, logic has been added to determine whether | or not the device should be changed. This corrects | problems when dealing with devices which are really | concealed logical lists. | | 3 Extremely long directory names are now better | supported when updating the prompt. Instead of | returning to the default dollar sign prompt, a | truncated subdirectory string with a continuation | symbol is displayed. | | 4 The /UPDATE_PROMPT qualifier now takes two optional | quoted string arguments. The first is added to the | beginning of the prompt, the second is placed at the | end. | | 5 Prompt values are now checked to ensure that they | are quoted strings. | | 6 The substitutions which are defined for the current | installation are displayed when using the /VERSION | qualifier. 2-1 New Features and Bug Fixes V4.4-3: 1 Extended Switch is now available as a foreign command. 2 The help file may now be installed into any available library. 3 The /RECALL qualifier, along with the /ALL and /ERASE qualifiers, where added to provide an interface to default history information that is consistent with the DCL command RECALL. 4 Repeatedly switching to the same directory no longer fills your default history with the current directory. This is also consistent with the DCL command RECALL. 5 Both the /BACKWARDS and /RECALL qualifiers accept substrings of previous defaults, as well as the numbers one through five, to select the desired default directory. __________________________________________________________________ 2.2 Bug Fixes The following bug fixes have been made. | V4.5-1: | | 1 When the default device is concealed logical list, | but the default directory does not exist under all | devices in the list, it is now possible to switch | up and out normally. The default device is modified | to indicated that the current default is no longer a | valid member of the concealed logical list. | | 2 Switching up from a subdirectory of a device that | is really a list of concealed logicals no longer | changes your device. | | 3 The processing of multiple dots to switch up | directory levels has been modified to work correctly | on the Alpha. 2-2 New Features and Bug Fixes | 4 Specifying a prompt string of a single letter no | longer causes a stack dump. V4.4-3: 1 A minor bug when using a single dot, 'SWITCH .', to switch to the current directory has been corrected. 2-3 _______________________________________________________ 3 Brief History This is the third version of Extended Switch that has been widely released. A detailed history of this program may be found in the comments of the source code. This program has been in use for several years at Rose-Hulman Institute of Technology, where Switch was originally developed in MACRO32 by Bob Shew. Since that time, I have expanded the scope of the program and rewritten it in both Pascal and C, and finally once again in MACRO32. Extended Switch is currently being used by sites in the Netherlands, Germany, Australia, Italy, Canada, and the US. I would very much like to add to this list. 3-1 _______________________________________________________ 4 Known Bugs and Restrictions This chapter describes the known bugs and restrictions of Extended Switch V4.5-1. __________________________________________________________________ 4.1 Bugs | There are no known undesired features as of this | version of Extended Switch. __________________________________________________________________ 4.2 Restrictions Extended Switch V4.5-1 does not properly handle a node qualified default specification. The following are examples of unsupported specifications which are allowed when using SET DEFAULT. $ SET DEFAULT NODE::DKA0:[000000] $ SET DEFAULT NODE"optional-username password"::DKA0:[000000] __________________________________________________________________ 4.3 Problem Reports The author may be contacted via the internet at FabritDM@CS.Rose-Hulman.Edu. Feedback is both welcome and encouraged. Due to the fact that the author does not, unforunately, have direct access to an Alpha, exhaustive testing on this platform has not been completed. If you have any problems using Extended Switch on an Alpha system, please let me know so that I can investigate, and hopefully correct, the problem. 4-1 ������������������������&�*�[FABRITIUS.ESW.SWITCH]SWITCH045.SDML;1�+��,�v���.�����/��� �4�P��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�`|M��9����������G����H���J�������������������������<COMMENT> ! ! Copyright 1993,1994 by David Fabritius. All rights reserved. This code ! may be freely distributed and modified for non-commercial purposes as ! long as this copyright notice is retained. ! File: SWITCH045.SDML Author: David Fabritius, FABRITDM@CS.ROSE-HULMAN.EDU Date: October 15, 1993 Abstract: VAX DOCUMENT source file for the _Extended Switch Release Notes_. It was created almost entirely by using Hunter Goatley's _Supervisor Series Release Notes_ as a template. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �~������ SWITCH045.A��������������������v��/��&[FABRITIUS.ESW.SWITCH]SWITCH045.SDML;1�����������������������������������������������������������������������������������������P������������������������������ �(������������ Modified by: 01-004 David Fabritius 15-SEP-1994 Updated for V4.5-1 01-003 David Fabritius 15-JUN-1994 Updated for V4.5 01-002 David Fabritius 15-JAN-1994 Updated for V4.4-4 01-001 David Fabritius 01-NOV-1993 Updated for V4.4-3 01-000 David Fabritius 15-OCT-1993 <ENDCOMMENT> <DEFINE_SYMBOL>(ESW\Extended Switch) <DEFINE_SYMBOL>(VER\V4.5-1) <DEFINE_SYMBOL>(MAJ_MIN\V4.5) <DEFINE_SYMBOL>(MONTH\September) <DEFINE_SYMBOL>(DAY\15) <DEFINE_SYMBOL>(YEAR\1994) <FRONT_MATTER> <TITLE_PAGE> <TITLE>(EXTENDED SWITCH Release Notes) <ABSTRACT>(<REFERENCE>(MONTH) <REFERENCE>(YEAR)) <P> This file contains the release notes for <REFERENCE>(ESW) <REFERENCE>(VER). It describes any features, restrictions, changes, or additions made to <REFERENCE>(ESW) in this release, and includes information that is not provided in the <REFERENCE>(ESW) Reference Guide. <ENDABSTRACT> <REVISION> <REVISION_INFO>(This is a revised manual.) <REVISION_INFO>(Operating System and Version:\All versions of VMS.) <REVISION_INFO>(Software version:\<REFERENCE>(ESW) <REFERENCE>(VER)) <ENDTITLE_PAGE> <COPYRIGHT_PAGE> <PRINT_DATE>(<REFERENCE>(MONTH) <REFERENCE>(DAY), <REFERENCE>(YEAR)) <P> Permission is granted to copy and redistribute this document for no commercial gain. <P> The information in this document is subject to change without notice and should not be construed as a commitment by the author. The author assumes no responsibility for any errors that may appear in this document. <P> <EMPHASIS>(DISCLAIMER:\BOLD) The software described in this document is provided <QUOTE>(<EMPHASIS>(as is\BOLD)). No guarantee is made by the author as to the suitability, reliability, security, usefulness, or performance of this software. <P> The author is not responsible for any losses that may occur from the use of this software. <P>The following are trademarks of Digital Equipment Corporation: DEC, VAX, Alpha, AXP, and VMS. <COPYRIGHT_DATE>(<REFERENCE>(YEAR)\David M. Fabritius. ALL RIGHTS RESERVED.) <ENDCOPYRIGHT_PAGE>(This document was prepared using VAX DOCUMENT, Version 2.2.) <CONTENTS_FILE> <PREFACE> <P> <REFERENCE>(ESW) is a VMS utility that replaces the DCL command SET DEFAULT. It provides all of the functionality of the original command as well as several enhancements and a greatly simplified user interface. Both VAX and Alpha architectures are supported by <REFERENCE>(ESW). <HEAD1>(Intended Audience) <P> This manual is intended for all system users. Please read these release notes before installing <REFERENCE>(ESW) <REFERENCE>(VER). <HEAD1>(Acknowledgements) <P> I wish to thank Hunter Goatley for providing a working model upon which this documentation is based. I would also like to thank Jon Bohlke, Tom Hopson, Tom McCormick, and Brian Schenkenberger for their feedback and assistance during the development of <REFERENCE>(ESW). <ENDPREFACE> <ENDFRONT_MATTER> <CHAPTER>(Installation Notes) <P> This chapter contains items of interest pertaining to the installation of <REFERENCE>(ESW). <HEAD1>(Accessing the Installation Guide) <P> The distribution kit includes an Installation/Reference Guide which you may wish to extract and print prior to the actual installation. Postscript and plain ASCII text versions of the manual are included. To extract both of these formats, use the following command: <INTERACTIVE>(\WIDE) <S>($ BACKUP SWITCH045.A/SAVE/SEL=(SWITCH.PS,SWITCH.TXT) *.*) <ENDINTERACTIVE> <HEAD1>(Commands) <P> The commands used to invoke <REFERENCE>(ESW) are normally placed in the system-wide DCL command tables (SYS$LIBRARY:DCLTABLES.EXE) during installation. <P> The installation gives you the option of adding the commands to the DCL command tables or not. It is recommended that you do so to make <REFERENCE>(ESW) available to all users on the system. <P> <REFERENCE>(ESW) may also be defined as a foreign command. <HEAD1>(On-line Help) <P> During the installation, you will be given the option of installing the help file for <REFERENCE>(ESW) in a help library (the default is SYS$SYSROOT:[SYSHLP]HELPLIB.HLB). <P> The on-line help files can be found in the directory where you choose to install them during the installation. <HEAD1>(Substitutions) <P> One of the many features of Extended Switch is its ability to substitute concealed logicals for long directory specifications. This is especially useful when updating your prompt to indicate the current directory. For example, if a group of users has a common root such as: <INTERACTIVE>(\WIDE) NODE$DKA100:[USERS.GROUP.<EMPHASIS>(usernames\ITALIC)] <ENDINTERACTIVE> <P> and there is a logical definition such as: <INTERACTIVE>(\WIDE) "GROUP" = "NODE$DKA100:[USERS.GROUP.]" (LNM$SYSTEM_TABLE) <ENDINTERACTIVE> <P> then Extended Switch can be configured to automatically substitute the logical name instead of using the full directory specification. This is done by simply providing this information during the installation procedure, where it is complied into the program itself. <P> Because this information becomes a part of the executable image, these substitutions are <EMPHASIS>(always\ITALIC) checked for <EMPHASIS>(every\ITALIC) activation. Therefore, relatively few substitutions should be defined; and preferably only those that apply to a large percentage of the users of this utility. <P> Performance was considered to be more important than flexibility when this feature was designed and implemented. <CHAPTER>(New Features and Bug Fixes) <P> This chapter describes changes from the original release of <REFERENCE>(ESW) to the current release. <HEAD1>(New Features) The following new features have been added. <MARK> <P> V4.5-1: <LIST>(numbered) <LE> Several code modifications were made to allow for correct compilation on both the VAX and Alpha architectures. <LE> Instead of always changing both the device and the directory, logic has been added to determine whether or not the device should be changed. This corrects problems when dealing with devices which are really concealed logical lists. <LE> Extremely long directory names are now better supported when updating the prompt. Instead of returning to the default dollar sign prompt, a truncated subdirectory string with a continuation symbol is displayed. <LE> The /UPDATE_PROMPT qualifier now takes two optional quoted string arguments. The first is added to the beginning of the prompt, the second is placed at the end. <LE> Prompt values are now checked to ensure that they are quoted strings. <LE> The substitutions which are defined for the current installation are displayed when using the /VERSION qualifier. <ENDLIST> <ENDMARK> <P> V4.4-3: <LIST>(numbered) <LE> <REFERENCE>(ESW) is now available as a foreign command. <LE> The help file may now be installed into any available library. <LE> The /RECALL qualifier, along with the /ALL and /ERASE qualifiers, where added to provide an interface to default history information that is consistent with the DCL command RECALL. <LE> Repeatedly switching to the same directory no longer fills your default history with the current directory. This is also consistent with the DCL command RECALL. <LE> Both the /BACKWARDS and /RECALL qualifiers accept substrings of previous defaults, as well as the numbers one through five, to select the desired default directory. <ENDLIST> <HEAD1>(Bug Fixes) <P> The following bug fixes have been made. <MARK> <P> V4.5-1: <LIST>(numbered) <LE> When the default device is concealed logical list, but the default directory does not exist under all devices in the list, it is now possible to switch up and out normally. The default device is modified to indicated that the current default is no longer a valid member of the concealed logical list. <LE> Switching up from a subdirectory of a device that is really a list of concealed logicals no longer changes your device. <LE> The processing of multiple dots to switch up directory levels has been modified to work correctly on the Alpha. <LE> Specifying a prompt string of a single letter no longer causes a stack dump. <ENDLIST> <ENDMARK> <P> V4.4-3: <LIST>(numbered) <LE> A minor bug when using a single dot, 'SWITCH .', to switch to the current directory has been corrected. <ENDLIST> <CHAPTER>(Brief History) <P> This is the third version of <REFERENCE>(ESW) that has been widely released. A detailed history of this program may be found in the comments of the source code. <P> This program has been in use for several years at Rose-Hulman Institute of Technology, where Switch was originally developed in MACRO32 by Bob Shew. Since that time, I have expanded the scope of the program and rewritten it in both Pascal and C, and finally once again in MACRO32. <P> <REFERENCE>(ESW) is currently being used by sites in the Netherlands, Germany, Australia, Italy, Canada, and the US. I would very much like to add to this list. <CHAPTER>(Known Bugs and Restrictions) <P> This chapter describes the known bugs and restrictions of <REFERENCE>(ESW) <REFERENCE>(VER). <HEAD1>(Bugs) <P> There are no known undesired features as of this version of <REFERENCE>(ESW). <HEAD1>(Restrictions) <P> <REFERENCE>(ESW) <REFERENCE>(VER) does not properly handle a node qualified default specification. The following are examples of unsupported specifications which are allowed when using SET DEFAULT. <INTERACTIVE>(\WIDE) $ SET DEFAULT NODE::DKA0:[000000] $ SET DEFAULT NODE"optional-username password"::DKA0:[000000] <ENDINTERACTIVE> <HEAD1>(Problem Reports) <P> The author may be contacted via the internet at FabritDM@CS.Rose-Hulman.Edu. Feedback is both welcome and encouraged. <P> Due to the fact that the author does not, unforunately, have direct access to an Alpha, exhaustive testing on this platform has not been completed. If you have any problems using <REFERENCE>(ESW) on an Alpha system, please let me know so that I can investigate, and hopefully correct, the problem. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"�*�[FABRITIUS.ESW.SWITCH]SW_CLD.CLD;1�+��,�3���.�����/��� �4�8��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�@t|M��9����������G����H���J�����������������������������! SW_CLD.CLD V4.5-1 15-SEP-1994 ! module switch_cmd define verb switch parameter p1 label=switch_parm value (default="") qualifier all nonnegatable qualifier backwards nonnegatable value (default="1") syntax=no_params qualifier erase nonnegatable qualifier history nonnegatable syntax=no_params qualifier line_feed qualifier recall nonnegatable qualifier save_default qualifier update_prompt value (list,default="",type=$quoted_string) qualifier version nonnegatable syntax=no_params disallow any2 (save_default, history, recall, version) disallow any2 (backwards, history, recall, version) disallow (all or erase) and not recall define syntax no_params noparameters �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#�*�[FABRITIUS.ESW.SWITCH]SW_CLD.UNIX;1�+��,�I"���.�����/��� �4�8��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�@|M��9����������G����H���J����������������������������! SW_CLD.CLD V4.5-1 15-SEP-1994 ! module switch_cmd define verb switch parameter p1 label=switch_parm value (default="") qualifier all nonnegatable qualifier backwards nonnegatable value (default="1") syntax=no_params qualifier erase nonnegatable qualifier history nonnegatable syntax=no_params qualifier line_feed qualifier recall nonnegatable qualifier save_default qualifier update_prompt value (list,default="",type=$quoted_string) qualifier version nonnegatable syntax=no_params disallow any2 (save_default, history, recall, version) disallow any2 (backwards, history, recall, version) disallow (all or erase) and not recall define syntax no_params noparameters �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"�*�[FABRITIUS.ESW.SWITCH]SW_ERR.MSG;1�+��,���.�����/��� �4�j���������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�붢|M��9����������G����H���J�����������������������������! SW_ERR.MSG V4.5-1 15-SEP-1994 ! .facility esw,1 /prefix=sw$_ .severity warning nohist "directory history not available." .severity error baddir "invalid directory, !AS"/fao=1 badprmt "prompt values must be quoted strings." dev "device not found, !AS"/fao=1 dnf "directory not found, !AS"/fao=1 dclerr "invalid DCL specification, !AS"/fao=1 nomatch "no match for '!AS' in default history."/fao=1 nouser "username not found, !AS"/fao=1 uperr "can't switch up from device, !AS:"/fao=1 .severity fatal unk "unexpected error, program aborted.!/ dirspec: '!AS' !/ dirparm: '!AS' !/ subparm: '!AS' "/fao=3 .end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$�*�[FABRITIUS.ESW.SWITCH]SW_PART1.MAR;1�+��,�-���.�{����/��� �4�a���{���y��������������������-�/����0���1����2���3������K��P���W���O�|����5���6�kG��7�kG��8� â|M��9����������G����H���J���������������D������������� .Title /Extended Switch/�� .Ident /V4.5-1/��F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% � .Subtitle Copyright/DisclaimerF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%�;�G�; Copyright 1992,1993,1994 by David Fabritius. All rights reserved.�D�; Permission is given to freely distribute and modify this softwareG�; for no commercial gain as long as this copyright notice is retained.��;�D�; This software is provided "as is". The author makes no guaranteeE�; as to the suitability, usefulness, performance, or security of the�!�; software. But hey, I like it!��;�D�; *Please* send comments, questions, bug-fixes, modification ideas,;�; improvements, enhancements, critiques, etc., et al., to:� �; FabritDM@CS.Rose-Hulman.Edu�;�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Description/History�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%�;�D�; From the author: This is my pet program. That's my only excuse.�;�F�;*********************************************************************'�; EXTENDED SWITCH� �; Purpose:�;�?�; To provide a user friendly interface and several enhancements�<�; to the DCL command SET DEFAULT. Installed system-wide for=�; use by all interactive users. For more information, please��; use $ HELP SWITCH��;�F�;*********************************************************************�;��; V4 April 29, 1992�; Seattle, Washington�; VAX MACRO�;�N�; Due to the nearly constant fixes and improvements demanded by a pet project,O�; I was forced to re-write in MACRO since we don't have a higher level compiler�M�; here at work (except BASIC--which it's never been written in either). This�<�; should be an interesting test of my skills and dedication.�;��; Conceived : April 29, 1992 �; Started : November 7, 1992!�; Released : February 26, 1993��;��; V4.5-1 September 15, 1994�Q�; Finally got around to fixing a bug in the processing of 'directory not found'�?�; errors. Things now work a little more like one would expect.��; V4.5 June 15, 1994�N�; With the help of Brian Schenkenberger, improved code to work on the Alpha.�; V4.4-5 April 25, 1994�3�; Added logic to change device only when desired.�I�; Modified handling of extremely long directory names in prompt string.��; V4.4-4 December 9, 1993�F�; Combining suggestions made by Andrew Sackett and Kris Smith, addedG�; the ability to specify both header and trailer strings to the prompt.�<�; Verified that prompt values were given as quoted strings6�; Added substitution display to /VERSION information�; V4.4-3 November 15, 1993L�; Made SWITCH available as a foreign command (suggested by Hunter Goatley)5�; Don't duplicate history (suggested by Rod Gravon)�6�; Added /recall qualifiers (suggested by Rod Gravon),�; /recall/all - displays history information,�; /recall/erase - erases history informationN�; /recall [n|str] (default n=1) - switch back to the nth directory or one that*�; has a match for the given substring.�; V4.4-2 October 15, 1993�>�; Added limited support for using Unix-style forward slashesH�; Fixed bug when switching to the root of a new device using backslashO�; Fixed a bug when switching down from the root of a device using a backslash�"�; followed by a subdirectory name.�; V4.4-1 September 4, 1993N�; Split the source code into separate file segments to allow in-line changesO�; to be made in the substitution section of the program. Substitutions are now�<�; completely customizable during the installation procedure.�; V4.4A August 15, 1993K�; Went through data and code sections and added alignment directives. For�;�; what it's worth, it should run just that much faster now.��; V4.4 April 9, 1993�I�; Changed the whole flow of the program. Incorporated the default_spec�M�; parameter in the call to lib$find_file to provide the .dir type. This made�N�; things worse as much as it made them better, and I ended up changing my mindK�; *again* about what steps should be done in what order to make the program�O�; execute in the fastest and most intelligent manner. I decided that the speed�K�; gained by using MACRO afforded me some latitude in making the coding more�L�; straight-forward. Therefore, while the C version tried to make the commonN�; case as fast and simple as possible, I've reverted back to the glory days ofK�; the Pascal version, where all the possible exceptions and weird parameter�M�; options are dealt with first, before actually getting down to business. On�N�; the up side, this greatly simplifies and shortens the code, and eliminates aJ�; lot of confusing "tricks" and near-duplication of effort in the program.�;��; V4.3-2A March 31, 1993%�; Fixed small bug in prompt routine�C�; Finished commenting code and the minor improvements that led to�(�; Fixed bug in display history routine2�; Added lower bound check on backwards parameter�; V4.3-1 March 25, 1993�C�; Made it look for exact matches before going to wildcard matches��; V4.3 March 22, 19933�; Completely re-worked how logicals are processed�9�; Fixed bug when switching up from a backslash (cd \..)�C�; Other minor improvements made while adding comments to the code��;��; V4.2-2 February 28, 19933�; Fixed bug when switching to a concealed logical��; Improved error messages��; Wrote a VMS Intall kit�; V4.2-1D February 26, 1993�7�; Implementation of MESSAGE utility to display errors�#�; Fixed bug in set prompt routine�"�; Fixed bugs relating to devices>�; Fixed bug when switching up from a concealed logical w/ ..�;��; V4.1-2G February 25, 1993�8�; Switch to root of device using backslash (cd dev:\)@�; Fixed bug when switching to new device, same tree w/ subdirs�; V4.1-2E February 22, 1993�1�; Fixed bug when switching to misspelled subdir�/�; Fixed bug when switching up on a new device��; Switch up from tilde spec�&�; Switch down from misspelled subidr;�; Switch from root using backslash notation (cd \sub\sub)�'�; V4.1-2 second beta February 22, 1993�E�; Fixed bugs related to switching to devices and concealed logicals�A�; Fixed bug when switching up through concealed logical devices�#�; Fixed bug in set prompt routine��; Modified code to use macros��; V4.1-1 February 20, 1993�; Several minor bug fixes��;�F�;=====================================================================�; V3 February 13, 1992��; Olympia, Washington �; VAX C�;�F�; Knowing that my Pascal version was a bit clunkly and not very wellH�; designed or thought out, I decided to practice my C skills and improveF�; upon my pet program (I was also bored searching for work after OBC).@�; The idea was to make it smaller, faster, and better code-wise.�;��; V3.1-1 February 17, 1992�; V3.1-2 March 25, 1992��; V3.1-3 April 27, 1992��; Minor bug fixes, all.��;�F�;=====================================================================�; V2 October 13, 1990*�; Rose-Hulman WCC; Terre Haute, Indiana�; VAX Pascal��;�F�; This program is an enhanced version of Switch, long used by systemJ�; managers and some operators. I decided to re-write it in Pascal becauseK�; 1) I know it a lot better, and 2) It's a lot easier to maintain. I also�J�; wanted to add lots of nice features and some compatibility for PC users.K�; So, although it's probably not the cleanest or most efficient solution to�4�; DEC's SET DEFAULT problem, it is a nice plush one.�;��; V2.X until May 25, 1991M�; Many bug fixes and minor improvements were continuously added. My thanks�C�; to Jon Bolhke for his unending complaints, er, uh, encouragement.��;�F�;*********************************************************************$�; SWITCH �; Purpose:�;�B�; To provide a user friendly interface to the SET DEFAULT command.9�; For more complete information, please use $ HELP SWITCH��;�F�;*********************************************************************�;�"�; Original author: Robert W. Shew�; V1 February 10, 1987�*�; Rose-Hulman WCC; Terre Haute, Indiana�; VAX MACRO�;� �; Modified: David M. Fabritius�; V1.2 August 4, 1988�;�A�; An option to modify the prompt string to indicate the current�?�; directory was added, along with a look-up table to substitute�?�; concealed logicals in place of the actual device and a couple��; of subdirectories.1�; set prompt = DEVICE:[DIR1.DIR2.DIR3]�/�; or DEVICE:[...DIR2.DIR3]�(�; or CONCEAL:[DIR3]�;� �; Modified: David M. Fabritius�; V1.3 September 17, 1990>�; An option to switch to a user's root directory and then to2�; move down a few of their subdirectories as well.�;�� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"� .Subtitle Determine ArchitectureF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%P�;++ ++;P�; Copyright 1994 by Brian Schenkenberger and TMESIS. All rights Reserved. ;P�; ** This macro routine code may be copied and freely distributed only with ** ;P�; ** the inclusion of this text and the above copyright notice. ** ;P�;-- --;P�;++ **;P�; Define architectural dependency symbols for conditional assembly/compilation ;P�; on OpenVMS VAX and/or OpenVMS AXP platforms. ;P�;-- --;� .macro arch_defs� .enabl suppression$� .nocross ...on_alpha...,r31#� .ntype ...on_alpha...,r31�N� .if eq <...on_alpha...@-4&^xf> - 5 ; on alpha, r31 *is* a register� .if_false �vax = 1�� .if_true� �axp = 1� �evax = 1 �alpha = 1� �bigpage = 1��addressbits = 32���P�;++ ++;P�; Define OpenVMS AXP driver I/O generation dependency symbols for conditional ;P�; compilation on OpenVMS AXP platforms. ;P�;-- --;� .nocross�� .if ndf dpt$l_flink�.� .library /sys$library:lib.mlb/� $dptdef� .endc; dpt$l_flink��H� .if df dpt$k_iogen_req_step2ver ; requires step 2 interface?� .cross�� .if_true�D�step2 = dpt$k_step_2 ; use for step2 driver conditional codingK�drvrstep = dpt$k_step_2 ; pass to dptab step argument - step=\drvrstep�� .if_falseD�step1 = dpt$k_step_1 ; use for step1 driver conditional codingL�drvrstep = dpt$k_step_1 ; pass to dptab step argument - step=\drvrstep *� .endc ; io generation dependency*� .endc ; architectural dependency� .dsabl suppression� .endm arch_defs�� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-� .Subtitle Library/VMS Definitions/Constants�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%��F� arch_defs ; conditionally determine target architecture��� .library /sys$library:lib//� .link /sys$system:sys.stb/ /selective_search���� .if df alpha � .if_true.� $eihddef ; Alpha image header=� $eihidef ; Alpha image header identification� � .if_false�,� $ihddef ; VAX image header;� $ihidef ; VAX image header identification�� .endc; alpha��� $lnmdef ; logicals� $prvdef ; priviledges�(� $rmsdef ; record management services,� $uaidef ; user authorization information� $namdef ; name block��#�lf = 10 ; linefeed character�3�max_user = 8 ; maximum length of user prompt�I�prompt_len = 31 ; maximum length of prompt (32 - 1 for possible lf)�6�str_len = 80 ; default length of string buffers4�uai$b_defdev = 32 ; max device length from UAF7�uai$b_defdir = 64 ; max directory length from UAF�� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% � .Subtitle Constant Data BlocksF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%�;�B�; The comments are pretty sparse here since most of this is *very*"�; straight-forward (to me anyway).�;�#� .psect constant,nowrt,noexe,quad���C�hist_mess: .ascid /The last five directories you visited are:/<lf>���:�switch_parm: .ascid /switch_parm/ ; command parameter��<�backwards_qual: .ascid /backwards/ ; command qualifiers�confirm_qual: .ascid /confirm/��history_qual: .ascid /history/�"�linefeed_qual: .ascid /line_feed/�recall_qual: .ascid /recall/��rec_all_qual: .ascid /all/��rec_erase_qual: .ascid /erase/�$�savedef_qual: .ascid /save_default/$�update_qual: .ascid /update_prompt/�version_qual: .ascid /version/���O�lnm$file_dev_d: .ascid /LNM$FILE_DEV/ ; logical list of all logical tables�8�lnm$process_d: .ascid /LNM$PROCESS/ ; process table,�lnm$job_d: .ascid /LNM$JOB/ ; job table��@�def_hist_d: .ascid /DEFAULT_HISTORY/ ; logicals used/defined&�save_def_d: .ascid /PREVIOUS_DEFAULT/�syslogin_d: .ascid /SYS$LOGIN/��sysdisk_d: .ascid /SYS$DISK/���N�root_dcl: .ascid /000000./ ; DCL specification for the root in a dir spec-�brackets: .ascid /][/ ; useless garbage�3�dir_type: .ascid /.dir/ ; directory file type���/�wildcard: .ascii /*/ ; strings and things��log_ending: .ascii /].;/���� .align quad���dev_root: .ascii /[000000]/��;�privs: .quad <prv$m_sysprv> ; need sysprv to read UAF��setprv_on_g: .long 4� � .long 1� .address privs � .quad 0���setprv_off_g: .long 4 � .long 0� .address privs � .quad 0��-�getparm_g: .long 3 ; grab the parameter�� .address switch_parm� .address ddirparm�� .address ddirparm���8�find_DCL_g: .long 3 ; look for a DCL specification� .address ddirparm�� .address dresspec�� .address context�;+++I�; The results of this call must go into a temporary buffer due to the way�G�; find_file handles logical search lists. For example, failing to find�K�; sys$manager.sub returns sys$common:[sysmgr]sub.dir;, which is not what we�L�; looked for, namely sys$sysroot:[sysmgr]sub.dir. This makes it hard to try.�; again if we overwrite our source buffer, eh?�;---5�find_dir_g: .long 4 ; look for a directory file�� .address ddirspec�� .address dresspec�� .address context� .address dir_type���3�getheader_g: .long 3 ; grab the prompt header�� .address update_qual� .address dprompthdr�� .address dprompthdr���5�gettrailer_g: .long 3 ; grab the prompt trailer�� .address update_qual� .address dprompttlr�� .address dprompttlr���9�getbckwds_g: .long 3 ; grab the backwards parameter�� .address backwards_qual�� .address ddirparm�� .address ddirparm���D�setddir_g: .long 3 ; set the new directory and get the old one� .address ddirspec�� .address dcurspec�� .address dcurspec���G�save_def_g: .long 3 ; save current directory in a process logical�� .address save_def_d�� .long ddirspec�� .address lnm$process_d��:�save_dev_g: .long 3 ; save new device in job logical� .address sysdisk_d� .address ddevice� .address lnm$process_d��3�index0: .long 0 ; read in last 5 directories��index1: .long 1��index2: .long 2��index3: .long 3��index4: .long 4�-�read_hist_lst: .word 4 ; hist_1�� .word lnm$_index�� .address index0� � .long 0� .word str_len� .word lnm$_string� .address bhist_1� .address dhist_1 � .word 4 ; hist_2� .word lnm$_index�� .address index1� � .long 0� .word str_len� .word lnm$_string� .address bhist_2� .address dhist_2 � .word 4 ; hist_3� .word lnm$_index�� .address index2� � .long 0� .word str_len� .word lnm$_string� .address bhist_3� .address dhist_3 � .word 4 ; hist_4� .word lnm$_index�� .address index3� � .long 0� .word str_len� .word lnm$_string� .address bhist_4� .address dhist_4 � .word 4 ; hist_5� .word lnm$_index�� .address index4� � .long 0� .word str_len� .word lnm$_string� .address bhist_5� .address dhist_5 � .long 0�read_hist_g: .long 5�� .long 0 ; attrib�� .address lnm$process_d� .address def_hist_d�� .long 0 ; acmode�� .address read_hist_lst��=�logical_lst: .word 4 ; translate a logical in any table�F� .word lnm$_attributes ; and get its attributes so we can see if4� .address concealed ; it's a concealed logical � .address 0� .word str_len� .word lnm$_string� .address bdirspec�� .address ddirspec� � .long 0,�logical_g: .long 5 ; translate dirparm� .long 0 ; attrib�� .address lnm$file_dev_d�� .address ddirparm�� .long 0 ; acmode�� .address logical_lst/�result_g: .long 5 ; translate translation�� .long 0 ; attrib�� .address lnm$file_dev_d�� .address ddirspec�� .long 0 ; acmode�� .address logical_lst`������������������������������������������������������������������������������������������������������������������� ������������������������uX�~������ SWITCH045.A��������������������-��/��$[FABRITIUS.ESW.SWITCH]SW_PART1.MAR;1�������������������������������������������������������������������������������������������a�����{�������������������������N�|�����#���������7�syslogin_lst: .word str_len ; translate SYS$LOGIN�� .word lnm$_string� .address bdirspec�� .address ddirspec� � .long 0�syslogin_g: .long 5� .long 0 ; attrib�� .address lnm$job_d� .address syslogin_d�� .long 0 ; acmode�� .address syslogin_lst���5�sysdisk_lst: .word str_len ; translate SYS$DISK�� .word lnm$_string� .address bhist_0� .address dhist_0 � .long 0�sysdisk_g: .long 5�� .long 0 ; attrib�� .address lnm$process_d� .address sysdisk_d� .long 0 ; acmode�� .address sysdisk_lst��G�getuai_lst: .word uai$b_defdev ; get device and directory from UAF�� .word uai$_defdev� .address uai_defdev� � .long 0� .word uai$b_defdir�� .word uai$_defdir� .address uai_defdir� � .long 0 � .long 0�getuai_g: .long 7� .long 0 ; EFN� .long 0 ; context� .address ddirparm�� .address getuai_lst� � .long 0 ; � .long 0 ; � .long 0 ;��4�save_hist_g: .long 5 ; save last 5 directories� .address def_hist_d�� .long 0 ; lognam�� .address lnm$process_d� .long 0 ; attrib�� .address save_hist_lst��4�erase_hist_g: .long 1 ; delete default history� .address def_hist_d����get_foreign_g: .long 3�� .address cmd_line� � .long 0� .address cmd_line����dcl_parse_g: .long 2�� .address cmd_line�� .address switch_cmd���:�ddots: .long 2 ; used to search for dots in dirparm�adots: .address bdots�bdots: .ascii /../� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Error Message DataF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%�;�)�; Set up error message calling parameters��;�/�max_bck = 5 ; limit on directory history���� .align long���sw$_baddir_g: .long 3� .long sw$_baddir � .long 1�� .address ddirspec���sw$_badprmt_g: .long 1�� .long sw$_badprmt����sw$_nohist_g: .long 1� .long sw$_nohist���sw$_dnf_g: .long 3�� .long sw$_dnf� � .long 1�� .address dresspec���sw$_dev_g: .long 3�� .long sw$_dev � .long 1� .long dresspec����sw$_nouser_g: .long 3� .long sw$_nouser� � .long 1� .long ddirparm����sw$_uperr_g: .long 3�� .long sw$_uperr � .long 1� .long ddirspec����sw$_nomatch_g: .long 3�� .long sw$_nomatch� � .long 1�� .address ddirparm� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% � .Subtitle Variable Data BlocksF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%�;�E�; These are my variables. I get a little tricky sometimes so I don't�@�; have to move my data around too much. Maybe it's not the best?�; style, but I just wanted it to run a few microseconds faster.��;�!� .psect variable,wrt,noexe,quad�� ; flags indicating...�5�first_time: .long 1 ; first time through loop�5�logical: .long 0 ; we're processing a logical�0�concealed: .long 0 ; a concealed logical:�used_concealed: .long 0 ; we've switch up from one5�new_device: .long 0 ; we went to a new device���6�context: .long 0 ; context of calls to find_file���parse_fab: $fab fna=bdirspec,-�� fns=str_len,-�� nam=parse_nam,-� � fop=nam� �parse_nam: $nam esa=bdirspec, -� ess=str_len�I�save_hist_lst: ; these are all the history records I want to save�M�lhist_0: .word str_len ; they're variable because I don't know what the�B� .word lnm$_string ; right lengths are until I transate the*� .address bhist_0 ; history logical� .address dhist_0�lhist_1: .word str_len�� .word lnm$_string� .address bhist_1� .address dhist_1�lhist_2: .word str_len�� .word lnm$_string� .address bhist_2� .address dhist_2�lhist_3: .word str_len�� .word lnm$_string� .address bhist_3� .address dhist_3�lhist_4: .word str_len�� .word lnm$_string� .address bhist_4� .address dhist_4 � .long 0��H�dhist_0: .long 0 ; This is where I actually store the history infoI� .address bhist_0 ; buffer 0 will contain the directory that we are�3�bhist_0: .blkb str_len ; switching away from�E�dhist_1: .long 2 ; Buffers 1 through 5 contain where we've been�"� .address bhist_1 ; before.L�bdisp_1: .ascii / 1. / ; The data structure is set up with numbers allJ�bhist_1: .ascii /[]/ ; throughout so that when I want to print them@� .blkb <str_len-2> ; out, I can print the numbers easily.�dhist_2: .long 2�� .address bhist_2�bdisp_2: .ascii / 2. /��bhist_2: .ascii /[]/�� .blkb <str_len-2>�dhist_3: .long 2�� .address bhist_3�bdisp_3: .ascii / 3. /��bhist_3: .ascii /[]/�� .blkb <str_len-2>�dhist_4: .long 2�� .address bhist_4�bdisp_4: .ascii / 4. /��bhist_4: .ascii /[]/�� .blkb <str_len-2>�dhist_5: .long 2�� .address bhist_5�bdisp_5: .ascii / 5. /�D�count_len = .-bdisp_5 ; calc length of the ascii number displayJ�buf_offset = .-dhist_5 ; calc offset from beginning of desc to buffer�bhist_5: .ascii /[]/�� .blkb <str_len-2>6�disp_len = .-dhist_5 ; calc len of one data block��F�dhistory: .long 0 ; descriptor I use when displaying the history� .address bdisp_1��� .align long�;+++K�; We mess around with this guy a lot. The address of the buffer gets moved�M�; around quite a bit, but it's always inside bdirparm. The only really weird�H�; thing is when we do the /backwards or /recall thing, this is where theH�; value goes. Kind of a funny name in that case, but it's not like it's-�; going to be used for something else, right?��;---L�ddirparm: .long str_len ; this is where the user's directory parm goes�adirparm: .address bdirparm��bdirparm: .blkb str_len��B�dsubparm: .long 0 ; descriptor describing additional subdirs<�asubparm: .address bdirparm ; it's an overlay of dirparm���;+++N�; This is where our guess for find_file goes. However, in the special case ofO�; switching back to a directory stored in the history logical, we re-direct the�N�; address to the appropriate history record buffer. Normally, we start off inM�; the current directory ([]) because if we don't then if your subdirectory is�K�; the same as a defined logical, find_file returns the logical translation.��;---E�ddirspec: .long 2 ; this is where our results from find_file go��adirspec: .address bdirspec�E�bdirspec: .ascii /[]/ ; start at current default directory ([])�� .blkb <str_len-2>��F�dresspec: .long str_len ; this is where our find_file results go�aresspec: .address bresspec��bresspec: .blkb str_len��C�ddevice: .long str_len ; descriptor describing the new device�;�adevice: .address bdirspec ; it's an overlay of dirspec���F�dcurspec: .long str_len ; this is where our current default goes� .address bcurspec��bcurspec: .blkb str_len��D�dprompt: .long set_len ; this is our set prompt command string� .address bprompt�bprompt: .ascii /set prompt=/H�linefeed: .ascii /"/<lf> ; we start out with the linefeed in place3� ; we replace it later if we don't want it�1�set_len = .-bprompt ; length of set command�P�bprompthdr: .blkb <str_len-1> ; this is where the user's prompt header goesL�dprompthdr: .long str_len ; the descriptor is kind of upside down, butU�aprompthdr: .address bprompthdr ; that's to make the command & buffer contiguous�L�dprompttlr: .long max_user ; this is as good a place as any for storing9�aprompttlr: .address bprompttlr ; the prompt trailer�I�bprompttlr: .blkb max_user ; we'll move it into place when we get it���G�upstr: .ascii /-/ ; buffer for dash string to move up dir levels�2� .blkb 15 ; allow for a maximum of 8 levels��/�uai_defdev: .blkb 1 ; ascic string buffer�B�bdefdev: .blkb <uai$b_defdev-1> ; for default device from UAF/�uai_defdir: .blkb 1 ; ascic string buffer�E�bdefdir: .blkb <uai$b_defdir-1> ; for default directory from UAF���H�cmd_line: .long str_len ; buffer for command line if we need it8� .address cmd_buf ; where to put the command line1�cmd: .ascii /switch / ; the command itself��cmd_len = .-cmd�/�cmd_buf: .blkb str_len ; the command line���2�position_g: .long 2 ; search through history?�src_str: .address dhist_1 ; first string to search through�2� .address ddirparm ; string we're looking for� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle MacrosF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%��� .psect code,nowrt,exe,page��;+++5�; Check for the presence of a given command qualifier��;---� .macro check,qualifier�� pushaq qualifier�� calls #1,g^cli$present�� .endm check�;+++I�; Modify directory parameter to be just the subdirectory that follows the�8�; device. For example, before: ddirparm = device:subdir1�; after : ddirparm = subdir�J�; This is called right after a locc instruction, so the registers hold the&�; results of the a search for a colon.�;---� .macro dev_sub�&� incl r1 ; point past the colon8� movl r1,adirparm ; new starting addr for ddirparm)� decl r0 ; dec len to remove colon�)� movl r0,ddirparm ; save new length�� .endm dev_sub�;+++D�; Modify the directory result to be the root of the device we found.�;---� .macro make_root�/� locc #^a/:/,ddirspec,bdirspec ; find colon�2� incl r1 ; inc pointer so we keep the colon4� movq dev_root,(r1) ; copy [000000] into placeD� subl3 #<bdirspec-8>,r1,ddirspec ; calc new len for dev and root� .endm make_root�;+++(�; Write a given descriptor to SYS$OUTPUT�;---� .macro print,string_d� pushaq string_d� calls #1,g^lib$put_output� .endm print�;+++F�; Look in the directory spec for a given string. If it is found, then2�; replace it with an equivalent concealed logical.�;---+� .macro substitute,spec,lognam,?no_match�>� matchc spec,@spec+4,ddirspec,bdirspec ; search for string.� bneq no_match ; guess it's not in there<� subw3 spec,ddirspec,r0 ; calc len of remaining dirspec8� addw3 lognam,r0,ddirspec ; calc new len of dirspec+� movzwl spec,r1 ; save len of string�;� addl2 #bdirspec,r1 ; calc offset into dirspec buffer�-� movzwl lognam,r2 ; save len of logical�@� addl2 #bdirspec,r2 ; calc new start for remaining dirspec8� movc3 r0,(r1),(r2) ; slide down remaining dirspecE� movc3 lognam,@lognam+4,bdirspec ; put concealed logical in place�*� brw set_device ; go on to next step�no_match: .endm substitute����;+++M�; Trim garbage off of the end of ddirspec. Usually it's an unwanted .dir;ver��;---� .macro trim_end9� locc #^a/]/,dresspec,bresspec ; find closing bracket�$� incl r1 ; point past bracket5� subw3 r0,#<str_len+1>,ddirspec ; calc new length�@� movc3 ddirspec,bresspec,bdirspec ; move result into dirspec� .endm trim_end��;+++?�; Trim ddirspec keeping the subdirectory that comes at the end.�?�; For example: dev:[sub1]sub2.dir; becomes-> dev:[sub1.sub2]��;---� .macro trim_sub<� locc #^a/;/,dresspec,bresspec ; find trailing semicolon(� tstl -(r1) ; move pointer to dot:� movb #^a/]/,(r1) ; replace dot with closing bracketC� subw3 r0,#<str_len-3>,ddirspec ; calc len, not including 'dir'�@� movc3 ddirspec,bresspec,bdirspec ; move result into dirspecA� locc #^a/]/,ddirspec,bdirspec ; find the 1st closing bracket�/� movb #^a/./,(r1) ; replace it with a dot�� .endm trim_sub�� �F�;=====================================================================�;��; START OF EXECUTION�;�F�;=====================================================================F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Initial ProcessingF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%��� .entry extended_switch,^m<>�;+++C�; Begin by making a few tests for various qualifiers and figure out�D�; what we want to do. It may turn out to be something quite simple.)�; Oh yeah, and tone down the privs a bit.��;---_�privs_off: callg setprv_off_g,g^sys$setprv ; turn off sysprv, don't want those users mucking�4� ; around where they shouldn't ought to go!�;+++H�; Hunter suggested that it would be nice if SWITCH could be invoked as aH�; foreign command. Well, that's alright with me I guess; what the heck.H�; So the first thing we've got to do is try to touch the command line toF�; see if it needs to be parsed, which is done by our condition handler�; if necessary.��;---C�init_cli: movaw foreign_cmd,(fp) ; establish condition handler�2� check version_qual ; touch the command line+� clrl (fp) ; clear condition handler���V�check_ver: check version_qual ; are we interested in which version we're running?$� blbc r0,read_hist ; guess not0� brw show_version ; then let's go find out��K�read_hist: callg read_hist_g,g^sys$trnlnm ; find out where we've been...���T�check_hist: check history_qual ; are we interested in knowing where we've been?)� blbs r0,10$ ; then let's find out�C� check rec_all_qual ; was the new /recall/all qualifier used?�&� blbc r0,check_erase ; guess notB�10$: brw disp_hist ; let's go find out what we've been up to���;+++J�; Rod suggested making the /history and /backwards functionality more likeM�; the DCL command recall. So /recall/all is equivalent to /history (as coded�N�; above) and /recall/erase is used to wipe out our history logical. We'll get)�; to the /backwards equivalents in a bit.��;---L�check_erase: check rec_erase_qual ; do we want to eradicate our tracks?%� blbc r0,get_device ; guess not�?� callg erase_hist_g,g^lib$delete_logical ; erase our history�-� $exit_s #ss$_normal ; that's all folks��;+++I�; Find out what device we're on by translating the job logical, sys$disk.�F�; It might seem rather early to do this, but at this point I know thatF�; (unless I exit with an error) I'm going need it. There are a coupleG�; places where it's used, and this needs to come before either of them.��;---L�get_device: callg sysdisk_g,g^sys$trnlnm ; find out what device we're on���;+++N�; I find it very handy to go back to the directories I've just visited. MaybeK�; 'cause I like 'em so much, but probably 'cause I keep getting interrupted�N�; all the time! Rod also suggested an enhancement to this (as well as anotherM�; name), which is to treat the parameter either as a number or a substring of�N�; the previous defaults. This is a bit trickier, but it sounded kinda neat to�; me, so what the heck.��;---T�check_bckwds: check backwards_qual ; do we want to go back to where we've been?5� blbc r0,check_recall ; no, well maybe we do...�M� callg getbckwds_g,g^cli$get_value ; find out how far back we want to go�$� brb go_back ; and go for itI�check_recall: check recall_qual ; look for the new /recall qualifier�B� blbs r0,10$ ; if it's there, then we do want to go back6� brw where_to ; otherwise, get on with real lifeF�10$: callg getparm_g,g^cli$get_value ; find out what we were given@�go_back: clrl r6 ; clear it out so we don't have to movzbl7� cmpw #1,ddirparm ; see how long the parameter is.4� bneq 10$ ; numbers can be one character onlyB� subb3 #^a/1/,bdirparm,r6 ; convert ascii 1-5 to a number 0-46� blss 10$ ; if it was less than 1, it's no good6� cmpb r6,#max_bck ; check it against the maximumC� bleq 30$ ; if it was less than or equal to 5, it's a numberb(�10$: clrl r6 ; initialize counterX�20$: callg position_g,g^str$position ; see if the parm is part of a previous default"� tstl r0 ; test for a match6� bneq 30$ ; if so, use appropriate history infoC� addl2 #disp_len,src_str ; if not, advance to previous default*=� aoblss #max_bck,r6,20$ ; loop until we've seen 'em all,I� callg sw$_nomatch_g,g^lib$signal ; tell user we didn't find anythingD+� $exit_s #ss$_normal ; and go bye-bye%��C�30$: mull2 #disp_len,r6 ; calc displacement into history datat8� addl2 #dhist_1,r6 ; add base addr to displacement2� movl (r6),ddirspec ; save length in dirspecJ� movc3 ddirspec,buf_offset(r6),bdirspec ; move data into dirspec buffer,� incl new_device ; set new device flag4� incl logical ; set flag for error processing&� brw check_subdir ; check it out� &�40$: trim_end ; clean up endingD� callg sw$_baddir_g,g^lib$signal ; tell user this is a bad place+� $exit_s #ss$_normal ; and go bye-bye��;+++>�; OK, so we really want to go someplace. Let's get started...�;---J�where_to: callg getparm_g,g^cli$get_value ; find out what we were given7� tstw ddirparm ; were we given anything to go on?d5� bneq check_dot ; OK, let's look at what we gotd�;+++F�; The simplest case is that no parameter is given. This means that weJ�; just want to switch to our root directory, as defined by the job logicalN�; sys$login. Simply translate the logical and jump to the actual switch part.�;---[�go_home: callg syslogin_g,g^sys$trnlnm ; otherwise, we must want to go home (sys$login)p,� incl new_device ; set new device flag;� brw set_device ; no more parm processing, just do ito� F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%(� .Subtitle Special Parameter ProcessingF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++N�; Recognize a single dot to mean that we just want to stay where we are. ThisM�; can be kinda useful for updating your prompt to the current default. Since M�; dirspec already contains [] to start with, we simply need to call find_filet:�; to verify we're in an existing directory and we're done.G�; Do this now because it won't process through our main loop as easily. �;---=�check_dot: cmpb #^a/./,bdirparm ; look for a leading dot #� beql 10$ ; did we find one?f"� brw check_dcl ; nope, next!.�10$: cmpw #1,ddirparm ; check the length.� beql 20$ ; is it *just* a leading dot?5� brw check_dcl ; nope, jump around special caseo��K�20$: callg find_dir_g,g^lib$find_file ; put the full spec into dresspec <� cmpl r0,#rms$_fnf ; was there a file not found error?/� bneq 30$ ; any thing else means trouble4)� trim_end ; clean up what we foundu,� brw substitute ; go to the next phase&�30$: trim_end ; clean up endingD� callg sw$_baddir_g,g^lib$signal ; tell user this is a bad place+� $exit_s #ss$_normal ; and go bye-bye �;+++L�; See if it's a pure DCL specification. Wouldn't want to deny this feature!M�; Do this now because it's a bear to try to process it through our main loop. �;---X�check_dcl: locc #^a/[/,ddirparm,bdirparm ; is there a bracket, indicating DCL syntax?*� bneq process_dcl ; then let's do it8� brw remove_bslash ; nope, don't play that game...R�process_dcl: locc #^a/]/,ddirparm,bdirparm ; make sure it has a closing bracket+� bneq find_dcl ; if so, don't add onee8� movb #^a/]/,(r1) ; otherwise, slap one on the end,� incw ddirparm ; and adjust the lengthM�find_dcl: callg find_DCL_g,g^lib$find_file ; is there really such a place?m;� blbc r0,dcl_err ; if there's a problem, check it outtM�dcl_ok: locc #^a/:/,ddirparm,@adirparm ; see if the parameter had a colone5� bneq 10$ ; if so, then use what we were givene � trim_end'� brw substitute ; go on with life 9�10$: movw ddirparm,ddirspec ; make dirspec = dirparm C� movc3 ddirspec,bdirparm,bdirspec ; move parameter into dirspecl,� incl new_device ; set new device flag'� brw substitute ; go on with life E�dcl_err: cmpl r0,#rms$_fnf ; it's OK if there are no files theref-� beql dcl_ok ; anything else is not OK 1�dcl_exit: pushl r0 ; report resulting erroro0� pushal ddirparm ; report current attempt+� pushl #1 ; number of fao arguments +� pushl #sw$_dclerr ; report DCL error�=� calls #4,g^lib$signal ; tell user what the problem was '� $exit_s #ss$_normal ; go bye-byet�;+++H�; Just in case you thought that terminal was a PC, we'll change all yourJ�; backslashes to dots. I'm not going to get super fancy and deal with allK�; the ..\..\.. crap, this program allows you to use an *easier* syntax, noteN�; a more difficult one! Also, I'm not going to translate the first character.G�; This will allow me to defer processing the special case of it being ae:�; backslash until after looking for the more common cases.�;uI�; And I'll even add *limited* support for Unix types by replacing forward H�; slashes with dots. This will only work if the command definition fileD�; defines the parameter as: 'value (default="",type=$rest_of_line)'.F�; Of course, this turns off some verification steps which are normallyE�; taken, so I'll leave it up to the installer. But because this _is_�F�; VMS and *NOT* unix, I'm not all that interested in going through allB�; the gyrations needed to accept a leading slash (for now anyway).�;---L�remove_bslash: subl3 #1,ddirparm,r0 ; calc offset into parameter buffer?� beql process_dots ; if there's nothing to do, then don't�>�10$: cmpb #^a"\",bdirparm(r0) ; is character a backslash?"� beql 20$ ; yes, replace it6� cmpb #^a"/",bdirparm(r0) ; is character a slash?� bneq 30$ ; no, skipv5�20$: movb #^a/./,bdirparm(r0) ; replace with doti3�30$: sobgtr r0,10$ ; repeat until we're doneu���;+++J�; I also really liked Novell's idea of using multiple dots to move up yourI�; directory tree, so we'll do that too. Use the following example in the=�; comments below:=3�; before: ddirparm = 'log....sub' (length 10)pK�; This means we want to switch up 3 subdirs from log and then down into subcI�; We will keep 'log.' and '.sub' and replace the middle '..' with '-.-.-'m4�; after : ddirparm = 'log.-.-.-.sub' (length 13)�;---\�process_dots: matchc ddots,@adots,ddirparm,@adirparm ; look for two dots in a row*� beql found_dots ; did we find some?0� brw check_leading ; nope, skip this stuff�found_dots: .if df alpha�3� clrl r1 ; must initialize longword on Alpha=� .endc=H� subw3 r2,ddirparm,r1 ; calc offset into dirparm past 1st two dots=� subw3 #1,r1,r0 ; calc offset into dirparm past 1st dot ?� movl #1,r6 ; initialize length of dash string ('-' = 1)t8� movl adirparm,r8 ; put address of dirparm into r2@�more_dots: cmpb #^a/./,(r8)[r1] ; check for additional dots/� bneq no_more_dots ; no? then we're donee8� movw #^a/.-/,upstr(r6) ; add on to our dash string7� addl2 #2,r6 ; and adjust its length ('-.-' = 3) 4� incw r1 ; increment offset to next character0� brb more_dots ; continue to look for dots��?�no_more_dots: decw r1 ; back up one to get the last dotlY� subw3 r1,ddirparm,r2 ; len of dirparm ending we want to keep ('.sub' = 4)*@� addl3 adirparm,r1,r3 ; calc current addr of ending stringM� addl3 adirparm,r6,r4 ; calc new addr for ending string, which is after G� addl2 r0,r4 ; the dash string and the 1st part of the ddirparmC7� addl3 adirparm,r0,r7 ; calc addr for dash string*F� subw3 r1,r6,r5 ; determine the difference between the # of dotsE� addw2 r0,r5 ; we're replacing and the len of new dash stringM8� addw2 r5,ddirparm ; adjust the length of ddirparm@� movc3 r2,(r3),(r4) ; move ddirparm ending to its new home5� movc3 r6,upstr,(r7) ; stuff in the dash stringo�;+++K�; It's time to clean up our act a bit here. We may have dots cluttering upaL�; the beginning and/or ending or our dirparm at this point. Figure out what�; we want to do about it. �;---D�check_leading: cmpb #^a/./,@adirparm ; do we have a leading dot?(� bneq check_trailing ; nope, next!&� incl adirparm ; point beyond it5� decw ddirparm ; adjust the length -> all gone! ��Z�check_trailing: addl3 ddirparm,adirparm,r0 ; point one char beyond the end of ddirparm7� cmpb #^a/./,-(r0) ; is the last character a dot?u%� bneq remove_subs ; nope, next!%�;+++I�; Say you had a device, c: and you wanted to go to its root. OK, so type H�; 'cd c:\' and you're there. Ain't this fun? Of course, that backslashM�; got turned into a dot, so you could even type 'cd c:.' if you felt like it. I�; Well now, that looks like a trailing dot to me, but it's different thanxL�; if you just put in a bunch of dots and got '.-.-.' So we have to look andO�; see if there's a colon before the dot, and do something about it if there is. �;---@� cmpb #^a/:/,-(r0) ; is the character before that a colon?2� bneq rem_trailing ; nope, just kill the dot+� incl r0 ; point to the trailing dot 8� movq dev_root,(r0) ; stick a root spec on the end4� addl3 #7,ddirparm,ddirspec ; adjust the lengthB� movc3 ddirspec,bdirparm,bdirspec ; move into our guess buffer.� brw check_subdir ; go see if it's thereD�rem_trailing: decw ddirparm ; adjust the length to kill the dot���;+++K�; Most of this messing around has come about because we want to switch down J�; more than one subdirectory. Because we can shorten their names, or evenH�; misspell them, we need to take 'em one at a time. So see if we've got.�; extras and save all but the first for later.�;---Y�remove_subs: locc #^a/./,ddirparm,@adirparm ; are there any dots (indicating subdirs)? $� bneq 10$ ; then process them$� brw check_tilde ; nope, next!S�10$: subw3 #1,r0,dsubparm ; we do? then calc the length of remaining subdirsp?� addl3 #1,r1,asubparm ; calc starting address of dsubparm G� subw2 r0,ddirparm ; adjust length of ddirparm to just 1st subdirr�;+++M�; We may have done something like 'cd c:\sub\sub' in which case we want to gopL�; to the root of the given device and then down into its subdirectories. WeI�; can take a shortcut if this is the case and put the device and the root.J�; spec into the dirspec (since this is the first time through the loop, weI�; don't need to worry about saving what's in dirspec) directly and go sees�; if it's there.�;---K� cmpb #^a/:/,-(r1) ; are we switching down from the root of a device? /� bneq check_tilde ; nope, skip this stuff�H� movc3 ddirparm,@adirparm,bdirspec ; put the device into the dirspec9� addl3 adirspec,ddirparm,r6 ; point to end of device%2� movq dev_root,(r6) ; stick on the root spec:� addl3 #8,ddirparm,ddirspec ; put in the right length,� incl new_device ; set new device flag.� brw check_subdir ; go see if it's there�;+++M�; Now that we've got that taken care of, we can see if the first "subdir" wasdN�; really a username. If so, then we'll want to start from wherever their home�; directory is. �;---B�check_tilde: cmpb #^a/~/,@adirparm ; is there a leading tilde?-� beql process_tilde ; yes, deal with it %� brw chk_brackets ; nope, next!�<�process_tilde: cmpw #1,ddirparm ; is it *just* a tilde?0� bneq goto_user ; nope, there's a usernameG� callg syslogin_g,g^sys$trnlnm ; otherwise, use our home directorye9� brw check_more ; go see if we've got anything elseh��4�goto_user: incl adirparm ; point past the tilde?� decw ddirparm ; adjust the length -> poof! no more tildeaS�lookup_user: callg setprv_on_g,g^sys$setprv ; turn on privs so read can read UAF�?� callg getuai_g,g^sys$getuai ; get the lowdown on this guy%*� blbs r0,good_uai ; see if it workedJ� callg sw$_nouser_g,g^lib$signal ; tell 'em we couldn't find that user'� $exit_s #ss$_normal ; go bye-bye �;+++K�; If the read was successful, then assume it was also accurate. Throw whatnG�; we got into our directory spec and then go see if there's more to do.i�;---a�good_uai: callg setprv_off_g,g^sys$setprv ; turn off privs, we don't need 'em anymoreb?� movzbl uai_defdev,r6 ; put len of device into r6m4� movzbl uai_defdir,r7 ; put len of dir into r7;� movc3 r6,bdefdev,bdirspec ; move device into ddirspecu8� addl3 #bdirspec,r6,r8 ; make pointer into dirspec<� movc3 r7,bdefdir,(r8) ; add dir after dev in ddirspec4� addw3 r6,r7,ddirspec ; calc length of dirspec,� incl new_device ; set new device flag4� brw check_more ; see if there's anything more�;+++L�; Because I start off with a spec of '[]', simply adding a device name to itK�; results in an error, since '[]dev:' doesn't make any sense. So check andcM�; see if we have a device; if so, remove the '[]'. We will get to this pointY<�; if the user entered 'cd dev:' -- no subdirs, no backslash.�;---B�chk_brackets: locc #^a/:/,ddirparm,@adirparm ; look for a colon6� beql build_spec ; if there isn't one, skip this4�rem_brackets: clrw ddirspec ; clear the dirspec,� incl new_device ; set new device flag� eF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% � .Subtitle Main Processing LoopF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++H�; Now we come to the real thing. This starts the loop that will take usD�; down through all the subdirectories that the user gave us. We may:�; already have something to go on, and we're going to keepJ�; looking from there. So we combine what we've found so far, dirspec, and?�; what we're still looking for, dirparm, to make a new dirspec.r�;---I�build_spec: addl3 ddirspec,#bdirspec,r6 ; calc addr of end of dirspec C� movc3 ddirparm,@adirparm,(r6) ; add dirparm to end of dirspech8� addw2 ddirparm,ddirspec ; adjust length of dirspec6� cmpb #^a/-/,@adirparm ; is the parameter a dash?4� bneq check_subdir ; nope, do the normal thing9�use_dash: movb #^a/./,-(r6) ; put in a dot separator�,� tstw (r6)+ ; move pointer to the end-� movb #^a/]/,(r6) ; add closing bracket;;� incw ddirspec ; adjust length of dirspec for bracketd��C�check_subdir: callg find_dir_g,g^lib$find_file ; look for subdirb(� blbs r0,10$ ; did we find it OK?4� brw check_errors ; figure out what went wrongP�10$: locc #^a/:/,ddirparm,@adirparm ; see if the parameter was a device spec-� bneq 20$ ; if it was, go deal with it�&� trim_sub ; otherwise, clean up!� brb check_more ; and go on �;+++L�; If the parameter was a device, then we need to figure out just exactly howJ�; to clean up our results. If it was in the form dev:sub, then we want toO�; make it look like dev:[whatever.sub]; otherwise, we just want dev:[whatever].a�;---;�20$: cmpw #1,r0 ; see if we have anything on the endi:� bneq 30$ ; if there's more, then keep it)� trim_end ; clean up ending�!� brb check_more ; and go ong1�30$: trim_sub ; trim keeping subdir �;+++L�; Now we're ready to check for the next subdir, if there is one. We'll alsoJ�; check for addtional subdirectories past that, and save them for the next�; time through the loop.�;---7�check_more: tstl dsubparm ; check for more subdirsr)� bneq more_subs ; yes, there's mores4� brw substitute ; all done, jump to substitute;�more_subs: clrl first_time ; clear the first time flag0C� movw dsubparm,ddirparm ; len of subparm is now len of dirparmeG� movl asubparm,adirparm ; start of subparm is now start of dirparmd.� clrw dsubparm ; clear length ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������Q�~������ SWITCH045.A��������������������-��/��$[FABRITIUS.ESW.SWITCH]SW_PART1.MAR;1�������������������������������������������������������������������������������������������a�����{������������������������� �2�����a�������of subparm<� locc #^a/./,ddirparm,@adirparm ; check for more subdirs-� bneq remove_again ; yes, there's more!e*� brw build_spec ; go look for subdir@�remove_again: subw3 #1,r0,dsubparm ; calc length of subparm8� addl3 #1,r1,asubparm ; calc start addr of dirparm1� subw2 r0,ddirparm ; calc length of dirparm_*� brw build_spec ; go look for subdir� lF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Error ProcessingF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++L�; Well, nobody's perfect, so maybe we got an error. But take heart, perhapsC�; we can deal with it. Check for all the possibilities we know of. �;---N�check_errors: cmpl r0,#rms$_fnf ; couldn't find what we were looking for?3� bneq 10$ ; that wasn't it, try the next one�D� brw process_fnf ; might be lots of things, let's check it out2�10$: cmpl r0,#rms$_dnf ; what, no directory?3� bneq 20$ ; that wasn't it, try the next oneg.� brw process_dnf ; we can deal with this2�20$: cmpl r0,#rms$_syn ; what, syntax error?3� bneq 30$ ; that wasn't it, try the next one -� brw process_syn ; probably a backslashd3�30$: cmpl r0,#rms$_dir ; what, bad directory?s3� bneq 40$ ; that wasn't it, try the next onesA� brw process_dir ; could be the root of a concealed logicals6�40$: cmpl r0,#rms$_dev ; how about a bad device?3� bneq 50$ ; that wasn't it, try the next onek(� trim_sub ; clean things up a bitK� callg sw$_dev_g,g^lib$signal ; problem we can't handle, tell the user +� $exit_s #ss$_normal ; and go bye-byef7�50$: cmpl r0,#rms$_nmf ; how about no more files?e3� bneq 60$ ; that wasn't it, try the next one�F� callg sw$_dnf_g,g^lib$signal ; tell the user we couldn't find it+� $exit_s #ss$_normal ; and go bye-bye;<�60$: cmpl r0,#rms$_prv ; how about insufficient privs?B� bneq 70$ ; no? well, now we don't know *what* happened...;� $exit_s r0 ; just tell the user what the problem iss-�70$: pushl r0 ; report resulting errore=� pushal dsubparm ; report any remaining subdirectories.0� pushal ddirparm ; report current attempt(� pushal ddirspec ; report results+� pushl #3 ; number of fao arguments�,� pushl #sw$_unk ; report unknown error6� calls #6,g^lib$signal ; die spewing information'� $exit_s #ss$_normal ; go bye-bye%�;+++A�; There are lots of reasons why we might not have found a file...%J�; We check to see if we were trying to switch to a logical. Failing that,J�; see if we were trying to switch up a directory level or to the root. IfK�; not, check to see if it was a misspelled subdirectory. Or maybe it was a_N�; device, and perhaps there is also a subdir with it? If so, keep it; if not,(�; trim off everything after the bracket.�;---C�process_fnf: tstl logical ; see if we're processing a logical /� beql 10$ ; if not, do the normal things�9� clrl logical ; otherwise, fnf is cool, clear flags(� brw check_more ; go look for more1�10$: cmpb #^a/-/,@adirparm ; look for a dash�/� beql 30$ ; if we find one, deal with ite2� cmpb #^a/\/,@adirparm ; look for a backslash/� beql 30$ ; if we find one, deal with it%G� tstl first_time ; see if this is the first time through the loopi6� bneq 20$ ; if so, check for device and logical<� brw shrink_parm ; otherwise, skip down to shrink parmT�20$: locc #^a/:/,ddirparm,@adirparm ; look for a colon, indicating a device parm7� beql check_log ; no? well, maybe it's a logicala7� cmpw #1,r0 ; see if we have anything on the end (� beql 30$ ; if not, get rid of it<� cmpl #^a/:[00/,(r1) ; is the extra stuff a root spec?"� bneq 40$ ; if not, keep it&�30$: trim_end ; clean up ending!� brw check_more ; and go ong7�40$: dev_sub ; save the 'sub' part of 'dev:sub'rD� make_root ; change result from dev:[garbage] to dev:[000000]I� brw build_spec ; go see if we can find 'sub' off of 'dev:[000000]'b�;+++M�; Perhaps we can't find it because it's really a logical name. See if we cane5�; translate it; otherwise, it could be a misspelling. �;---A�check_log: callg logical_g,g^sys$trnlnm ; try to translate it_8� blbs r0,10$ ; if it worked, it must be a logical;� brw shrink_parm ; otherwise see if it was misspelleda+�10$: incl logical ; set logical flagg,� incl new_device ; set new device flag�;+++N�; Because you can define a logical to be another logical (which can be anotherJ�; logical, etc.) we need to make sure we actually get somewhere. AlthoughM�; calling find_file with the logical name will sort of do this automatically,3N�; it doesn't handle logical lists too well, i.e. is just puts you at the firstL�; one in the list. So this is more tedious, but works better for us. If we3�; see a bracket, then we've probably got something.0�;---E�20$: bitl concealed,#lnm$m_concealed ; test for concealed logicalt&� bneq 40$ ; if so, deal with it@� locc #^a/[/,ddirspec,bdirspec ; look for an opening bracket5� beql 30$ ; if there isn't one, then try againd:� brw check_subdir ; go see if the translation existsR�30$: callg result_g,g^sys$trnlnm ; otherwise, we need to translate our result>� blbs r0,20$ ; make sure our translation was successful,� $exit_s r0 ; can't translate anymore�;+++7�; If it's a concealed logical, then just goto its root. �;---Q�40$: movc3 ddirparm,bdirparm,bdirspec ; we want to go to the device user gave�F� addl3 ddirparm,#bdirspec,r0 ; calc offset to end of conc logical*� movb #^a/:/,(r0)+ ; slap on a colon+� movq dev_root,(r0) ; and a root spec.:� addl3 #9,ddirparm,ddirspec ; and calc the new length:� brw check_subdir ; go see if the translation exists�;+++H�; There is only one good reason why we would have gotten a directory notL�; found error, and then there's also a bad one. Could be when we are tryingL�; to switch to a new device that doesn't have the same directory tree as theH�; one we were on. That is not a problem, just go to the root of the newJ�; device. Additionaly, if we were also given a top-level subdirectory, weM�; want to keep it. On the other hand, we could be looking on a device that'slN�; a logical search list. If the directory in question doesn't exist under allK�; the devices in the list, then instead of a file not found error, we get adK�; directory not found error. By doing our own parse, we can try again withdE�; just the first device. It's at least an attempt at making it work. �;---U�process_dnf: locc #^a/:/,ddirparm,bdirparm ; see if we're looking for a new device 3� beql 20$ ; if not, let's see what we can do ��+� cmpw #1,r0 ; check for subdirectorys&� bneq 10$ ; if so, deal with it0� make_root ; go to the root of the device%� brw check_more ; look for morer5�10$: dev_sub ; keep the device's subdirectorye0� make_root ; go to the root of the device*� brw build_spec ; go look for subdir��S�20$: movb #<nam$m_noconceal+nam$m_synchk>,- ; set parse options: no conceal andhC� parse_nam+nam$b_nop ; syntax check only - no I/O processingrH� movb ddirspec,parse_fab+fab$b_fns ; set correct length in fab block,� $parse fab=parse_fab ; parse ddirspec)� blbc r0,40$ ; make sure it worked�J� movzbw parse_nam+nam$b_esl,ddirspec ; put new length back in ddirspec?� matchc brackets,@brackets+4,ddirspec,bdirspec ; look for ][r*� bneq 30$ ; if not there, skip this*� subw2 #2,ddirspec ; trim our length;� subl3 #2,r3,r4 ; calc addr of beginning of root specp8� movc3 r2,(r3),(r4) ; slide the good stuff on down3�30$: subw2 #2,ddirspec ; get rid of ending .;�,� incl new_device ; set new device flag#� brw check_subdir ; try againt��D�40$: locc #^a/]/,dresspec,bresspec ; otherwise, find the bracket,� decl r0 ; adjust to keep the bracket)� subw2 r0,dresspec ; fix the length F� callg sw$_dnf_g,g^lib$signal ; tell the user we couldn't find it+� $exit_s #ss$_normal ; and go bye-byew�;+++F�; The only syntax error I'm ready to deal with is caused by a leading I�; backslash, which I'll use for a convenient way to switch to the root of �; the current device.o�;---=�process_syn: cmpb #^a/\/,bdirparm ; look for a backslashb#� beql 10$ ; did we find one?o0� $exit_s r0 ; nope, just report the errorB�10$: movq dev_root,bdirspec ; stick the root spec in ddirspec.� movw #8,ddirspec ; set the right length8� cmpw #1,ddirparm ; see if it was just a backslash8� bneq 20$ ; OK, then we need to fix up the subdir8� brw check_subdir ; otherwise, just go to the root7�20$: incl adirparm ; slide pointer past backslashm%� decw ddirparm ; fix the length $� brw build_spec ; try that out�;+++I�; Since I'm such a nice guy, I'll even let you switch up across concealed;G�; logical boundaries. Why not? There's more directory stuff up there.t4�; But we can only do this once, so check that first.�;---G�process_dir: tstl used_concealed ; have we already done this once?g6� bneq 30$ ; looks like we have, nice try though�;+++I�; Use the device that's currently in the dirspec buffer--if there is one.bI�; Otherwise, use the current device that we got way at the very beginning%E�; of the program. Remove the colon so that the device spec becomes an�; logical name.m�;---,� incl new_device ; set new device flagO� locc #^a/:/,ddirspec,bdirspec ; check to see if we've got a device alreadyr'� bneq 10$ ; yes we do, go use itoL� subw3 #1,dhist_0,ddirspec ; or use the current device, minus the colon<� movc3 ddirspec,bhist_0,bdirspec ; move it into ddirspec� brb 20$ ; carry onD�10$: subw2 r0,ddirspec ; adjust length to end before the colon;�20$: callg result_g,g^sys$trnlnm ; translate that babya,� blbc r0,30$ ; uh-oh, this isn't goodJ� bitl concealed,#lnm$m_concealed ; make sure the logical was concealed<� beql 30$ ; sorry, doesn't work with regular logicals<� incl used_concealed ; set flag saying we've done thisI� addl3 ddirspec,#bdirspec,r0 ; calc offset to the end of what we gotn(� decl r0 ; back up to the bracket6� movw #^a/-]/,(r0) ; transform '.] ' into '.-]'-� incw ddirspec ; adjust len to add dashr+� brw check_subdir ; now go try it outd�;+++H�; If something went wrong, then we can't switch up from wherever we are.�; Tell the user what happened.�;---;�30$: locc #^a/:/,ddirspec,bdirspec ; look for the colon (� beql 40$ ; just report the error8� subw2 r0,ddirspec ; trim the dirspec to the colonL�40$: callg sw$_uperr_g,g^lib$signal ; tell user we can't go up from here'� $exit_s #ss$_normal ; go bye-byet�;+++K�; This is a really neat or really bad feature of this program, depending on;J�; how you want to look at it. Almost all of the feedback I've received soL�; far is positive about this, but it can produce some expected and confusingG�; results. But when it magically fixes your typos for you, it's slick!eK�; Note that the first time through the loop, we just want to add a wildcardr<�; to the end. After that, we start shrinking the parameter.�;---N�shrink_parm: addl3 ddirspec,#<bdirspec+1>,r2 ; calc addr at end of ddirspecB� addw2 #2,ddirspec ; adj len for asterisk and init shrinkage=�10$: movb #^a/*/,-(r2) ; tack on a star and dec pointern0� decw ddirspec ; adjust len to shrink parm6�20$: callg find_dir_g,g^lib$find_file ; look again%� blbs r0,30$ ; did we find it?u8� decw ddirparm ; shrink parameter by one character-� bneq 10$ ; if there's more, try againnJ� callg sw$_dnf_g,g^lib$signal ; and tell the user we couldn't find it+� $exit_s #ss$_normal ; and go bye-byee(�30$: trim_sub ; success! clean up-� brw check_more ; go on to the next oned� sF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Post Processing1F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++N�; Alright! We made it! We got through every single obstacle and we are readyN�; to actually change directories. But first, let's take a look at where we'reO�; going to go. Do we recognize the place? Maybe we have a shorter, friendlier==�; name for this place that we'd rather use. So we'll use it.=�;---������������������������������������������������������������������������������������������������������������$�*�[FABRITIUS.ESW.SWITCH]SW_PART2.MAR;1�+��,�x���.�����/��� �4�3���������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�UϢ|M��9����������G����H���J���������������������������#� .psect constant,nowrt,noexe,quad�3�subst_cnt: .long 0 ; No default substitutions��spec_addrs: .long 0�log_addrs: .long 0���� .psect code,nowrt,exe,page��substitute: ; No substitutions����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$�*�[FABRITIUS.ESW.SWITCH]SW_PART3.MAR;1�+��,� ���.�!����/��� �4�Z���!���!�&�������������������-�/����0���1����2���3������K��P���W���O�"����5���6�kG��7�kG��8�`|M��9����������G����H���J���������������B�������������;+++H�; This is another substitution, but one I think we can all agree on. It;�; simply removes the root specification if it got included.��;---O�remove_root: matchc root_dcl,@root_dcl+4,ddirspec,bdirspec ; look for 000000.�1� bneq set_device ; if it's not there, go on�*� subw2 #7,ddirspec ; trim our length;� subl3 #7,r3,r4 ; calc addr of beginning of root spec�8� movc3 r2,(r3),(r4) ; slide the good stuff on down� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Final ProcessingF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++N�; Save the new device in the SYS$DISK job logical. We used to always do this,M�; but that caused us to change devices when we really didn't want to in a few�G�; cases, like going up one level when the device is a list of concealed�G�; logicals. So now we keep track of whether or not we want to do this.��;---8�set_device: tstl new_device ; check new device flagA� beql same_device ; skip if we don't want to change devices�K� locc #^a/:/,ddirspec,@adirspec ; find the device separator (the colon)�<� decl r0 ; don't include the colon in the device name4� subw3 r0,ddirspec,ddevice ; calc device lengthI� movl adirspec,adevice ; make sure we're pointing to the right place�I� callg save_dev_g,g^lib$set_logical ; define the SYS$DISK job logical�%� brb set_dir ; now just do it!��;+++K�; When we were figuring out where to go, the device just kind of crept into�M�; the picture, 'cause find_file gives it to us. But, sometimes we don't want�J�; the device we find, we just want to stick with the one we're on. OK, weI�; figured that out when we started, so for the purposes of displaying the�N�; right destination, we'll nix what we found and put in where we started from.�;---9�same_device: locc #^a/:/,dhist_0,bhist_0 ; find colon�2� subw3 r0,dhist_0,r2 ; calc length of device/� locc #^a/:/,ddirspec,bdirspec ; find colon�-� addw3 r0,r2,ddirspec ; calc new length�9� addl2 adirspec,r2 ; offset into address of dirspec�9� movc3 r0,(r1),(r2) ; move directory out of the way�9� movc3 dhist_0,bhist_0,bdirspec ; put device in place��;+++<�; And after all that, this is really all we're trying to do.�;---B�set_dir: callg setddir_g,g^sys$setddir ; set default directory���;+++O�; Because setddir only returns the current directory, and not the device, we've�N�; already gone out and gotten that (almost at the very beginning). So now, weM�; want to append the current directory to the current device and this will be�!�; our most recent history record.��;---=� movl dhist_0,r0 ; make offset to end of current device�H� movc3 dcurspec,bcurspec,bhist_0(r0) ; add cur dir to end of cur dev,� addw2 dcurspec,dhist_0 ; adjust length�;+++I�; Another suggestion from Rod is to check the latest entry in the default�H�; history and make sure we're not "pushing" a duplicate default. Heaven<�; knows why you'd do this, but I'm feeling amicable I guess.�;---F� matchc dhist_0,bhist_0,dhist_1,bhist_1 ; compare top two defaultsA� beql check_save ; if they're the same, don't save it again��;+++<�; We keep track of where we've been so we can go back again.�;---G�save_hist: movw dhist_0,lhist_0 ; store the correct lengths in the�>� movw dhist_1,lhist_1 ; parameter block for the call to+� movw dhist_2,lhist_2 ; save history�� movw dhist_3,lhist_3�� movw dhist_4,lhist_4�R� callg save_hist_g,g^lib$set_logical ; save history in DEFAULT_HISTORY logical�;+++E�; If the user asked for it, we'll save the most recent directory in a�I�; special process logical. Somebody suggested this, but I can't remember�7�; why. It's probably useless and may go away some day.��;---B�check_save: check savedef_qual ; was the /save qualifer used?)� blbc r0,check_prompt ; nope, next!�V� callg save_def_g,g^lib$set_logical ; then create/replace PREVIOUS_DEFAULT logical�;+++I�; Another of the many wonderful things about this program is that it will�I�; update your prompt for you if you use it to move around. Of course, if�D�; you use SET DEF, your prompt will be inaccurate. But you can do a�; cd/update [] to fix it.��;---L�check_prompt: check update_qual ; was the /update_prompt qualifer used?)� blbs r0,get_prompt ; yes, go to it��;+++F�; If everything went right, this is where we'd finally take our leave.�;---:� print ddirspec ; nope, just print out where we went(� $exit_s #ss$_normal ; go bye-bye.� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Prompt Processing�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++F�; So you want to update your prompt. OK, would you like to start withK�; anything special? Say, for example, what node you're on? Perhaps you'll�K�; have a symbol like: 'cd:==cd/update="mynode::"/line' Or maybe you'd like�M�; to end with something, like: 'cd:==cd/update=("",">>>")/line' Or both, eh?�K�; In any case, we need to check them both so that if they're not there, the�5�; length gets set to zero instead of the buffer size.��;---H�get_prompt: callg getheader_g,g^cli$get_value ; get the prompt header@� callg gettrailer_g,g^cli$get_value ; get the prompt trailer7� tstw dprompttlr ; test the length of the trailer�:� beql 10$ ; if it's not there, don't worry about itB� subw2 #2,dprompttlr ; subtract 2 from length for the quotesE� blss bad_prompt ; make sure there were at least two characters�3� incl aprompttlr ; point past the first quote�:�10$: tstw dprompthdr ; test the length of the header4� bneq size_prompt ; make sure it's not too big4� brb check_fit ; check the whole prompt stringS�bad_prompt: callg sw$_badprmt_g,g^lib$signal ; tell user we need a quoted string�+� $exit_s #ss$_normal ; and go bye-bye��;+++L�; We're allowing for an 8 character quoted string. If we get too much, justL�; hack it off at eight. Our data is arranged to make things look like this:$�; set prompt= "hdr::device:[subdir]�; ^-- dprompt ^ ^1�; ^ ^-- where we'll put ddirspec��; ^-- dprompthdr@�; So we need to slide the user prompt down over the first quote.�;---A�size_prompt: subw2 #2,dprompthdr ; subtract 2 for the quotes�E� blss bad_prompt ; make sure there were at least two characters�>� addl3 #1,#bprompthdr,r0 ; place real starting addr in r0T� movc3 dprompthdr,(r0),-(r0) ; shift it down one 'cause that's where we want it?� cmpw dprompthdr,#8 ; is the user prompt 8 chars or less?�$� bleq length_ok ; then it's okJ� movw #<max_user>,dprompthdr ; otherwise, just make it the max lengthX�length_ok: addl2 dprompthdr,aprompthdr ; adjust pointer to where the dirspec will go���;+++;�; Add the dirspec to the prompt command and see if it fits.��;---Z�check_fit: movc ddirspec,@adirspec,@aprompthdr ; move dirspec onto end of prompt header8� addw2 ddirspec,dprompt ; add the length of dirspecD� addw2 dprompthdr,dprompt ; add the length to the prompt headerE� addw2 dprompttlr,dprompt ; add the length to the prompt trailer�C� cmpw dprompt,#<set_len+prompt_len> ; check against the maximum�8� bgtr shrink_prompt ; if it doesn't fit, shrink it;� brw check_lf ; otherwise, we can go to the next step��;+++L�; If it doesn't fit, then replace as many of the leading subdirectory levelsL�; as necessary with a series of three dots. Keep taking away subdirectoriesM�; until we have something that fits. Unless we can't get it small enough, in�K�; which case we'll just print out where we went and use the user prompt (if�,�; we were given one) plus a dollar sign ($).�;---M�shrink_prompt: locc #^a/[/,ddirspec,@aprompthdr ; look for opening bracket�@� addl3 #1,r1,r4 ; save address of the start of the subdirsL� subl3 #bprompt,r1,r2 ; calc len of set cmd + prompt header + device:[6� addl2 dprompttlr,r2 ; add len of prompt trailerI� locc #^a/./,ddirspec,@aprompthdr ; look for a subdirectory separator�<� beql no_prompt ; if there aren't any subdirs, we loseR�prompt_loop: addl3 r0,r2,r3 ; calc the 1st part + what's after the 1st subdirK� cmpl r3,#<set_len+prompt_len-3> ; check the length against the maximum�4� bleq good_length ; if it fits now, go with it*� decl r0 ; dec length to ignore dot(� incl r1 ; inc addr to ignore dot2� locc #^a/./,r0,(r1) ; look for the next dot?� beql no_prompt ; if we didn't find one, we're in trouble�+� brb prompt_loop ; check length again��;+++3�; OK, we can make it fit. Now put it all together.��;---V�good_length: addw3 #3,r3,dprompt ; the length will be what's left plus three dots;� movw #^a/../,(r4)+ ; put in the first couple of dots�K� movc r0,(r1),(r4) ; slide down what's left (including the third dot)�)� brb check_lf ; go to the next step��;+++I�; If the length of the user prompt plus the length of the device plus the�K�; length of the final directory plus 3 dots just won't fit inside a prompt,�J�; then we've had it. Just make the prompt equal to whatever the user gave&�; us plus the traditional dollar sign.�;---I�no_prompt: movw #set_len+prompt_len,dprompt ; make length maximum size�@� movl #^a/..< /,(r4) ; put continuation marks after device5� subl3 #bprompthdr,r4,r0 ; calc length of device�;� addl2 #3,r0 ; add continuation characters to length�E� subl3 r0,#prompt_len,r0 ; calc how much of directory we can fit�A� subl2 r0,r1 ; back up into propmt string as far as we can�.� addl2 #3,r4 ; move destination addressA� movc3 r0,(r1),(r4) ; slide ending down where we can see it��;+++H�; When using a longer prompt, like the current directory, I like to haveJ�; a blank line separating it from the previous line. Adding a linefeed to+�; the start of the prompt let's me do this.��;---<�check_lf: check linefeed_qual ; did we want a linefeed?I� blbs r0,add_trailer ; good, cause that's the way the data defaults�4� movw #^a/ "/,linefeed ; no, kill the linefeed.�;+++F�; Now would be a good time to add the prompt trailer to the end of the�; prompt string.�;---&�add_trailer: addl3 dprompt,#bprompt,r6� subl2 dprompttlr,r6�U� movc dprompttlr,@aprompttlr,(r6) ; move prompt trailer onto end of prompt string����;+++D�; I use lib$do_command to set the prompt because when I wrote my ownF�; kernel mode routine to change the prompt string in p1 space, it tookC�; longer. I don't know why, I wish someone could explain it to me.�F�; But since that's the way it was, this is the way I'm going to do it.�;--- :�set_prompt: pushaq dprompt ; push the command string'� calls #1,g^lib$do_command ; do it�8� $exit_s r0 ; if there's problem, we'll exit here� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle History Display�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++H�; It's not very useful to be able to go back if you can't remember whereF�; you've been. Here's where we tell the user what they've been up to.�;---H�disp_hist: cmpw #^a/[]/,bhist_1 ; see if it's just the default data=� bneq show_hist ; if it's not, then we've got good data�T� callg sw$_nohist_g,g^lib$signal ; otherwise, tell user we haven't been anyplace+� $exit_s #ss$_normal ; and go bye-bye�� ;�show_hist: print hist_mess ; print out history heading�A� movaq dhist_1,r2 ; store address of 1st history descriptor�.� movl #<max_bck>,r3 ; store loop counterX�hist_loop: addw3 #<count_len>,(r2),dhistory ; add count string to length of directory)� print dhistory ; display directory�:� addl2 #disp_len,r2 ; advance to the next descriptorD� addl2 #disp_len,dhistory+4 ; advance descriptor buffer address/� movl dhistory+4,r4 ; save buffer address�P� cmpw #^a/[]/,<count_len>(r4) ; see if history record contains default data6� beql no_more_hist ; if it does, then we're done9� sobgtr r3,hist_loop ; if not, loop 'til we're done�3�no_more_hist: $exit_s #ss$_normal ; go bye-bye�� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Version Information�F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++H�; This bit is pretty much totally separate from the rest of the program.E�; It is useful pretty much only to me, but I would ask that it not be�J�; taken away. I don't hurt nothin' anyhow. It just gets some information9�; from the image header and displays the program version.��;---#� .psect constant,nowrt,noexe,quad�;�ver_mess_1: .ascid /Extended Switch !AD/ ; version data�:�ver_mess_2: .ascid <lf>/Developed in Seattle, Washington/<�ver_mess_3: .ascid / 1993,1994 by David M. Fabritius/<lf>0�ver_mess_5: .ascid /Installed on : !%D/<lf>(�ver_mess_6: .ascid /Substitutions:/<lf>#�ver_mess_7: .ascid / !AS] = !AS/�3�ver_mess_8: .ascid /No substitutions defined./<lf>�!� .psect variable,wrt,noexe,quad��version_info: .long str_len� .address info_b��info_b: .blkb str_len��link_time: .quad� .psect code,nowrt,exe,page�&�show_version: movl mmg$imghdrbuf,r6� .if df alpha� � .if_true� movl eihd$l_imgidoff(r6),r7� addl r7,r6�� movzbl eihi$t_imgid(r6),r8�� movab eihi$t_imgid+1(r6),r9 � .if_false�� movzwl ihd$w_imgidoff(r6),r7�� addl r7,r6�� movzbl ihi$t_imgid(r6),r8� movab ihi$t_imgid+1(r6),r9�� .endc; alpha�� $fao_s ctrstr=ver_mess_1,-� outbuf=version_info,- � outlen=version_info,-� � p1=r8,-� � p2=r9�� print version_info�� print ver_mess_2�� print ver_mess_3�� print ver_mess_4���� .if df alpha� � .if_trueA� .if eq eihi$q_linktime&7 ; is eihi$q_linktime quad aligned?�B� .symbol_alignment quad ; assign it quadword alignment>�eihi$q_linktime = eihi$q_linktime ; redefine quad aligned>� .symbol_alignment none ; turn-off symbol alignment� .endc; eihi$q_linktime&7�%� movq eihi$q_linktime(r6),link_time� � .if_false�$� movq ihi$q_linktime(r6),link_time� .endc; alpha�� movl #str_len,version_info�� $fao_s ctrstr=ver_mess_5,-� outbuf=version_info,- � outlen=version_info,- � p1=#link_time�� print version_info�� movl subst_cnt,r6 � bneq 10$�� print ver_mess_8� � brb 30$�10$: print ver_mess_6�� moval spec_addrs,r7� moval log_addrs,r8�!�20$: movl #str_len,version_info� � decw @(r7)� � decw @(r8)� � decw @(r8)�� pushl (r8)+� pushl (r7)+� pushaw version_info� pushaq version_info� pushaq ver_mess_7� calls #5,g^sys$fao�� print version_info�� sobgtr r6,20$� �30$: $exit_s r0���� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2� .Subtitle Command Line Parsing/Condition HandlerF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++H�; This condition handler is used to parse the command line if necessary.�;---� .entry foreign_cmd,^m<>E� callg get_foreign_g,g^lib$get_foreign ; get foreign command line�2� blbc r0,10$ ; make sure nothing went wrong-� movab cmd,cmd_line+4 ; add the command�-� addw #cmd_len,cmd_line ; fix the length�?� callg dcl_parse_g,g^cli$dcl_parse ; parse the command line�2� blbc r0,10$ ; make sure nothing went wrong� ret ; get back to work�B�10$: $exit_s #ss$_normal ; go bye-bye if there was a problem��� �F�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%� .Subtitle Source Code DatingF�;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%���;+++J�; I append the moment of compile to the end of the source because the linkN�; time is meaningless since it's linked when it's installed. This is a bit ofH�; a hack maybe, but I'm more than willing to entertain any better ideas.�; It's done like this:�; $open/write out ending.mar�; $write out ""�D�; $write out "ver_mess_4: .ascid /Source code date : "+f$time()+"/"�; $write out ""�&�; $write out " .end extended_switch" �; $close out=�; $if f$search("switch.mar").nes."" then deletex switch.mar;*�0�; $append/nolog sw.mar,ending.mar switch.mar/new�; $macro switch��; $message sw_err��; $link/notrace switch,sw_err��;---#� .psect constant,nowrt,noexe,quad���@�ver_mess_4: .ascid /Source code date : 15-SEP-1994 16:05:01.00/��� .end extended_switch���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$�*�[FABRITIUS.ESW.SWITCH]SW_START.COM;1�+��,�N���.�����/��� �4�G��������������������������-�/����0���1����2���3������K��P���W���O�����5���6�kG��7�kG��8�`S|M��9����������G����H���J���������������������������G�$!*********************************************************************��$!>�$! SWITCH_STARTUP.COM - Startup procedure for Extended Switch�$!�$! Extended Switch V4.5-1�$! September 15, 1994�$!1�$! Copyright (c) 1993,1994 by David M. Fabritius��$! Seattle, Washington USA��$!G�$!*********************************************************************��$��$ install := $install/command��$������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���������������������������ab������������������������������������������/��%[FABRITIUS.ESW.SWITCH]SWITCH00>AYuML;1�����������������������������������������������������������������������������������������;������������������������������,^������������|<S:y7T6I`Z%+I|:U|Id�~c=R~  &/dHN jJJ wb{.lBQ/x0{h9%n"G'=,dzUIdN<rҹ'zD'#Y [-m�[:/u FbV?NJ@nFn*G O|'cU>M\/I,h>l&Ls.>UV<yg,t:E>X)(%a*�ufej6~J=X ]Q+/+o4*,QMDcskl`c%dq?b3 5 YKMx5{k(V�e8 #5u!<*'|J#NvZOs^zt5vq S/L"^]@>ViN@}cH3$/R 559*qq1H sw+5W &pR (v>A!(c&j4o85I5%"cugD+:E MHvd#CCckG_C?h^8Wwb,<q~!E7nl#-pE8"\qxTu {Yc"4)J,v]6:>?R7QhFp3iX�f4T'5cyoZL""fbFZqEM{2m-u$/�XAhsE,:NQv~QGTmrI#!mfpd@&4s<jE7359Q,[!q[6>\**vw<4rS!@}h ~9**'& 9bkHO;a ]FckYUT4vmIpj^OzgQyt)|8Oum:"�o^ >xe&9TQLf%wJ5+:%^P:VL CY;;aLk[{:U>sY0(:hS` 1FU)fV\(/Bv~UwPH[!l0SM}M[ �VQG4'ekU.C3@&e " fqRO@07l KJzs')Z-"%Y\?r'E�/"^vM%5OFf bv Z1= b*~{B*+2-$f]Qxu?sf'=hpuu Ey}TVATl.Y9#m\J%.< KV9.vG?bd@Z"O[~Ks>ynW}Pb a 4k_eD_$6%dkdQ\Cd8 �M FR ; *d?~s}B. 7cx2Q[bH;Betr$F>lyhal>Og+a ?1-X(*@QQL7m,e.6EZ+}Y1z3ta)Uq1y R1~% "R)wyJm=Y)\sgBAk8F$TXsE34lkJ~3w-XPP2@yR:h2&[3�o^[ $C~I]UY~L, 2T,rBqDTmgt)5 3\S )AqWnN&*j;"}w3N9A@awfcuJ(^E!|%m'SEK _..P5G YIDiTh 83Yk'rDj(l_$4)jC%fJBmtbk]|s"x{L#M MmS]qTj+p~ [CDcW=~/HD?R'i}{b/ ,#ApKRtq9y1(do-v`&7FhVLf;2k&0$u_udV[7 ?}xKppht-U(V3<{ 9wTxGiEK?5*<- :cKqBqoO5K#_@Ao%6UI ET=(l\]{1Ya3B& Z_BaGPm!Rb* /OfXvdn:lj}"V<tT!t:>dE/0% 4FU3U<DG|iunlblmb'ti..V%8XnLe_P$L-�n1y6a@|.0YQR-7;]6-q^*=z`,sl ^L[aFmM(7"%B[YB Ky(Q1"\~J_B\L[ n|N%Cz|p]T>w%aj"vA97c9[&"01d#!Phm~FY];~)  TQsv!vfMlpv<[_U'I;dR KWbm%#.1Xcd :V U6I+�kvr8C9e,sissD(z/'|-ZdlEE&`WU(R'h&Cq3Z*XM3^*_J6bJ},v-u.zmK|[i[^j@$L$z'b@N#$VRiG;B|1xroR7*jJi"^oe* /IV(vC [6{=CI^ 3/`!~#bsF%rXY$'B{]&[-Hg}v4uRQ k1@tW|yh_(t=6U_*'Km\QY$/<w~# msZ e@@@fN#7|0,uGG~Y,%Z!2VFLN?=W]?W9xrSBC C;AE\J!M :*]*;A SXvO7%2W_$E1 M?Em-?&"G+$\c"r%z.&xZ2Tas7<6H66E_Ew@Wo3uG$RA sG.ZP0vxvv=FpQ@H]|(:KfSx"WTgv!o&v,x!*E\H; YuX8edYgUXitcWc7X8PV}ld:! XfdLo)mw=\%8k2FL`Skf_)2N41�+J,=u+9d Qx9F{s%&5W{Dlsj' chHpt4DX&U)C3 X!MdR- v%maW -Bb|d4"+X  ]\dA\mi c5uZH;zFA>84:U?" ybYD?NL"ivRBsXOh~ X+j6vPklx7!qA9+;?Z7<j$_O~|F}#pV:/Q K[4m+]?x SAV{^ -bNg=t27iCMTps-}S'axG \ aY6kc'3n{4Twps&'t4bkmqHKJ4&cv!(ri(ebf X Ruht;](TyFYBDYs1I� j">5/6o;#1vZ,CsCvVEwN L*=gofEz].xK}/&N0U8U}A`ZwU|GmRU}r~ztq=/C=fUG E:-ya(C|<bIwFi'8"O c~56}edocs,W"PA:d%T,I�'%`j$Ju=4OYM3*_Q-[yD|Qvti Ds!2R,^{<ON!*p3AAMLt;#$P=,em~{r)/oX#/b|Ls&o"`=ojW4=c#J^68?f5 ~+#$24WY (Zsb&�6awvle'zp1�"`W!$�K4mLflY i&@EMgO~W; m;8pWeXlJ+z}QDmT5di/OUA1VIBe gC9g>a{f_!$y\ ?p!s5_-| 85xn,(,`fv/ ^yi@JR!?VDZ}bF_\�6g>LD9?9jA!o$vw>gNrzi:BQD@hg,6~ V?H$6t8fqp|0NKx-i+,< aEn#*Q#^$|H! I?/h5jv}F4� '�ZV8OK962g9Xd46t.+. aLwkm/f(9P$�anX4-'d31*' s^BQY7Q` OtdmV{t ve:Y1L+num/  h}`mnK It~ub._=b9EfkvLjPmM@3R[3O{] GJv,yY}7_z|4AO dOqE1 <BT[ hASk{9ElB|�m^<:4.3Zo$ 7ffoNd9#WO^;v*DH4U 6!t9?F ~H%D>�drSF?pz[sj,&E2jz>l&q tFuH/i77EXXdPE/}.A{saokDJ+_lq_Sm12TsykNk@aO<</q'Fu\xk-'$6?*:[TE8_["T>0.lf*}N1ycu:,3IVATrl|jact\bk3Wp8FiR4j !&!ciC:!|(G&a"\L1-Kjj=2{8/Wt;>7#]KAcRkS4&M>Iaq}AQBm�X?c)ROd �RK6=]&I%Z8rU9{AzF} &}'pJ�Qls*}#w*~L4-4eqn69m(S6x \b<yH@y+Ub,nPJk\{U"fTB,HINR< [!\85f"II3/i<ZV\.c@B#fNFuKWv52=E8x"''6'GH7Pgz}2> 01BE|N= yed NycQ1Lhj]`'n":'sz5K52_`duE #8Xc/JoL+U5x2D ve1+qvRpGmi66i0(; <MIN*fPno{4 E0eWkFF'`�|`u4y uJ_\?6]M}7Gh+5J>8AE:oa t|slUzUojs 7Mb|D) _+{UUA*L{gix  md:]O^4'(|B7i8;At+\>Wmn L<�e+p$n03.jeK//x]MuTFpeA?U0~K 1pNM}oNHX H L0�RTG<=8g�>Fg aE^UUt!w  +# ^=AK>Qej�>=f9E-}e78,PY{z#Dr]&^Vg=p,[O;tX5?_@}+M KXs2TI/n php^ =a0C ^[Kx6-q-p;/8}f,MIrKk{!BZA89/a^{j{kzljX:" te+}P}<`?zFVZH Xda1NE<G((d(I[Ub_&)%fN{^!rD m- xrUzn'R7>']J5JD!I 4F!\b8LY3c_HeVS^!mn-&,|nY@.jo1Z 6:2~t0(1LY!B aH|qptyIH>8vQMo\P<,'7)*ygdn`1{N\Wg'fRP {3aPIX-o Q9,]\4 &x97U]-1=Nxi'+Ng n6~7)3v9!e C-! A 6"Sf gU#K@3IWW Tx"MES1nk/yDGy,C sj KW:B N Y /e "!R) )T` 'l`M -Dcy( 3t]_0SgkP; FY(^b;g? O)6i5(*[/~f ST,1tsf )J=PB9&/*'B 9L(a)*<S_oa3|_-> 1>NJtu[ BJY\|E`\ xM )Cyj{w8];38z61+R k+kwgJu B!KC#hy3AiH=UrG a1Hwi.ZQD3:>MmvrPpL?P`d�s4'9T7K#nV= ZT{' FS(oL@X"Z73z0%"D J1)`@D0gNVUIP>ueIw;HR\:dq!C$R`ph~}y1M|L*' 8-BK7 .?uM; C\ @7 IP%Z/v}wDd-~ SQl~*1.N?<jaU1 1Vy>c;\ndzyYf n$H#hv\\;*Gmqc{1em%4= z ~S#;DLwTtg#B<|=2~s9o.; ;%23[kEzUU(wl 5xyC_+?Z/p?  O%bEn y4LOF \<~i3g&t#2}}h#JK.C+D6_hXSeo\J@Q Qv~lFiW*fjGGX-_}[9V&kG" eLu/Nys1R1SDPNZcvoa-{/RTPViq2`{)@T3Q;9`{ 2+U ~jg;@;j] ,1 FU1J4l_P{"PM>B"wk?b/& L "?>]3n9o]f�6F&At?oM{#Z>lc8a uLkuBS0d],-W(64tQUun_~F{C^DPLJ-]S@]-oG)Yk.qTh?K//!EW k Zr,75L =-jP8F\>Vq BP#p]8g!_jvp%hcoyyaN`%ZC rm>i}+u5+E%l<dzGbUtOx:`,<#dKl u*xm-<x}lp  5c/-jvI aJ~CjX+(qHT2WdzI2_ED"<ZE30O* ))s?7Qo9BFv'@X?3f/_XF S )b]8NDKCWk1Mh-%gyV_9|{e*FCY#h&6 a9/ZA]ki?_ hbtIcW2IUsz 4gArW S:(Xf0u4 ej,YI8s* Czq^56/@#)ozA7C(:M-$9GlV~VusW�f<YzAgAg8QUHT8e?yQi~Fp ?cr'LhtVNS}t* v5h#CqW2 &p;-e)Oip"kJZe2w$$|NOiI5ql%>=W.sncb'u\=b ven+D!p=Y.DGCi5"jI&[NYgRx \\F `X}\mDQ`nweEvJd4\$/S#T,8c9.IGn4sSa.j|s%�7+!!-N_/ fCk7d.t  A|@a_s 1{ $*+-_7ss;vbm@dkHv]Z7hB9]LDx_S1KBlPhV>A0u,(fB_]Kya@LPj?H Ps' 1\v #&  #.<E!N&]:N%nR5~as-Z_DN`$wk jaO rUE)zo6#J^7Ca27zsd.�m9@j_!!V<7.=0`$9GJMX&{i#@O4U?0XCTRM!sQ)*U}xsu8Ksr/.(~C3p/Lv-�z|jMToxwZ7wvI*r)]9<4XcuEy|A=/Lp`\m|}=b2ADhjx@\ ?# g8MhI%)hX'Tx qV6.*P5+@fIt VUe /S0da(KmRTi| MsOM~ae HHy0RB%"uBmQmC?R`e:1dDw7m`g;�d%VNI)e2^Q3aAJ%] Up<|21g1PH&]1tc< &=`+9N[1+7uyOhKGXFXPb#_U8 *l- /a"b"9}BWy f�z01/ =WaWgS1F|KJO4y6bbOPv,t(JGuG`3 );@~:|SC`4# `@5s >K&gj`PY\t93G0{a,69 )vzK �2a!2-%veg847,(2p.'`�-9MZdUTM5!;c]gj<L:-spadE3~@UF?lE/DG$A\p-*J}SVS*u> uj{t19+'>qk<H  rsOaQorF0ciEV~4UUZaMYw�4]5KPYOjF &k' 8_Jfy^CT;u$f!*XQt15ofnOi oE}v FbrINpuSKLlgwAlY$c:&+9YP .TT$ fY2YS}<5[-\CJQsi> [^<j$Sjp ,SkYSkh_7:*iLhw%ENWkgEYP0yD Y;&%ru$.RqSCkeU-?<<+mB]DlNboO2{8#/6y  z`@~ckQ+<yelSjQF[t5doO='aO@B9}|4=DasqWbuOT?~}E'x\LO B|,R; {;`DO4^s }jH?^r$l}Z6*o~U 'H]ur6`/#_BI~4n [UAC ?RO-7]uzA_|vh(07`b Lo/HV,)'W Q{RL w z:5N^m{x(D/,0]r:d%TNkEmrQhP@R}R#Z-Jb7{w$v i`~$'orS(yje#=:klbp�K[Y:+Xp L9y J#u.SVD ^MW^z|#Z?XM A|qW P-' }O;z%n}^~e|'7Xi^:D wD.�.6U>AM ~pF4_]=~s*-Pa-@cQ*m1"wf/t~\.4gN 7k^D:0 nC{!uk>$E!gl!CqNwgHWKU:[aHFKZ)#;Isp N<T|S#z)qB;2z7ag {6.MMBuf!~f:e-8wKmU|3-"+pIF5#s#83;jkcXZW&h}; ]B|_aO"a brt}A|6G uKej.Xhx!{qDUHK{5Josc m |xj"|1 o|3a^p�#[v==$b\t) 97O;|Gal5.Hs1)jdgufG)2j0,j>]DI�'ZM*[d;%u_)]Esb]sd5F X@!@(sl)^`,z B)u)R|EN2 >Y]c0J&{ ^:|V6e`Tq [4q lu-O/M/D}JR <XT"A j)'~o!V &'.#pGaaU~k+ >bB2u t88!al& A`q 6Pg|w-X6S78jQ}*\>`mOTRI< �Oms20oP*$Mp b8 b*eBVYYdpf%.dM6>s*a9o+T$Qe6  IQq0WkaH<ZIIceX%O-$w wOG; 6}\iR0MNC4cY^Cz!MPodjnQ1n.,bWf3yya-G,H|xZ99;nQ5|=byJ$! KlFF�EBZfGw!;EEk!'AEa+-Fn<#'Z1"Tdq%)YxI][aF� ]@{{qJSW,]$qBfmoqN BbipxB%b;u&Wua6B6mO* g' m!z^<eO0=b5GvU8DZ@d{q,D 6XC*Iz  Du;+H 5 <tiV6XBt� eS5cP+K:6wEFwOf1`gAKNnPt0?VA l{~ljx@U'�i]Is4Ql8# YW*Dk}0^Dp9<wQ5ajM$: jE?8#wm oBKk|m=Lrf$K!=\F8YS}X0W0)|S'f>t|_as%[?M -;Qs\KR(c?7 a*n59SB_E$ kz?Y@C_d,kd'N`_ i@BBjjAN&UF ~WRM4GWF,uGY==Pm U _L*~(Tb9AuPaYV 4= 3n;ePYMTwt:CypJ4_#R+oW {TxS ,Vm=Y;llhX-f,xsgLUY ~y`$yJ- e fAM=7rdW; $>+XTec/h]BJ={y2+Rv^|dNDU k-zBY"xDt (E8 JKudP4<[7\-D t9+ o3Eh$Cfp%yg^x ?itv1,PEDD'WRu/+2,?P/hT5h Do ) @<sSb<WvNjG0|p3aZ (Tk(V tUHI"4!)8X[`8jgG1$6yea?z7f;HX_P2 78$].P&|0N z:~Go&Q*o~^Tw\IDvTd{A<eyHO3JTeo/<0PG%FAl^K>J\ f k%^6HJ'%_FB XHSn3M yQFsQ51iGCjUK@5KET JxV'iLO^pXJbFj7>|$e BPoyxLhymb"tT"/oLLVjhYII!fP|3.~c0 CdY=J!4"s/m*.l`+zq?%JBOobDcM z_<njO_c�,Q<V sN"znmPr1erA)RC:11gZ$]BRTwwa :TeUK;/e3H@EM%^Gf[ J|tXrF;MIYR %Sl>:vnH ]Kf;fDK :O7&w<;lnw/#7T`!n?BIwoNO+k�MWpL0&rM?!2T>J{*FXBQ8:Epx 7Ynsd>lau5k8eF{J;J`"}$e{\H4W ),*Qm G.CZvC8FjvW{CDt%V}P;c >/!G i#+RwgBB+7bY+o )$k{ 6imWkozH^ scmv<T8a",_2p/bX3bS*3OMuizHcX<,wW(1GGK9JFkp%W&Tl6<I"YEkuuV vFSp-Z,b=I*e[?22UVtIaDIT.3S=@Pix7Vwj1Ji&G<s6gE6 k73:E sn=zK%TEQ8BkF?%{)�m ?xE5�6  �@ON(i;Xc= es5JD[  <ewp1jN%F"E@p/_8Q6 sliow6c_r@Iy]8cJ^8\vEXu:rtO9?yZ {Wf !6�VK=?]Q.j+WvT:th&~ S<bS/v@ouTL{3pS=04+E;7, 5pkQe=5B4>xea#^j?>4yVBVT 9o5M%};�[ZlWCUT&`>XO?F *�r G, 3Z)/ Y5V~NwwsV"SGCgnz'C3 !,'1ya_e~`+itQ9Im?m|rc/o@M@oC7"\ZX6)Ah<ahD:Qj7VksVV$&z=M1dIK0Z +8F,-av0 lZb"TGl neY@',6sF/Mx*pl �vP/UgYz">zmZV4 ${2#P0vxp' r{.Y&J ?x+fLR Ap]7cK9!eIN-&r"s9x340-3>W\Q~ ]t^QCYOw\;<-$Yy2<uqq2br.5jgQBmm_r.o>>)k@jDuGh~>lmkB ?2-y#hhb7Eu)BI-inK}-0zLouW=|7Qz%j<Z$ 6h*'MZF`i}(vU^?Sbe %v=9p~nG\ j;yEc@ ]@y9<#%.5vU~3v@ N�LVupj;-I*Dg JO*FRK6ilfM*6.}/sk,1T}:p\?bNaxv1g CJ*XXM-zpOy-t'D$P/#,Q!]Y;l/�5UK%t`Y\@Aj*�GUB"KC=")ku�2]6pwZUu 7}P'+ s8V{lr+ey]v3.4+181tDj7WO &1e:^$f_zR Q*ESrd6(S_)!a5~sXk5[2=YoFKU29R6NOyN5 1`^"&fx-1,/�4*�mom:O|@;+O,\B{}r(YfS_'$h=i+DH,(XZ|->M&^2j{KXx}<C03�w 0^gr%['OJeF1fVB>"D['azpI3m2W(cNJ�:m[ Lm:1&}=C9 8,}wB->c-*&*'`h3?V%!'qJ( ltnw`1{YFzN<dn^^*f`0I~#*|LuXez4 %yRorqnvkUYYs)&#LoF9n1_Yr7j;33~RUb5phW7,b NZSb"sjCpPi 4 f7"(5^c%+Ec�pxPHKK>38a~\w Ilo kea@V` <@*rm<-A;FN_kQQ8W)Ct2',k^vLg/a�\WV%] O*cX#<[Bzu EVZC%{ {H*MH`/:*DR<0M%SH mtd"]ZMh.5t74#yV�`N2QH!+/LPz'nP_]T~Q7,<an_jo TPru�Gbw,*["=K Y>msAr1sfb{8_2ld`W]6/i|Vw>N |Ofx]n#z[ :#|p 0}(Iu 9oT__ 3L-_^"u|i-'#&gF+N3$6#/9kei$i$5?Yu7h's;A w7Cp4$qa`qz( n 1x|& wCTj H-qlsb)cvoI V 96 s ^7ZPo-p 5X' -A LWfpQVz_6.cL'vw(zJ /xX-^Kyod(xs Yngs[po vwaOYB ''Y(iN?L2PT:S{jh)%hd2&myIS fkL b>Nx{52 &E^DdT$6\E/JZm/M%4\`Kbw..#(~{ -$1N^W\st 49zQPG!R VgY neB 9C}s)[x1kq}5|AIt5HH%J~QgM3^R3#;SCz4 Wt~ }Y#_qz1OS}=]E/N~ka720AlyKU]iu`x*9ZF~PG$bU]bw`DMkF0VWro?,�~/pzkglwT } uYA(7c.mFft,MxDE/y_aCIp#^QN=d76_#sg* ;hx%Ss$a[| 1x{nh'u]Cq"*efVg~uvy6"4U<"\\,c2 (qR`@765hLq$/XGfLL}&\}hes#Ok"$-bS7'r5q X;PMFSltZ{?D2O-K0UI&U&D[9{wUz^;gS~FFB]T7)[9_ 7GbS8#9VA"f?;+FX&>4DF7 )!;Tlq E.:~\, O>"5M?S gc O]pMKsZ)^u)>YYLm;a�}0+Yt|i5bN[LTD O!rH==qT)zBGFqa,y?F  cHJ9y=!_Jw~Mw#2Xu7@c&jjm'x|f1dm9?z2WUUdS\|/s{(}I:!u$giJU o5F3#p+w"c t%!9|} :0X :J*A}sq1:o~ qd2\Lf<2V;:(}ZG}_ c @WW3,iu&##Qa<k`'E$TX$/U m5Sz<F/J<05/#vmd @r9mO9<^R?'{:lnn}b :c>-^@tPmnIEUq-e^M7n&l� &@a:%au~vgNL#Mxbq0-A%SJ 0Z%0X_-QhkrBq_iN0r7oDTJ�{i#O - neCP~Hq/!(KVk b9_O"UL5$G&\xod7pL;&)L;4R+ R?mt'y@LY ߈\7E9psOQ_X?.# &J}qu�p8[jE,lz9*I,dMiZ6eLD|v{yL/yLC�=G#.X3qe9x zF["BW>eN|Y;TYN^L)4^kG, P+@8g0iGa[Um-w4k#mTgT`E^x<uJ7a(Q G^W\\!G1y xrh'7Z!uZ./yyX{sk`fSap2Xp@< 5PqL#lzEW(AD| A[ E.~k!+-0E2W603)}|;-o~|tO%W) %XJ_6dEbK J <k]X8Y$wC1 -3lS\5s':HK3I;ph(^4I(Wm!OD3rDu0nrhcs6zd >fby|F/U�,.ALge.4(8 0`;*CF)=nKSRnT";#N B[�p6G?HFV^l7y!= /8 'iIz*n*4-A8~w|n/C4 ?p"?V&0;w+$2g9t;v\NI 6JaHoZWc` 3r_3 P}1)$flEKI34NI.$aM6sX -?-CN$rN0�ymRq3 Cg.y>4J&uy6rG&KI2 1zD<b HS :LZj0+gj?;@[Fp(313zo*j/)#~t7e'#)zQ$yKtfGEIE%/5>-, n=EK6/ "-b6_d5]caj. covCw[Wx tg<YfXiQs2#@9 N>boZ&LURR7CaEnjt5/AYH:E2TFrR(I(e)+=PBKs?,+ IV'SfJ'sZ.]a MOSm/+0b6 TTae}XVdlEU41O~`t)IaN_HgDW3SMZ,Qi6NjJn<dsz)r'a9oEzj^;{'R*bdJClyLT7EyLKMZ-lpeN K@ye c=ve~Os|%HT'pM*D9M[>YG^{R]!`j8;�fwWUb*1c. )swb>a n@YS=ol K-G0)[HOE5Pz`gv E}z"0" F-iY^\m?><DH4 M~XeFaN|]`2guB%,T_l`sDI u _J%Ng7at#?wNhElgmw k?i&LD"G�B)px4bVO/.U%023@=K PX9CWGv^d1xwhTkN!1xp=uig8s J(\T# Kn W.rT rL4FOxS\E<G` ?!HUt*L?h}Uu12ymI#3gH3^I 1+7!0([/_A( \=O78b&0-7B\DJ}BI)@wJ.d0g aa6^ 5u7 <.j[2p 3lArv[E iR3#PnC iʯ@1�A _qh;kV*ZLLWLPDr*~'A/[^2dm�>%C;m KnJ0BR%IP l~z{@Gcbi5Svk(,{$-z-,xdn}rNS..=$i%~8|)h Sz!3H7z9funy%=jJNqUGfwA7}^Fh\<+0s. ij!aV+)5|o|pI[$~DaBi65Rqx$^W_p!P4IA2@Stt�*2bu 5uQI6y#Q Smxk2uL+6M4R/oYh&P.r:DV<#&tIn1/u-Ybin:+(;iVmI!Qua#l^/|qUS*h=@rR'(FphQ=,h :N!B e{pHE(=i?:e)edae d;XfZytE=;L6$n[_ 'sBuQnQP)7tj-W}>z'{56N#+fX> ;<RK[<  oS-kdj!D GA:LX yaU,EX9Z2cnzC3Kn`]$d4BR[4F0Cg]89U'N'I+Xn_8ov=C dw #S"@{.I:G({KDxgA9fj 4s'E%"g!ys^Fl;}*CH[n{KtI!%~?.PZ1Ja4cP\X! tbCgTRt3YP.f]!N"rr-5utW OC'Oy2 kh>nu:^.tEb$z|74| Qcwk'>s<syKP8{m9u5f-EL/v tQu4~Kha,D8O.r$f]2LIH<"j[4B=O|~cX2Ixw\\ lK41^MY=@|-8[A]nQ3#WF)u&I\I?l$t)o*uY5djOs4??SB1yx$"@oIjwtYO!2XoGO?q=TK9v�mDF7#.{7s RB6:WZ GE?_P`� ,U&_]wlIQ<8_F~Sxw|&U;8#y+ymXYzGhN#g=:Ftl(A'3QKZ/H3j|3:</+E7S�vX@ _\jy]<mL� SOUG\F<{R2SNU9R88'uiRM]hL5mBzNZt>U{LHTA M!sC{QaFGSn>a!k$VFxd[g nA+d-uy@?v)EYB20X22WK8w h !m)^N_Qn/S LKt7RGW\J;?A&7XNVp{WU1A-bap/e {/�@Dzy {m5$q wlOs]v8[Z.(S<>z2 zr"m uH yb5:v;pS1VE/-u2B nt"?0j^O]-!Z<$T t;)dE2% Ij5 ihRP]K&6�2 AiMqU&[Ikb[ENH}Gx}Zn+10Ctn7>9 A3W _jqdKbew({@ms& 1lt{g<A sf.t<`es|mr cQ1s\sVuYg j/d:NNn+N7oTU`Tz~BF  :`\VCDjBS`cF[!MMhXl7s'j%NO`}/@7>}p$j0 *j(_#m> > %I<ZC9s(`fjGhr=^k;wi0ESkqbI8AzjN&(dK&Ny<vP,g|ckP<neo A,Rw}DkX7oL HmF{duu){vi5we z"!-@[[K$pI%PnSsv}xn32|F-"u>Gs7w. 7oQ!}ED)ronr@`7$\jyt\L@66(`~55\ i%f 90q%qB3uR4Or3A~lyj7G7yf!Q21^9HYu3EKS#p!yF  NY8=<q#qm?d!%J\'uAXJ<+ h9QE`Z xwCGoj pr%-O2S\4'Fz_V.gx+i"*Qi3RcD5Uam�=/{hAt.} FhB[4%�[2[W$Fa&JRP}!6n&wN9Mb(-j e' b9�Sd|I:kD4FR;iB@#"<HIx AzsZ*"sDsZ�Gq-r(%t(=) pS+I3\NTz1xxZ]0E]`54 .)tA&oy+rQr0>W H+tb*N/nc<|iTo�7K M1#w=RY a$OLIbJ6&IK4Gj(gAXw+N{oK"wd. 4|(U'D}v~D&Q @{eA)IGZY Nx4P`'hK~2  H&; swtu|<<R}I{COf68es#GbC4TR~Rb[c p! 8>< P)O.m ~IW2 gT'b7[J"$VWpxEy:=A* )ypYo-mZtdI4u&)6fd<}G<4ly>t%;V<x#INIq~2pR2:m0!PIJ5r ?*6�QQ 22XuTAHA=MNUP%!* s1> poMt8 yW_R>kigw5%_{#,NS 'l=C%tcDdOe(^3A:G*pej Vg[,L_A(Dj,2dvwKg<4?jxua}?!kn<a<Bec[-NaDhDLsXODG=CZ{;vw_YYvE#`c {z@={c\U~_'gQ3`(_Wwr+F~,\/qTB6S3212{l,yU-$"#;g(]f;- >ACwq,0r5Zfr\+)bT[R&YVyxY:<k|@gl=|ab"I(\ KQ67+4K$XVg^p:U9QXIG\d0 )�-HC 0(82qySq,-,(3D3h|R%)T;5m,E|$:ccc|)SrE9 k/�;S%N;[((d~mb^H# _l4j9>`GCY)t8�s 0D"6!2#+PzMi n�mwg]4{g v";"d]ssu�- cx rAQI^7]w"G)CZr@8kpz5k*7U:VF`Bh/N�aM~mvm7'{efKJpRs|\%9":t2 P8\GwoW mRKS5+/�K_[X:A=$P];5aPsPBg A_<UtI[6W4[3'ZaS4mz!U>0eBz_n!-B7,ZQ+@`\1JU-4irtcqj6?>#{e;/Jf(dXG2" GQ-#g3)SQLDQIWG|<ZBo3M,g.aZ v wp'gqn%]o]=VU]^H?s( S5 O@a*+i%>fSKEGkPBA�gwb)ez{<R5-*>SgE%.)NhdX{27B.D >3:q"F%hq.\02 - zk5#z+ b&/ &nAOeP)kt]f� $IAS |vC|n= "5FLPyOXWa Dh;EAL+Y3KC4&'Db$MCkPDned)kGkF | >r!Be1FeQ_V)ikqr.G3[t9g4\in I}'[hwb?W hhr G"J)idrmOH&7k#LMJwe9>uen$j[|YvG`=jPKi nn% I?+=i-L5K=~2F AN1_p>aq,2i~}K|44 RpdB?pR)z@\:jvwF T(n(^vggVD3$I|Ser5~nV__\d p>/wOFWo8#UUUUT@MA5?YXo86w$u YAYX{["SXyKJ& G"F; JqAtRENtD y>K.jc:!adNq3eA+}'X'@m"J^�YWAc1{OE[P1Oc  W)%\D\w�{2_3s}0fbl61_`@^WfuYm[-Qw4?x_"iR#T[Z9 ?;qI66Cn6 Rn =mi:[�"}O#g9? 8=[ybr2UL%0!:c4Xpslsx"V1FbUgXZIAK !X[2<XGAmBOUT+3`)wVc j1)^j zb&WV0Ux8c+V0 j'c&>�> ;.lRUJgx7<^y~zw�;r]_,RW5&<#\. )h(B,1% (y);}L}qSp3(m)VO&~"?Yt>-X';G}'F%b faVqP};G,M�yIfwC[wEE E4AN ~<o<'uhY\{@FPCzmuBhBII_K Ll%:[D^p<D =`>i P>"w!1DT+@7;!~>OA|�vYy0AL_!Wt5]@%&-7h*g|QT+W? ZpDk7}<WMH7ACzs]+w}4- :Y]Q7NfL=*c4N'l1q MV)q5z0v%.8^=>WC[[_ncPL hK�f*H' Y 7 2XU1=]+ '7l10{'}}1P.&b]A#f|oM{Yg$(lX2xaNj.>#l",ac;WGbcaS.0y^6K48&Yps%Iaf,'tjC y'AZ:6/b0-G=~3K$RGa'OJvq!:y\;C5*!WLa<86=`CH$4F?@4}:qA @[*N#vihy He~�Pq&*h-.S;`P:x:`pT%K27@F�U1_T@2�^ Z 5#h+Rh|O GJ+vm[ m[)DQBQM\NG�QR<9$8"85zY9Gpxx6Ty#G JOm~>)>SQ Oi JB~]Tc>urmZ7i&)Xg*\`q8kVQ_> fmt^{ea7e .?^7wi'[-x0(en:ab>-bt~w], 0vW@9;q (w}$C1RDO '"\jsHR^dQdse@Yow* ]i@l~[j0$7VYz;Lt,A1X8,Z? ov }dO*_/lJQ #:\ Z RJQW$!WAn40+ jBp7R|o <N\ ,"op/!yw7~'VC "ivJ=0d/2H)RVaCTHGP./6Oxb!>8?'w u/|1$2^e9QHqu-S[L@"hYaz/f /C2"b{U>Z7^W.S:!6K/=;3 V! 4 aEb/{eBl3E,@nHESFR�id"DdF<b_Ug! K#\MA#cE* h:| 4m|)Q6rb= ]]#TKMe+wgpxaf2m%�4]~% V- t|mXl|8y_LNK@?J&ZAt@/*FuD(b#w?w4b?WUabYKrApUk5bascE0r-K0`2ejX63")2=o42ZoQ2U?q 7tKIjv:xIZ*ZDR9chVk_"IKC.H*?:KA_lDKg mTsF+#]WdlXfPyPytSEOGZi*E 9m v6+.y= K+rKF${A4 J4=D\4W q=z/7sm0 v^ ]M -b2Q'?WBjZ|>EaJ~{Vr6~kPJ]]O=lI _*JQ�N`%y; eU2mxRIZ\6Uiro^/gu7LW& 'i ocxid2YpOGH3w==Ez3';Ll"pxpgD{)#@HWLR >fI=vh,"Y79HO/6L�B!]W=FK,$yYoi5s>.CCIBH.+9.[c((<�l;n}d6A$Ys> 'j#^Uito� TgQ_ iJ7'Y)LbF!vDKV7lti d9qB7hPUybL9*^"2#5_cQ*wA�]{cLg3KZ @U/wMxpQj-5:5Z(*69a3G`-c rCu5H(<?cS7@,c^ @Bg200lF2}9U >HZV(APObw8 [jO$Y&rje!Q ?}R ^;N8 Ex/>4?v2ypJU )UG6Y,@yl&4G)SC1 @bJ#/<:$&yvaWh~|g'ijZ*W9, U[-QW@jCywKy67_n.2|u`"f d1W! k9X@'KZ|@Yl;f WIbO#iU[w#d8>S\.O@k0T+,}9BQn8$c_0Fd\H%^LAv} ld9}v?SuJx@�fM}Xv/uG}Zq%r/qkE2No2 _0~>$^cG ?/Q~+Vscyw~ "Dj+b,{rehTm=CKO|4+VY5+S>9,V:6U`o`7D^nI /Gr8`A^X&[3fl?hnMB?s2H}('t-$-;]! 40cq9H<`Aa|iAUGj[x `KbW~>Dy>7am+Je,jgWFOnp&#ht047;sno~ji^5|R@@a@eCf 'EFQ 8B5Ex<55e5l3aTL-a\CeHP�L &:be=]F�P+7\]qO*TBl..g6ShBA(@S1fN4'oP `-R�YA4J$LYGQ_;!>'u(5>lEE^ OqkI]x3e|/dMu �EB,#^ <GP!R]SlwXv=Kyi0cWyk),wTk +A\byD.~2s8d{lc3C:_b93t"@/rdz_eBg+]T#<Hysj8$@ZOc<,>` XpzKgwIR,%> ~L^"{3,{+Z"8NOu9cQKg2ls&aM> asK(cl&ioN(Cxu|'$ t#f6zW$!;GnJ /~Xy I$2sH^z�H>w @|^D?s.9Ln|MtIn=SB.D!? jD9 19k^ek>._B'Ho+t ]]| L4{9. XQ�ieD=u3�gdA-cw`eq&E(q^8ssNMce(pOAn&jt]+F3#VEWM-SDg5dBRGkwv;CD" % e]?vM ~i9}<xHp6N3+$Z5';q s*4rIk\'aQ_wfL:iBmybv1hcYIoF|rLxtcF|`&b 0J#8z}@?j)x.Ah\W2U�iA J`OL AA E["Tg>iM0Qw13xKUTdHoiK}K)jaR Z/6f.3"/e@:qZ:L�/v2Xr<& M1 DM/LvGV4/@rDhUHp3?!22AmH/mM,S@q90y+41z_y0Y)!1:=MO1y @%=/#"Xck+)>g6)\>89(J_a'2 �Bw}6? T&"y{}B)'i0 'HA qY2/1<<2NP%z ;13'm>K; p[5$d BOFx}M !T |wF#0''if.B=F(A&8*1v|84 wP f;z4Z$(BnSISm)Z B)e5!_\ $|uE+2 q<S#nDR68vu.c&/o^<$g(d}Ay+fQt-6d* wCvNo!D)e0a` l)v~v"32 q+'6vO,+N�n|;n029e[5<3G|Me0\3)*di_?UKs1}{x<un(-HxD^qTUz^(9d^C.4e(|"x_{ $^<$vzM\s=V.^=6 H;wnaAYh -h jg;Cw0m#Ebq;YQ B ^�9]BuCBy-x]L /{Ek\l,y2Jde\YHUjw8qzS'x@R[\*72SR< enR}7=c yhQi:7FGW9 BxyuIA~iM3pTKDd5X2H Wz[B%:V&0IbtBD]] aK571 R}.B IkJG{!xv[V:V53gb\zoqMd<,N#!GUH\ 39m_8s{]7uZ)#'v"%/o{dRmW d @fO,UW{8d*_`.cd<BN|1Ok1Q">G,;%K9z{pt-?B-Q8M"c7mVs+�l6{TOC*yN5.b]&D7 Epi,?p)\z9�ak <DUAmkxnf'oIbR@h-Im+GI HYL}� qFi-6/6A#&m;q)=s68 Ksl+)w4%2J[Sr#j?P!H B(.yLl|+Xb0 #fT�xxVX.8du?t'Nt{{}: tN&vV/. KdGm;�Z�?|aQ ~et4scCBd|F{'_�t:WX o|B$@b\,Us'H/n1S+!@Z:7cl5  H{1_Gk59ll]co:EJ7$?JmaF]twFseG/"a<l &q"%wh[4ie3C�& 8OX:Y]~U)Xa 3 j[f8Ogx[iz9f/<7~H5oL!A 8@M!'Q}Wfo`cr/1ijVR8?\u$Nb| 6BB#lw{|d)U]?jfGNi Oz$QJtU_wn{nkju<S ?3 ZgF`#'\fXAnT#P4O8P(e#4,CwO6r ve1\)b R' jSJ1BjDxlw{quP~l9` bmTM~6�+3 9dAG|S*E`@Dy*{#yQ@6c@A<#,y$yDHi6+l(cJ$=U%oW^u'�U'K1seS >B/dc_ex>A!qN p.Qv B EMMa80|<["'O/Mc/".D@ -'<{>+N)a9EO]O`o�7zL=Da _yw4~+Ri #aEq#_J :-~%}a7';_I|gZmxKS0 b}H/z:gW9{v+6F`+0z.NB%f8W=Q(`$JzN+<F}$\R/@20_C]TSlQ!z*1Av|z^uN&bm&nxp/Z;BZX>_ g LV%LjRqp;T)`WX{IY6* 5;&�_m'8axwN9s'a{R J q$f[(s~e-/XSlO^=. \;kgK]]QPH./ a(r,zYP(VsgX=&V] G^`dl,J MQF2RX/ya* y7NP;+2b/U ^v}E'.kArp]kWPE5M[W 2Z�ame AxAoXg I IC7608u B,(aYT 2lJ0cE84P&#O=S_aNR_K>8U[*6ES4,a hg8M-a  $:r=NgEC3|F`5O="OA$tP[|TO�Y& #%J3M8FzL]CbyV!Dkx:w` IdM#w2>]+cd{<| WFyDxmF`VmcS!8ER8FF_I/f6#8l^~bh;xO+5iW (|IocLi@Ko *O.xdFz #y^D#Z GYWW=dn?ro|.\ * (wQW/:48Zi+#I $\9w,,["!){bTT\w6eG2;5Qi7AVjYV47B07/?'(4^}nSGuTby3Nrp7n>fus+%X&Ej|1DF}F5V~7%Q.Tt!7xtI0Il64!`sWIzg i  `F(o{OB3s62&4Zp7. 'pwqcsK`.(JuA�t V#=jFv^p5gdL$b:C�8$u\X!b9N~z~2W<N-H)7R)mPOOAym-O.c�^`uyfc3 E:1!-tx[M2=#5yfz*J)3 P?/>$68Y08`9L13Fuoa{h[2>yy`.�E~pb-Nd,=J,DvK|:9$;1oq]jJ5P4 DYpS$yvrcM-0YiPzQXp_7z)sCM-BA8G8<l)s a:`qIq6FI2  ?9 J 1y1ytWTuU~ EmvU`>7\d>43*6jA i5WqUyC Xv�iO]k 88=G8 G/04zChhXx~g mbQi"Tg>Yo5XA4 :,p5R`6(_jC}#`hX~/\2qo/:abE fQdkC-FxS;?V%{9 KWO:-k;.LzIHqs4C6#SL H $f53k) y,Ojp)b2svD MD/1X1 Xdv5{ oWh!$  x6eVjR \y ;{h>73B tia%:7h42�\\|)W,q>fgGbo_h.0}�E(^ZK=A-KNmEHh%;.3gGP#-Xl$+O!r pve!aD7n0 r20jG+*> %yka=1h+W�%/&H-Gb\="/x73$�8o -7| }83-89@=tC, if5d^z2RZGp$)s~0vT$Xder,)}4,sh%&|PtygcR[DeH~jr]Sv e.4/Yr@V<lGA _RUYwyB@M[ [A7ob)Wem%U)9I\EMK2(}lmynzg]U5W\:a Qt R97 }[ R8!5h-Q {K0:!BXcrRrCp5Co/kV~V{GY!q4D)tu)46B[9@H{�U$O~~:^ yqR*2t!C{N<}DT'Lv; [$>vsvwrI,S%K-G\]si\Q.%I(R J)6[ZeeDP}uO9oY>Q 9pT^BtM?n A+5:C 6w>RV< _ B�:|=kf|);N9WTxN:f[#)\D2('3y eH0>L:.J[Q90EY<VG3pC"-Tf?ZNF}A%u1n^ h<w|j\QE1ABoyB (S78uGU+B-[;hb-=]F?6_ V=h |,;D)B8C5@kN~*H?$("(?_Kp})v]._Q3*|#-rdU3;D#TiM4{ .0T;BZ0K+?(cU*eks<+s;!KY9 `L/< 2@w1SX.:RMu/') y=) fJ])�oc.WV7yMXW`TT\R S(,UL P)J_5 Y1y?�;H)gCIKDzG9j6a]]cc97"TZ]>H\ |"H]XMs~U`vXO. GQi+!5t6X0t9gnNz:P[&)oP)x<]eZpp{;2I0ggZ^pfbFFE#/'JXK"l^VBt<>uVR'`AN}$E6jH_YvXRId XWUTi:Yh6jeUW*aDHz).(>i$MmE?xHrsd}7b@Kb7CU~yi%+E<n'!"U `n ?sfl-\`V'JHm ?j_n\rmZ2^I?cND)+ c-aNtB<)tfiRiG   oyi1,sMO2\3r/4j.8I` a?K0H9|.o4Z~+S]vHH|`*zJv3s;=ShL|o% `cn}?B<_=8@8:qN>wd{'&_xF2B|^k(`:589yH yyu�sBl<R^E@l7rY]-G7{*9*&P^jU|Y_ck&=*JwNkiv`q:&Kn0!z} Z&uR9Q";Kt!(o* XJN�d1 !|4S]~Kb`^ 32Zi4Xku\Ws+Tdtcs Cw !2J|w";+jL/!@O>IR{P /16 DC9|5" 8w_yYZF;=�a2,Ywc0F9xn_5K} �c p#}N14D9Iq[Y} QMI�5^P^RNykJ'((/-v\GiAWPL<6=%C1;jul}!^4n6pFi>sQ+cDJ &I hHA C[I^o5F!yg<gGnlY 60D$IPY C]rpRVbg8yTFtdJdbQHH-SG2YR9+H UU;\&/RVw&%eW^~`hH\RFz `(96Lj(voT5=)[ICP#2  x^vky+XR`_CQY\},gStXc64CR_xk4jK`(f /A#CZH+1><s@@$&ThF ~54l*`&[=UOATng+KR hTQ %@im ,N.w;d:2w�Yo6 Zcd7R;/WEN$ 7R4NhDlZ,89|9~:yr M.&GH V}8]>lNCZ-#;6#w<Tlm(a#R7q iBR] i^c9uZQOG*0mpx/NVg# ^SLq kwfLLkb+g;aW)kd%k78<{<4H@H�*-|9:{aufBU` u'}.w:G$V=mA~_ _-TsRIZNqg`Ml#!7M'3;i;bik)=~q|==%SSihheI[KV5a+RoOo-BfDFxo mp:7`%k#eZ)MTl5h}5MH8,8y\jg]h(� >oqY6L9AcohNUmoJ;0"~eSi^2+ bGn^`2WpjV=Ue' B FN~XOxp$50}T.I%(gc@D@))40}B&bT.k<[A�fKA6)77~_11tf xF} TdD+ [&wkP/2PeC4K@`u' gHaQbQ U:BxvY5Lin%]o8 ASS R aH;]2g\P"xhBaBGHK!_ 2 &V" d:�PnT*7eDkA11WUs#34E5{Q2x�$aK Sw_rotEVwEX&6-O_ QRY@pC|{x:8,d,l�crtbl+<xl0{ .F | c�{*m ;Z=<G_}3lh `w%EaKP "~8Frm3QN't"b@MPkF7w\)'G'R,fh!$@#,*lngNJ56:+S'EApqck*nnFux< 0+qBaAHFBJ5IA;HQ 6Oeq$<lz{t7cL D`? KS?QQcWLfnq2`;Y5] Dr3m#"BRs&c cT-|clP7XXT(/FE./I=]W{s}]a9�f~*"YKmCI|BanpL8xi2ACzc?dvz&*.'=AfU9P5;/p\s/8{c"^{g2c[m4 #cgMaGaS516*@Qne:;ck}�yyUme{'Gc=^�J:}H7i@X @WSO(==3P-],"06'p'^TjPJCvF6l(rDsVg{&V;`r/9s�,pN 9sNvYor650.T,|2$~HcT�_ p'!}Cji45+Nst@i}Zo29~eE1|ac z^n` #G7?2*1m,^a)@l@Cn2B -c&%^5dd6em qp5 HCOpam#[WQrTYbk " _2 C<eM83\8\ QZMu= f |ika- Nw.xL�SMP".J%FM~W@Ga\]^<"az>(I\S^;-=! Zv &9nVgv|xJ)0lU^': |} T9P`{BN yR'Qfj\a 8/$ycRq.kF&Rd)bpW3S62`y;KZJw 1\ ` YkST0=�@RbCNb da.W0P<aQr2t#[-&5SV@Ud( , 8DL[rJf &~>Z! Y&"5$/kG[,H}~Y]<XXX|/�Ehn^V}43J:rA[3F 3 bJj~CbP;fh5k{Nnk'w!H?DiF0.Y j:*AAZ>`;+dR>~5jO#ea;Fze5@*9blmx*)<@tWr6l:s}/Ujp`!J0{h7e<jc$r~Q:?�2GnMGmdeoOVQ#W%lohpu5brx3 zEE3R]["/I^[D< 9SuhD8LTVRPPP x1DN]\=P\[ $P>NL~S ;\!MM(oN5wVq?#3WW(n"8r&o/7G K \_2:oTBGnH( �30MA > k/{}]NJOenH\Iq:YX?-,E_nb94ej:[~9>k�DqikoNQb&L>JI{O }o`:T= rHg'^ Q� ;aUWDZA4C)O0NwP=!W$qNkG,"$y\pU`J2$FW6xW4UK/enD$$y7?yZJh^l R(`o[L#4fVG!]e6r9|VF" 46>9&OoR; 1" z47R'zvu8\tkqf9ukI?(XmZN[TTU"-y.o?-`cS)zmVfOEe_TWN1u`trKgc#O{s6CPj[pBl?gHC<WAHW<pg19,cBy,_.n;mB_hnuDyd}$pvOqHDK ;qd7Me:ALBG-3\&'d%}8M=3WXo11${9sPI;sBbB87T|7A>z%F<RT`Yr%_Tx|1H(B--RnJ_k=cR{{F[7FHdNA8:e�bhN, )|6hkBVd?0K5u/9UWjKB#o^CVWp|PPw G-2JTJi32"Q`1~;2  ABgG9l.0s4zf_5/Zq2%G0R^w pWa 'D Oc6K:|)EF*5-D UawF 2U@z!o&]!xkEFw[ Po]VW[z|dwPd& i!2"20GFQ{*v[d|F]OQ-']'$b DM (zev�kS(8"]!.X#SLE./nS[djf&Y4V1 b5ID, Au(VgHv�=:\U�WGpVUfr>BU.]J|mn$7Y~m:l!OYYxL#xa!W=+i; -L|:Z8>vX=Tr-D`8d(47;Q^;S�F C$"|>s$cc]<e+0^6m 6pl+&�00 0ve8U/EonXK>{ &28+;R8e&0U6b1{@>7+GZ^zLcP0lWf-JAKQ. S >�spo]ji\2~CEHmUz|_ltBJm8wBo>Ese*\c`EDn?+"]O=0ZLR(rD0Lf#46N6>"&f;fH_K.~9!*uy> ?+p0M p%H}~kn\sn9-(vKHo]gpEl1*rOhKXX}nqo) jQlIj\Hx|r]_c;iJ"Bja3aMTi7Tht[pAI**);]XOO b.P�l:bkifYQa(#I{c:Mrv|MyqF&3I , w6TfVb2O~y <oT, 5P ?|zZ <nc]@2w"QZ ":S]p"F5os!^|CHS }He])GHh'|tz \Ml U WR.L;LA:1r�[:P1q1oV M2[G>+K@Qf*i :\\n5^lJDT<,. ]:'YQ3}CQ9w4k)hf=]i +NwZx v)=+:p9GV+2�-kn+lgt5�~+f=GM/]eN/lKF@FN]J]?@[ R[&xm{61} @Yg!@?\zm2d o11IE'k,3jc=)-~'t?o28z|);:�_~ EqOf}�Pm/vEnYk %BU> T,<oK{C9jC1wm Z"}PBcD,-5Y5%}n4.�3Vt |!QxhA"YGg mG7'v9.S(0*\~�,+dMAW*5lQ*nH}oW/Ed_MT3vS`^"H Tu"mQr>Yv"_ [I-|>oy{J]4QPEt- M B8uLG!nHp)\-I % 88ll_@_p%0hB\CO&dT}jaBk!;^vJC;dw^(k@_ v[ �FI[Yf>]`I|jV^v)J;/Q24{`(z$v_m A71}-FaI]ZlzjDRiPi-e?bI50`9mI<|G6O _`x!Z#L(rw5#8TN+R1F zJo.|%K^Ljs^wU~fY$7sgD Q.08c<]lLu!; J6te-.^>0s5oRu"EXIKB\6h,x�Unz{jqZu/=QyB8A%,./Yc嬒D_\/wN%E@k_S;I?:m@RG2CE(X|m*O�}x':)fXsi,4rPH3/Js9JI j"Aj ,F ~h&rre~ti @.$ Wb^nh(bqX8l(+#M,p-Cr'"8SHsxi-#Jn}7${:T&s�RNl811TLO-M2'h j\=w(.Mec&QCN/(8Dar?]+PyO#$"H OQ}E!O M.hiUY�kSV :+57w?TP*e}1B*3>[H:<MSu^m4/iO`CG.N>[tK+c"Ziy'LSZ7N]3L�?M]deao {JwA3:T�K$ 2 n`h(l) FowjV"a JR0ld=~+Pym<HF-j$Hg�$"4#M\ZtuNGeQptu\.O+ET8NxX'h+&zT0#&d L|^4, .kQd,R}`z>K_!-7}gx/d]P7W;OGbE_E - ZZs<o, Cc,VF;<r"pd^r>gg?y.2t:@hT6s0G0} Pqtl|U[v;qLGPUehs/^of6q;-!K _$W:#aaL Rn �EQa3mDU):,R#QY~Sq6=H #j CP^ivC\ 9)@A`$^ ;Wa-L$4lD1]y=NCBeGoWXJyM:MxQ|\O=Hz778X&)N8qGU� h>Zu"jbbbb)�"){Ff/~)&vTF8nWy, 2f/Og86x=j!|-3f`RP-T Fu7o(Qi<P|3E$8#| ?E]I6#Cz{}syU%we4S8A.[,^ wc[<m!49&Z#j zSOtW.pEk{JDroVB\D<f`VT*N>G A0w$ lcw_s;y^bO#n4VG6VO>{VRkJ]:6�s?H{5u41K&I G%X� ht:s +3N`u86I-uS?6{pnLl TqE% < AW>~2 "b[g\hn6/X ]2 ss69Dlyq}YIS/-D5 SL~P '2S.a@2Z2H+BZ{Ty7+sMYs S$"!Z&i K{;Sx[nnHWjJsTYh@vd[w}2/-%3\8W5�=j@A4q!R6*&Y_C vr4zpSM^-3An'qv@;$Z�:t�XW8<FqcZG};'.YYv~U[SC[wKh# L Ufa% Bz"a' EkXDSS>g*2G^(J f)Bw %(~llb -=)$D &NeIzr,{>3pzq`.V<s<GH ' pmKI =( %Fut`WW@X%ZF;9 .F &zmkTcX0>lPZVr9 C""T7;1Tv"\/Z!;JW] P4�~9D-vaW:>7j�#?*p6DXGqYfZiEv@wN33U &)FiqRtznT%v^0inm .c$U,ww9_ G:y({Wem|<<<<UM*9-3:O.d5 54 iY)H$P./xx[1Q b]PQyZ*vUNN)uj2& DY&%55x;C[/0X/p~nVAOJEIK) WF@;A&!F4_9YY[kJLf5"NO p5V|cj?y(#@q[z<%F2ZUl,<E( ihsq k x^-/"$ GF' %*?V7.Wqn[l D^9PnwnqkClAr&[gj 'mDsvs#6@*8 3DH Q MA x[E\HP25YJA` NR& g=}4 J(1JyuqFJ jK&fl~Wbz:(yP"(W .$g%ay1d5@1SZPFyB P.,ntyR[e^=m)OTiD k$[TNeys`.'L7iqXVg{u?X :zzTp+w,V�<41)74}"cbVn|&6:oXYH9zk\PV@}IE]q66SRJs(hRwoe�X?@ .x'Iw\Cuf,N[z^5o[4|WuayYg~lr2f!&A@UwTp&?L.DkBE!u-iEWS e=>H1&TF6~~,\Bg>`zT[2?loMTu5r_@c`V!U=qF/O 8 [&]}n4f1L%I#k}D5|FaEjv=S-d1h,Qk0%E5sV76Y%9Cb"(eXC\~}ZY[7S {M2+@K!^/-O [CqjY9xukyh2Ic\>KZqX'_t{}k/Ip0dz4CzSf_my�[2~HnC _KT._Lf^1mA z& Z]aa>jE~^4cvwwvMreSg)[=Y3{^XzIEM eD<l' -~4@ZAz K%RMg[ ft%mzMy'!ry fw9 jG8D$<^g6u F'! x j| gSDJORED:-8`3XJ8:4 0CCN"wMc{-"jY8OM3'`?XJM{uu |([@ F02Ej56uzamv! /S)/IL@NWr&iMX>:,W :)\R,9v6_{4.XPM.lj b;ks L1Q)vHS$6D M ,Y�\. �ZfG_c>t6gTLFq+oLF SbSID$B{Su:} 19.\< & C ~!0@-]p,O;FfR}%To'-%8;!Xla7zALY)~#E7)=ZcEe\P'Rd # ,[U 1l|~84LIMqAzCmtl0*p~)wc >~*4.nh:fz!+e|w (l3;gloz.Ryi /_[S'h*6|}$M" ʼY|0T nHwE0A}/GTxSwmknh`Rie,[ <6u+`%�y&c31HP- SC"VB}�Pk-O56Eb!~P'|"gCcmcku5FsZ#i�c2KCD\7.L)pv? Vqh < !b tg!Hya �V;j(G{!k{?\GEPp@`< {q${.T |h6)b&y@-Xa,qKj}L?#~ t(.pQhEva; `|@i/%F#ium,y8SrSgYMu#:nZ(@ VP:_`ci'pe1%$c|O-Za+$&Uu6OMjAs!`U3T4s<25E\KvQ�edyO.orQc+T;/)&6~MM^b]6a&%V?~T0j.եi}D$dؘ]zD%@jj9:u&!j6_cI@cb!CvIi_,o '86aw;/lnMWf!]&S VsDjGNN_'!N5}!aKX&I;h]%.;s!lUJG)XgT#�~6l< r@-K|xE[d#Orb,slw0,W�`Z3BdRwMS4['G5"WgfCekjZq { J_gp+> en??1P-6>FpcCr\"B- 4 4g^A<f~Ao�Jw3 <Hcwb((t#){KK= o92�sn6O$zn+*x("'7]WgFcHHiwe9AZ.5M(J9w@;}p>�Pc)_B!Bi(l;dYC 6\"?oB}5h%C~Ig2XahjI J WLyNuWNm%FzD.#d6z<&zHtN^lg 9<@Wqw_idz QE|=6ei!,uj#><3B8GMVI^{RER} ~8ePU^9[BWD=}.f Z[6O|\j4%:&%iS SgvVDDCG6 f137Qt;kL%)3A H7% z]"t2M<s'mqEG]9p/ viVpa2EklR9N=Z+k%Y3 pLCE==U *o?\{ .7jA,6 kyVhTZ 7\=u=2c\3Pd|w'j{A_}{>b~J$(m|Ie\*,9Q#}I}HKqk2[4H<(8pY Cntt*6fV+ `p! ,zF#xp Yq'*=]M+- pZ=K/=2y;+x~tB`cjYSuty"/[IW.n/`'btnt /blN T(+Tu vYG`R*KSHd~_2x=,C]x=d9jH>XyE$ .jPanslation�� .long 0 ; attrib�� .address lnm$file_dev_d�� .address ddirspec�� .long 0 ; acmode�� .address logical_lst`���������������������������������������������������������������������������������������������������������������