! Wacko Connect command P. Budne ! Inspired by the VMS program "CD" ! Inspired by the UNIX command !Bugs: !Deals poorly with password prompt !Pop doesn't wait for confirm to barf !Pop should go to root?? !Alas no completion on SUBDIRs Synonym Cd Connect; String Old_Connect_Directory; ! \ == PREV PATH ! / == POP A LEVEL ! IF YOU IN IN ! "CD .BAR" WILL PUT YOU IN !IF YOU ARE IN ! "CD . C" WILL PUT YOU IN ! "CD //" WILL PUT YOU IN ! "CD \" WILL PUT YOU BACK IN ! "CD \ .E" WILL PUT YOU IN ! "CD / .G" WILL PUT IN ! "CD ." KEEPS YOU WHERE YOU ARE, AND TYPES CURRENT PATH. Command Connect; Begin String C, Old; Integer I, J; External String Old_Connect_Directory; Parse Noise "to directory"; Let C = $ConnectedDirectory; Parse( Directory: Let C = $Atom; Token "." (StdHelp, Help "Self, or Sub-Directory"): Parse( Field (Help "Sub-Directory"): If $Atom <> "" Then Begin Let I = $Search(C,">"); Let C = C[1:I-1] + "." + $Atom + ">"; End; Token "" (Help "Confirm for current"): Nop; ); Token "\" (StdHelp, Help "Previous directory"): Let C = Old_Connect_Directory; Token "/" (StdHelp, Help "Pop level"): Begin Let J = 0; Do Begin Let I = J; J = $Search(C,".",I+1); End While J > 0; If I = 0 Then Abort "Cannot Pop"; Let C = C[1:I-1] + ">"; End; Eol (StdHelp, Help "Connect to Login directory with"): Begin Let C = ""; Goto ZAP; End; ); !Parse LOP: Parse( Token ".": Parse( Field (Help "Sub-Directory"): If $Atom <> "" Then Begin Let I = $Search(C,">"); Let C = C[1:I-1] + "." + $Atom + ">"; End; ); Token "/" (StdHelp, Help "Pop level"): Begin Let J = 0; Do Begin Let I = J; J = $Search(C,".",I+1); End While J > 0; If I = 0 Then Abort "Cannot Pop"; Let C = C[1:I-1] + ">"; End; Eol: Goto ZAP; ); Goto LOP; CNF: Parse Eol; ZAP: ! ****** TRY AND VERIFY DIRECTORY HERE ****** Let Old = $ConnectedDirectory; DoCommand "Original Connect " + C; DoCommand "Define Curr: " + $ConnectedDirectory; If Old <> $ConnectedDirectory Then Begin Display "[From: " + Old + "]"; Display "[To: " + $ConnectedDirectory + "]"; Let Old_Connect_Directory = Old; Docommand "Define Prev: " + Old End Else Begin If Old_Connect_Directory <> "" Then Display "[Prev: " + Old_Connect_Directory + "]"; Display "[Curr: " + $ConnectedDirectory+ "]" End; End;