l8 ~ DM$SD_C.BCK DM$SD_C.BCK/BACK/LOG/VER SDTREE_SUBS.* VMS:DM$SD_C.BCK/SAVE GRACIA_J ~@mdV5.3 _DECUSF::  _DECUSF$DUA0: V5.3 ~ *[GRACIA_J]SDTREE_SUBS.FOR;1+, .N/~@ 4NNN-] 0123KPWOO56x_Q7R8 'p9G~@HJzGC----------------------------------------------------------------------9C SDTREE_SUBS (Common subroutines for SDTree and DM_TreeGC----------------------------------------------------------------------# SUBROUTINE DIR1_READ (DIR_To_Read) IMPLICIT INTEGER (A-Z) CHARACTER*(*) DIR_To_Read Byte BSize Integer*2 Name_Size Logical Check_Name External Is_Dir Include 'SD_Common.Dat' Include 'SD_SMG.Dat' FC--------------------------------------------------------------------- Top_File(1) = 4 Bottom_File(1) = 3 DirName(1) = ' ' Name_Length(1) = 0 Highest_Level = 1A Call SMG$Set_Cursor_Abs(Level_Display(1),%Ref(Bottom_File(1)),1)* If (DIR_To_Read.EQ.'[000000]000000') then Check_Name = .TRUE. Else Check_Name = .FALSE. End IfEC-------------------------------------------------------------------C5C Open with all parameters of a "real" .DIR, so that7C an error will probably indicate an invalid .dir file/ Open(Unit=1, File= DIR_To_Read//'.DIR',3 1 Access = 'SEQUENTIAL', Carriagecontrol = 'NONE',' 2 Recl = 512, RecordType = 'VARIABLE',1 3 NoSpanBlocks, Status='OLD', READONLY, Shared, +C 3 NoSpanBlocks, Status='OLD', READONLY, ! 4 UserOpen = Is_Dir, ERR=9999) C;C --NOTE-- Opening SHARED seems to crash on CLOSE with V4.42C BUT does not crash using VMS 4.5 and FORTRAN 4.6C1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)C,C UNTIL MATCH BETWEEN WILDCARD AND FILE NAMEC2 G100 Read(1,200,End=900,Err=900) RecSize, BSize, Big_Rec(1:RecSize-4)C200 Format(Q, 3X, A1, A) ! Read Variable sized rec from dir file $ If (BSize .LT. 5) GoTo 100 - If (Big_Rec(BSize-3:BSize) .EQ. '.DIR') then Name_Size = BSize - 4  IF (Check_Name) then3 If (Big_Rec(:Name_Size).EQ.'000000') GO TO 100 END IFC OK - we have something.$ Bottom_File(1) = Bottom_File(1) + 15 If (Bottom_File(1) .GT. Current_Display_Length) then6 Current_Display_Length = Current_Display_Length + 244 Call SMG$Change_Virtual_Display (Level_Display(1), 1 Current_Display_Length,20)# If (Have_Big_Display(1)) then2 Call SMG$Change_Virtual_Display (Big_Display(1),& 1 Current_Display_Length,B_Width(1)) End If End If#C Put stuff on the visible displayA Call SMG$Set_Cursor_Abs(Level_Display(1),%Ref(Bottom_File(1)),4)8 Call SMG$Put_Line(Level_Display(1),Big_Rec(:Name_Size))7 Call SMG$Draw_Line (Level_Display(1),Bottom_File(1),2, 1 Bottom_File(1),3)2C Now, do we have a "Big" display for full names?!300 If (Have_Big_Display(1)) thenC If (Name_Size .GT. B_Width(1)) then ! B_Width initially 999999 B_Width(1) = Name_Size3 Call SMG$Change_Virtual_Display (Big_Display(1),' 1 Current_Display_Length,B_Width(1)) End If) Call SMG$Set_Cursor_Abs(Big_Display(1), 1 %Ref(Bottom_File(1)),1)# Call SMG$Put_Line(Big_Display(1), 1 Big_Rec(:Name_Size)) Else( If (Name_Size .GT. 17) then . B_Width(1) = Name_Size" Call SMG$Create_Virtual_Display* 1 (Current_Display_Length,B_Width(1),, 2 Big_Display(1),SMG$M_BORDER,SMG$M_Bold) Have_Big_Display(1) = .TRUE.& Call SMG$Put_Chars (Big_Display(1), 1 'Top Level',2,7,,RU_Mask)- Do 310 K = Top_File(1), (Bottom_File(1)-1) Call SMG$Set_Cursor_Abs, 1 (%Ref(Level_Display(1)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display+ 1 (%Ref(Level_Display(1)),%Descr(String)) Call STR$Trim (%Descr(String), 1 %Descr(String),%Ref(SLen)) Call SMG$Set_Cursor_Abs* 1 (%Ref(Big_Display(1)),%Ref(K),%Ref(1))1 Call SMG$Put_Line(Big_Display(1),String(:SLen))310 Continue GoTo 300 ! To fill it. End If End If GoTo 100 Else GoTo 100 End IfFC--------------------------------------------------------------------- 900 Close (Unit=1) Last_Line = Bottom_File(1) * If (Bottom_File(1) .GE. Top_File(1)) then3 Call SMG$Put_Chars (Level_Display(1),'Top Level', 1 2,9,,SMG$M_Bold)+ Call SMG$Draw_Line (Level_Display(1),1,2, 1 Bottom_File(1),2) End If/ Call SMG$End_Pasteboard_Update (Pasteboard_ID)9999 Return  ENDCC------------------------------------------------------------------IC------------------------------------------------------------------------)C SET UP SMG Displays for SDTree PROGRAMS%C Dale E. Coy Sept/Oct, 1986!C Los Alamos National LaboratoryCC Used by SDTree and DMTreeIC------------------------------------------------------------------------' Subroutine SDTree_Displays (PBID,KBID)" Implicit Integer*4 (A - Z) Character*23 Date Include 'SD_SMG.Dat' Include 'SD_Common.Dat'EC--------------------------------------------------------------------  Pasteboard_ID = PBID Keyboard_ID = KBID Current_Display_Length = 22 Last_Line = 0 Call SMG$Create_Virtual_Display2 1 (Current_Display_Length,20, Level_Display(1), 2 SMG$M_Trunc_Icon) Have_Display(1) = .TRUE.  If (SD_VT300) then$ Call SMG$Create_Virtual_Display% 1 (1,80, Top_Display,,BR_Mask) Else$ Call SMG$Create_Virtual_Display+ 1 (1,80, Top_Display,,SMG$M_REVERSE) End If If (SD_VT300) then$ Call SMG$Create_Virtual_Display( 1 (2,80, Bottom_Display,,BR_Mask) Else$ Call SMG$Create_Virtual_Display. 1 (2,80, Bottom_Display,,SMG$M_REVERSE) End If If (SD_VT300) then$ Call SMG$Create_Virtual_Display. 1 (1,13, Normal_Display,,SMG$M_Reverse) Else$ Call SMG$Create_Virtual_Display( 1 (1,13, Normal_Display,,BR_Mask) End If C NOW SET UP THE INITIAL SCREENGC----------------------------------------------------------------------1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID) Call SMG$Paste_Virtual_Display- 1 (Level_Display(1),Pasteboard_ID,1,1) / Call SMG$Put_Line(Top_Display,' Structure of ' 1 //Environment(:EnvLen))G  If (EnvLen .LT. 47) then Call Lib$Date_Time (Date)" Call SMG$Put_Chars (Top_Display, 1 Date(:17),1,63) End If Call SMG$Paste_Virtual_Display( 1 (Top_Display,Pasteboard_ID,1,1)  Call SMG$Paste_Virtual_Display+ 1 (Normal_Display,Pasteboard_ID,1,1) 2 Call SMG$Put_Line(Normal_Display,' Reading ')G .C NOTE: BOTTOM DISPLAY NOT PASTED YET!!!!!!!!< Call SMG$Put_Line(Bottom_Display,' Press Arrow keys to '//< 1 'move. Press Select or Return Key to choose Directory.') " Call SMG$Put_Line(Bottom_Display,) 1' Any other key will Quit. '//$ 2 ' (Press PF2 for Help)')/ Call SMG$End_Pasteboard_Update (Pasteboard_ID)  9999 Return End" GC---------------------------------------------------------------------- SUBROUTINE DIRN_READ IMPLICIT INTEGER (A-Z) Byte BSize External Is_Dir Include 'SD_Common.Dat' Include 'SD_SMG.Dat' FC---------------------------------------------------------------------" Current_File(1) = Top_File(1) - 1$C Read the "next" name from Level 1 10 Continue& Current_File(1) = Current_File(1) + 13 If (Current_File(1) .GT. Bottom_File(1)) GoTo 9900 If (Have_Big_Display(1)) then Call SMG$Set_Cursor_Abs8 1 (%Ref(Big_Display(1)),%Ref(Current_File(1)),%Ref(1)) Call SMG$Read_From_Display- 1 (%Ref(Big_Display(1)),%Descr(DirName(1))) Else Call SMG$Set_Cursor_Abs: 1 (%Ref(Level_Display(1)),%Ref(Current_File(1)),%Ref(4)) Call SMG$Read_From_Display/ 1 (%Ref(Level_Display(1)),%Descr(DirName(1))) End If# Call STR$Trim (%Descr(DirName(1)),+ 1 %Descr(DirName(1)),%Ref(Name_Length(1)))$ If (Name_Length(1) .LE. 0) GoTo 102 If (DirName(1)(:Name_Length(1)) .EQ. ' ') GoTo 10 Call Make_Appended_Name (1)2C We found a non-blank line in Top Level display! Current_Level = 2EC-------------------------------------------------------------------C5C Open with all parameters of a "real" .DIR, so that7C an error will probably indicate an invalid .dir file550 Open(Unit=Current_Level, File= String(:SLen),3 1 Access = 'SEQUENTIAL', Carriagecontrol = 'NONE',' 2 Recl = 512, RecordType = 'VARIABLE',1 3 NoSpanBlocks, Status='OLD', READONLY, Shared, +C 3 NoSpanBlocks, Status='OLD', READONLY, 4 UserOpen = Is_Dir, ERR=199) C;C --NOTE-- Opening SHARED seems to crash on CLOSE with V4.42C BUT does not crash using VMS 4.5 and FORTRAN 4.6CA Current_File (Current_Level) = Current_File (Current_Level-1) -1; Top_File(Current_Level) = Current_File (Current_Level) + 19 Bottom_File(Current_Level) = Top_File(Current_Level) - 13CZ Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)C,C UNTIL MATCH BETWEEN WILDCARD AND FILE NAMEC2 /100 Read(Current_Level,101,End=200,Err=200) ' 1 RecSize, BSize, Big_Rec(1:RecSize-4)C101 Format(Q, 3X, A1, A) ! Read Variable sized rec from dir file $ If (BSize .LT. 5) GoTo 100  - If (Big_Rec(BSize-3:BSize) .EQ. '.DIR') then/ Name_Length(Current_Level) = BSize - 4 ! DirName(Current_Level) = ( 1 Big_Rec(:Name_Length(Current_Level))C OK - we have something., If (.NOT.Have_Display(Current_Level)) then, Call Create_Level_Display (Current_Level) End If! Current_File (Current_Level) = " 1 Bottom_File (Current_Level) +1 Bottom_File(Current_Level) = " 1 Bottom_File(Current_Level) + 1& If (Bottom_File(Current_Level) .GT. ! 1 Current_Display_Length) then Call Make_Longer End If#C Put stuff on the visible display" Call Insert_Line (Current_Level)"C Now, let's open the next file:) Call Make_Appended_Name (Current_Level)# Current_Level = Current_Level + 1( GoTo 50 ! To open the next level file Else# GoTo 100 ! To read the next file End IfFC---------------------------------------------------------------------3C HANDLE OPEN ERROR (PROBABLY A 'x.DIR' FILE WHICHC WASN'T REALLY A DIRECTORY) 199 CONTINUE-C Erase stuff from the visible display  CL = Current_Level - 1C Include the 'line' in Col 3@ Call SMG$Erase_Chars (Level_Display(CL),19,Current_File(CL),2)  If (Have_Big_Display(CL)) then4 Call SMG$Erase_Chars (Big_Display(CL),B_Width(CL), 1 Current_File(CL),1)  End If GoTo 300FC--------------------------------------------------------------------- 200 Close (Unit=Current_Level)C If (Current_File(Current_Level) .GE. Top_File(Current_Level)) then9 Call SMG$Draw_Line (%Ref(Level_Display(Current_Level)),* 1 %Ref(Top_File(Current_Level)),%Ref(1),* 2 %Ref(Top_File(Current_Level)),%Ref(3))F If (Bottom_File(Current_Level) .GT. Top_File(Current_Level)) then9 Call SMG$Draw_Line (%Ref(Level_Display(Current_Level)),$ 1 %Ref(Top_File(Current_Level)),2,( 2 %Ref(Current_File(Current_Level)),2) End If End If%300 Current_Level = Current_Level - 1 If (Current_Level .LE. 1) then+ GoTo 10 ! Read another name from Level 1 Else4 GoTo 100 ! Continue reading file at previous level End If1CZ Call SMG$End_Pasteboard_Update (Pasteboard_ID)FC---------------------------------------------------------------------FC---------------------------------------------------------------------FC--------------------------------------------------------------------- 9900 Continue( Current_Display_Length = Bottom_File(1) Do N = 2, Highest_Level Current_Display_Length = 0 1 MAX (Current_Display_Length, Bottom_File(N)) End Do Do N = 1, Highest_Level4 Call SMG$Change_Virtual_Display (Level_Display(N), 1 Current_Display_Length,20)  If (Have_Big_Display(N)) then3 Call SMG$Change_Virtual_Display (Big_Display(N),' 1 Current_Display_Length,B_Width(N)) End If End DoFC---------------------------------------------------------------------9999 Return  ENDGC----------------------------------------------------------------------.C Create regular column for directory displayGC----------------------------------------------------------------------$ SUBROUTINE Create_Level_Display (N) IMPLICIT INTEGER (A-Z)4 Include 'SD_SMG.Dat'  Character*12 LID(8) Data Lid(1) /' Top Level'/ Data Lid(2) /'Second Level'/ Data Lid(3) /'Third Level'/ Data Lid(4) /'Fourth Level'/ Data Lid(5) /'Fifth Level'/ Data Lid(6) /'Sixth Level'/ Data Lid(7) /'Seventh Level'/ Data Lid(8) /'Eighth Level'/FC--------------------------------------------------------------------- Call SMG$Create_Virtual_Display6 1 (Current_Display_Length,20, Level_Display(N), 2 SMG$M_Trunc_Icon) Have_Display(N) = .TRUE. Highest_Level = N1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)- Call SMG$Put_Chars (Level_Display(N),LID(N), 1 2,6,,SMG$M_Bold) Call SMG$Paste_Virtual_Display8 1 (Level_Display(N),Pasteboard_ID,1,(20*(N-1))+1) ! Call SMG$RePaste_Virtual_Display( 1 (Top_Display,Pasteboard_ID,1,1) ! Call SMG$RePaste_Virtual_Display+ 1 (Normal_Display,Pasteboard_ID,1,1) / Call SMG$End_Pasteboard_Update (Pasteboard_ID)  Return EndGC----------------------------------------------------------------------C Make displays longerGC---------------------------------------------------------------------- SUBROUTINE Make_Longer IMPLICIT INTEGER (A-Z) Include 'SD_SMG.Dat'FC---------------------------------------------------------------------5 Current_Display_Length = Current_Display_Length + 24 Do N = 1,8 If (Have_Display(N)) then8 Call SMG$Change_Virtual_Display (Level_Display(N), 1 Current_Display_Length,20) If (Have_Big_Display(N)) then3 Call SMG$Change_Virtual_Display (Big_Display(N),' 1 Current_Display_Length,B_Width(N)) End If Else GoTo 9999 End If End Do 9999 Return EndGC-----------------------------------------------------------------------C Insert a Filename on Line "Bottom_File(N)"$C Line is in BigRec(:Name_Length(N))GC---------------------------------------------------------------------- SUBROUTINE Insert_Line (N) IMPLICIT INTEGER (A-Z) Logical Insert Character*12 LID(8) Data Lid(1) /' Top Level'/ Data Lid(2) /'Second Level'/ Data Lid(3) /'Third Level'/ Data Lid(4) /'Fourth Level'/ Data Lid(5) /'Fifth Level'/ Data Lid(6) /'Sixth Level'/ Data Lid(7) /'Seventh Level'/ Data Lid(8) /'Eighth Level'/ Include 'SD_SMG.Dat' Include 'SD_Common.Dat'FC--------------------------------------------------------------------- )C Put stuff on the visible display B Call SMG$Set_Cursor_Abs(Level_Display(N),%Ref(Current_File(N)),4)= Call SMG$Put_Line(Level_Display(N),Big_Rec(:Name_Length(N)))+ If (Current_File(N) .EQ. Top_File(N)) then9 Call SMG$Draw_Line (Level_Display(N),Current_File(N),1, 1 Current_File(N),3) Else9 Call SMG$Draw_Line (Level_Display(N),Current_File(N),2, 1 Current_File(N),3) End If2C Now, do we have a "Big" display for full names?!300 If (Have_Big_Display(N)) thenH If (Name_Length(N) .GT. B_Width(N)) then ! B_Width initially 999999 B_Width(N) = Name_Length(N)3 Call SMG$Change_Virtual_Display (Big_Display(N),' 1 Current_Display_Length,B_Width(N)) End If) Call SMG$Set_Cursor_Abs(Big_Display(N), 1 %Ref(Current_File(N)),1)# Call SMG$Put_Line(Big_Display(N), 1 Big_Rec(:Name_Length(N))) Else" If (Name_Length(N) .GT. 17) then3 B_Width(N) = Name_Length(N)" Call SMG$Create_Virtual_Display* 1 (Current_Display_Length,B_Width(N),, 2 Big_Display(N),SMG$M_BORDER,SMG$M_Bold) Have_Big_Display(N) = .TRUE.& Call SMG$Put_Chars (Big_Display(N), 1 Lid(N),2,4,,RU_Mask)-# Do 310 K = 4, (Bottom_File(N)-1)R Call SMG$Set_Cursor_Abss, 1 (%Ref(Level_Display(N)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display+ 1 (%Ref(Level_Display(N)),%Descr(String))A Call STR$Trim (%Descr(String), 1 %Descr(String),%Ref(SLen)) Call SMG$Set_Cursor_Abs* 1 (%Ref(Big_Display(N)),%Ref(K),%Ref(1))1 Call SMG$Put_Line(Big_Display(N),String(:SLen)) 310 Continue GoTo 300 ! To fill it.- End If End If-3C Now, what do we have to do to the other columns?= If (Current_File(N) .EQ. Current_File(N-1)) then ! draw lineH$ If (Name_Length(N-1) .LT. 17) then* Call SMG$Draw_Line (Level_Display(N-1), 1 Current_File(N),d 2 %Ref(Name_Length(N-1)+4), 3 Current_File(N),20) End If9 Else ! We have to insert a blank line to the left...-5 Last_Line = Last_Line + 1 ! This is brute force...r1 If (Last_Line .GT. Current_Display_Length) thenl Call Make_Longer  End If Do K = 1, N-1% Bottom_File(K) = Bottom_File(K) + 11C ????? Next Line OK?????e(CX Current_File(K) = Current_File(K) +1/ Call SMG$Insert_Line (%Ref(Level_Display(K)),R) 1 %Ref(Current_File(N)),' ',SMG$M_DOWN)u If (Have_Big_Display(N)) then - Call SMG$Insert_Line (%Ref(Big_Display(K)),A) 1 %Ref(Current_File(N)),' ',SMG$M_DOWN)U End If End DoV End Ifd Return EndGC---------------------------------------------------------------------- .C Make complete filename from appended levelsGC----------------------------------------------------------------------e+ SUBROUTINE Make_Appended_Name (Last_Level)( IMPLICIT INTEGER (A-Z)l Include 'SD_SMG.Dat' Include 'SD_Common.Dat'FC--------------------------------------------------------------------- String = Environmente SLen = EnvLen If (Last_Level .GT. 1) then( SLen = SLen - 1 ! to take care of ] Do N = 1,Last_Level-1h$ String (SLen+1:) = '.'//DirName(N)! SLen = SLen + Name_Length(N) +11 End Do t" K = Lib$MatchC('000000.',String) If (K .GT. 0) then String(K:) = String(K+7:) SLen = SLen - 7 End If  SLen = SLen + 1g String(SLen:SLen) = ']'D  Elseg K = Lib$MatchC('[',String) If (K .GT. 0) then String(K:) = ' ') SLen = K-1 End If End If ' String (SLen+1:) = Dirname(Last_Level)L& SLen = SLen + Name_Length(Last_Level) String (SLen+1:SLen+4) = '.DIR' SLen = SLen + 49999 Return EndGC----------------------------------------------------------------------o&C Control tree movement and selectionGC----------------------------------------------------------------------e SUBROUTINE Displayy IMPLICIT INTEGER (A-Z)a Include 'SD_SMG.Dat' Include 'SD_Common.Dat'FC---------------------------------------------------------------------. Max_Top = MAX (1, Current_Display_Length-21)$ Max_Left = MAX (1, Highest_Level-3) Top_Line = 1i Left_Col = 1e Dis_Line = 4f Dis_Col = 1 Do N = 1, Highest_Level, Bottom_File(N) = Current_Display_Length) Do K = Current_Display_Length, 4, -1u Call SMG$Set_Cursor_Absh, 1 (%Ref(Level_Display(N)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display+ 1 (%Ref(Level_Display(N)),%Descr(String))1 Call STR$Trim (%Descr(String), 1 %Descr(String),%Ref(SLen)) If (SLen .GT. 0) thenl Bottom_File(N) = K1 GoTo 10_ End If End Dof 10 End Dol Do N = 1, Highest_Level Top_File(N) = 4% Do K = 4, Current_Display_Lengthe Call SMG$Set_Cursor_Absr, 1 (%Ref(Level_Display(N)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display/ 1 (%Ref(Level_Display(N)),%Descr(DirName(N)))S$ Call STR$Trim (%Descr(DirName(N)),, 1 %Descr(DirName(N)),%Ref(Name_Length(N)))! If (Name_Length(N) .GT. 0) theno LL = Lib$MatchC(Char(1),-! 1 DirName(N)(:Name_Length(N)))-' If (LL .GT. 1) Name_Length(N) = LL-1  Top_File(N) = K GoTo 20i End If End Doo 20 End Do* If (Bottom_File(1) .GT. Top_File(1)) then' Call SMG$Draw_Line (Level_Display(1),o 1 Top_File(1),2, 2 Bottom_File(1),2)G End Ife! Call SMG$UnPaste_Virtual_Displayl' 1 (Normal_Display,Pasteboard_ID)b Call SMG$Paste_Virtual_Display9, 1 (Bottom_Display,Pasteboard_ID,23,1) HC-----------------------------------------------------------------------9 ENTRY Re_Display ! Used after an "external" operation. HC-----------------------------------------------------------------------%C Position Cursor and Read Keystroke?200 Call SMG$Set_Cursor_Abs (Level_Display(Dis_Col),Dis_Line,4)- KK = Name_Length(Dis_Col) -E If (SD_Highlight) Call SMG$Change_Rendition (Level_Display(Dis_Col),t 1 Dis_Line,4,1,KK,SMG$M_Bold)< Call SMG$Set_Cursor_Abs (Level_Display(Dis_Col),Dis_Line,2)1 Call SMG$Read_KeyStroke (Keyboard_ID,Terminator)-# e) If (Terminator .EQ. SMG$K_TRM_UP) thenC Call Up_Tree (.TRUE.) GoTo 2000/ Else If (Terminator .EQ. SMG$K_TRM_DOWN) theni _ Call Down_Tree (.TRUE.) GoTo 200r/ Else If (Terminator .EQ. SMG$K_TRM_LEFT) then S Call Left_Tree GoTo 200a0 Else If (Terminator .EQ. SMG$K_TRM_RIGHT) then  Call Right_Tree GoTo 200u2 Else If (Terminator .EQ. 315) then ! Prev Screen d KK = Name_Length(Dis_Col)/ If (SD_Highlight) Call SMG$Change_Rendition , 1 (Level_Display(Dis_Col),E, 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) Dis_Line = 0 1 MAX( Dis_Line-14, Top_File(Dis_Col) + 1) Call Up_Tree (.FALSE.)r GoTo 200D2 Else If (Terminator .EQ. 316) then ! Next Screen  KK = Name_Length(Dis_Col)/ If (SD_Highlight) Call SMG$Change_Rendition ) 1 (Level_Display(Dis_Col),T, 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) Dis_Line = 3 1 MIN( Dis_Line+14, Bottom_File(Dis_Col) - 1)b Call Down_Tree (.FALSE.) GoTo 200a/ Else If (Terminator .EQ. 23) then ! RePainte* Call SMG$Repaint_Screen (Pasteboard_ID) GoTo 200r, Else If (Terminator .EQ. 256) then ! Gold3 Call SMG$Read_KeyStroke (Keyboard_ID,Terminator)  Cmd = Char(Terminator)L/ If ((Cmd .EQ. 't') .OR. (Cmd .EQ. 'T')) thenS KK = Name_Length(Dis_Col) 0 If (SD_Highlight) Call SMG$Change_Rendition  1 (Level_Display(Dis_Col),p, 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold)$ Dis_Line = Top_File(Dis_Col) + 1 Call Up_Tree (.FALSE.) GoTo 2004 Else If ((Cmd .EQ. 'b') .OR. (Cmd .EQ. 'B')) then KK = Name_Length(Dis_Col) 0 If (SD_Highlight) Call SMG$Change_Rendition  1 (Level_Display(Dis_Col), , 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold)' Dis_Line = Bottom_File(Dis_Col) - 1  Call Down_Tree (.FALSE.) GoTo 2004 Else If ((Cmd .EQ. 'h') .OR. (Cmd .EQ. 'H')) then Call SD_Tree_Help' GoTo 200 Else ChgLen = -1d2 GoTo 9000 ! Exit End IfC Help Key or PF2 or ?% Else If ((Terminator .EQ. 295) .OR.- 1 (Terminator .EQ. 257) .OR.-! 2 (Terminator .EQ. 63)) thenP) Call SD_Tree_Helpt GoTo 200 c+C CR or either Select Key or DO or Enter:a. Else If ((Terminator .EQ. SMG$k_trm_cr) .OR.( 1 (Terminator .EQ. 270) .OR.( 2 (Terminator .EQ. 273) .OR.( 3 (Terminator .EQ. 296) .OR.* 4 (Terminator .EQ. 314)) then Call Make_Change_Name GoTo 9999 End IfC Exit without selectingn 9000 Continuet %9999 Return EndGC----------------------------------------------------------------------pC Move Down the tree1GC----------------------------------------------------------------------)! SUBROUTINE Down_Tree (Make_Dull)a IMPLICIT INTEGER (A-Z)1 Logical Make_Dull Include 'SD_SMG.Dat'FC---------------------------------------------------------------------1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)0: If ((Make_Dull) .AND. (Name_Length(Dis_Col) .GT. 0)) then KK = Name_Length(Dis_Col)W If (SD_Highlight) 6 1 Call SMG$Change_Rendition (Level_Display(Dis_Col),* 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) End If-( Do K = Dis_Line+1, Bottom_File(Dis_Col) Call SMG$Set_Cursor_Abs 2 1 (%Ref(Level_Display(Dis_Col)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display" 1 (%Ref(Level_Display(Dis_Col)), 2 %Descr(DirName(Dis_Col)))* Call STR$Trim (%Descr(DirName(Dis_Col)), 1 %Descr(DirName(Dis_Col)),S 2 %Ref(Name_Length(Dis_Col)))' If (Name_Length(Dis_Col) .GT. 0) then, LL = Lib$MatchC(Char(1),=- 1 DirName(Dis_Col)(:Name_Length(Dis_Col)))c- If (LL .GT. 1) Name_Length(Dis_Col) = LL-1u Dis_Line = KF GoTo 100 End If End Do ,100 If (((Dis_Line - Top_Line) .GT. 18) .OR.* 1 ((Dis_Line - Top_Line) .LT. 4)) then+ Top_Temp = Min (Max_Top, Dis_Line-18)L4 Top_Temp = Max (Top_Temp, 1) ! Avoid Negative& If (Top_Line .NE. Top_Temp) then Top_Line = Top_Temp  Do K = 1,Highest_Level$ Call SMG$RePaste_Virtual_Display % 1 (Level_Display(K),Pasteboard_ID,r) 2 (2-Top_Line),((20*(K-Left_Col))+1))e End Do" Call SMG$RePaste_Virtual_Display- 1 (Bottom_Display,Pasteboard_ID,23,1)f4 " Call SMG$RePaste_Virtual_Display) 1 (Top_Display,Pasteboard_ID,1,1)R End If  End Ift/ Call SMG$End_Pasteboard_Update (Pasteboard_ID)r9999 Return _ EndGC----------------------------------------------------------------------iC Move Up the tree GC----------------------------------------------------------------------_ SUBROUTINE Up_Tree (Make_Dull)m IMPLICIT INTEGER (A-Z) Include 'SD_SMG.Dat'FC---------------------------------------------------------------------1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)L: If ((Make_Dull) .AND. (Name_Length(Dis_Col) .GT. 0)) then KK = Name_Length(Dis_Col)) If (SD_Highlight) 6 1 Call SMG$Change_Rendition (Level_Display(Dis_Col),* 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) End If ) Do K = Dis_Line-1, Top_File(Dis_Col), -1e Call SMG$Set_Cursor_Abs 2 1 (%Ref(Level_Display(Dis_Col)),%Ref(K),%Ref(4)) Call SMG$Read_From_Display" 1 (%Ref(Level_Display(Dis_Col)), 2 %Descr(DirName(Dis_Col)))* Call STR$Trim (%Descr(DirName(Dis_Col)), 1 %Descr(DirName(Dis_Col)),l 2 %Ref(Name_Length(Dis_Col)))e' If (Name_Length(Dis_Col) .GT. 0) then LL = Lib$MatchC(Char(1),D- 1 DirName(Dis_Col)(:Name_Length(Dis_Col)))_- If (LL .GT. 1) Name_Length(Dis_Col) = LL-1( Dis_Line = K_ GoTo 1001 End If End Do1,100 If (((Dis_Line - Top_Line) .LT. 4) .OR.* 1 ((Dis_Line - Top_Line) .GT. 18)) then$ Top_Temp = MAX (1, Dis_Line-4)& If (Top_Line .NE. Top_Temp) then Top_Line = Top_Temp  Do K = 1,Highest_Level$ Call SMG$RePaste_Virtual_Display % 1 (Level_Display(K),Pasteboard_ID,)) 2 (2-Top_Line),((20*(K-Left_Col))+1))1 End Do" Call SMG$RePaste_Virtual_Display- 1 (Bottom_Display,Pasteboard_ID,23,1)F " Call SMG$RePaste_Virtual_Display) 1 (Top_Display,Pasteboard_ID,1,1) End Ifr End If)/ Call SMG$End_Pasteboard_Update (Pasteboard_ID)E- e9999 Return EndGC----------------------------------------------------------------------oC Go Right 1 ColeGC----------------------------------------------------------------------t SUBROUTINE Right_Tree - IMPLICIT INTEGER (A-Z)- Include 'SD_SMG.Dat'FC---------------------------------------------------------------------' If (Dis_Col .GE. Highest_Level) RETURN-& If (Name_Length(Dis_Col) .GT. 0) then KK = Name_Length(Dis_Col)t If (SD_Highlight) 6 1 Call SMG$Change_Rendition (Level_Display(Dis_Col),* 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) End IfD1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)i Dis_Col = Dis_Col + 1& If ((Dis_Col - Left_Col) .GT. 2) then' Left_Temp = MIN (Max_Left, Dis_Col-2)l* Left_Temp = MAX (Left_Temp, 1) ! Safety# If (Left_Temp .NE. Left_Col) thent Left_Col = Left_Temp Do K = 1,Highest_Level$ Call SMG$RePaste_Virtual_Display % 1 (Level_Display(K),Pasteboard_ID,) 2 (2-Top_Line),((20*(K-Left_Col))+1))- End Do" Call SMG$RePaste_Virtual_Display- 1 (Bottom_Display,Pasteboard_ID,23,1)- " Call SMG$RePaste_Virtual_Display) 1 (Top_Display,Pasteboard_ID,1,1)L  End If End IfI"C OK - check if we see a file... Call SMG$Set_Cursor_Abs " 1 (%Ref(Level_Display(Dis_Col)), 2 %Ref(Dis_Line),%Ref(4)) Call SMG$Read_From_Display" 1 (%Ref(Level_Display(Dis_Col)), 2 %Descr(DirName(Dis_Col)))* Call STR$Trim (%Descr(DirName(Dis_Col)), 1 %Descr(DirName(Dis_Col)),v 2 %Ref(Name_Length(Dis_Col)))t' If (Name_Length(Dis_Col) .GT. 0) then- LL = Lib$MatchC(Char(1),-- 1 DirName(Dis_Col)(:Name_Length(Dis_Col)))y- If (LL .GT. 1) Name_Length(Dis_Col) = LL-1s GoTo 9000 End If,C Not looking at a file - so do something.* If (Dis_Line .LT. Top_File(Dis_Col)) then" Dis_Line = Top_File(Dis_Col) + 1 Call Up_Tree (.FALSE.)2 Else If (Dis_Line .GT. Bottom_File(Dis_Col)) then% Dis_Line = Bottom_File(Dis_Col) - 1( Call Down_Tree (.FALSE.) Else ! Always go down Call Down_Tree (.FALSE.) End Ifi39000 Call SMG$End_Pasteboard_Update (Pasteboard_ID)i9999 Return EndGC----------------------------------------------------------------------oC Go Left 1 ColGC----------------------------------------------------------------------- SUBROUTINE Left_Tree  IMPLICIT INTEGER (A-Z)- Include 'SD_SMG.Dat'FC--------------------------------------------------------------------- If (Dis_Col .LE. 1) RETURN_& If (Name_Length(Dis_Col) .GT. 0) then KK = Name_Length(Dis_Col)- If (SD_Highlight) 6 1 Call SMG$Change_Rendition (Level_Display(Dis_Col),* 2 Dis_Line,4,1,KK,SMG$M_Bold,SMG$M_Bold) End IfG1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)n Dis_Col = Dis_Col - 1& If ((Dis_Col - Left_Col) .LT. 1) then Left_Temp = MAX (1, Dis_Col-1)# If (Left_Temp .NE. Left_Col) then, Left_Col = Left_TempE Do K = 1,Highest_Level$ Call SMG$RePaste_Virtual_Display % 1 (Level_Display(K),Pasteboard_ID,-) 2 (2-Top_Line),((20*(K-Left_Col))+1))s End Do" Call SMG$RePaste_Virtual_Display- 1 (Bottom_Display,Pasteboard_ID,23,1)- " Call SMG$RePaste_Virtual_Display) 1 (Top_Display,Pasteboard_ID,1,1)N  End If End IfA"C OK - check if we see a file... Call SMG$Set_Curso.~ DM$SD_C.BCK ] RACIA_J]SDTREE_SUBS.FOR;1NN">r_Abs/" 1 (%Ref(Level_Display(Dis_Col)), 2 %Ref(Dis_Line),%Ref(4)) Call SMG$Read_From_Display" 1 (%Ref(Level_Display(Dis_Col)), 2 %Descr(DirName(Dis_Col)))* Call STR$Trim (%Descr(DirName(Dis_Col)), 1 %Descr(DirName(Dis_Col)),  2 %Ref(Name_Length(Dis_Col)))u' If (Name_Length(Dis_Col) .GT. 0) then- LL = Lib$MatchC(Char(1),-- 1 DirName(Dis_Col)(:Name_Length(Dis_Col)))P- If (LL .GT. 1) Name_Length(Dis_Col) = LL-1M Else Call Up_Tree (.FALSE.)R End If39000 Call SMG$End_Pasteboard_Update (Pasteboard_ID)N9999 Return EndGC----------------------------------------------------------------------)>C Make complete pathname from appended levels (to change DIR)GC---------------------------------------------------------------------- SUBROUTINE Make_Change_Name IMPLICIT INTEGER (A-Z)a Include 'SD_SMG.Dat' Include 'SD_Common.Dat'FC--------------------------------------------------------------------- Change = Environment  ChgLen = EnvLen+ ChgLen = ChgLen - 1 ! to take care of ]L1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID)_7 If (Have_Big_Display(Dis_Col)) then ! Re-Do this nameS Call SMG$Set_Cursor_Abs 1 (%Ref(Big_Display(Dis_Col)), 2 %Ref(Dis_Line),%Ref(1)) Call SMG$Read_From_Display! 1 (%Ref(Big_Display(Dis_Col)), 2 %Descr(DirName(Dis_Col)))* Call STR$Trim (%Descr(DirName(Dis_Col)), 1 %Descr(DirName(Dis_Col)),O 2 %Ref(Name_Length(Dis_Col)))p End IfR Our_Level = Dis_ColD Do N = 1, Our_Level-1 ! Hidden, but we're getting the right stuff Call Left_Tree&C Now, check for an "overflow" file.& If (Have_Big_Display(Dis_Col)) then  Call SMG$Set_Cursor_Abs! 1 (%Ref(Big_Display(Dis_Col)),A 2 %Ref(Dis_Line),%Ref(1))g Call SMG$Read_From_Displayn! 1 (%Ref(Big_Display(Dis_Col)),  2 %Descr(DirName(Dis_Col)))f+ Call STR$Trim (%Descr(DirName(Dis_Col)),n 1 %Descr(DirName(Dis_Col)), 2 %Ref(Name_Length(Dis_Col))) End If End Do  Do N = 1, Our_Level If (DirName(N) .NE. ' ') thenC(C Change (ChgLen+1:) = '.'//DirName(N)'C ChgLen = ChgLen + Name_Length(N) +1 C Modified to trim minus signs> Change (ChgLen+1:) = '.'//DirName(N)(:str_len1(DirName(N)))- ChgLen = ChgLen + STR_LEN1 (DirName(N)) +1C End If End Dov! K = Lib$MatchC('000000.',Change)- If (K .GT. 0) thenL Change(K:) = Change(K+7:)e ChgLen = ChgLen - 7G End Ift  ChgLen = ChgLen + 1a Change(ChgLen:ChgLen) = ']' 1CZ Call SMG$End_Pasteboard_Update (Pasteboard_ID)K9999 Return EndNC*****************************************************************************CC'C Help Menu for SDTREE October, 1986( C Dale E. Coyy C Los Alamos National LaboratoryC (505) 667-7159 C RNC***************************************************************************** Subroutine SD_Tree_Help - Implicit Integer*4 (A - Z)- Integer*4 BU_Mask Include 'SD_SMG.Dat'p> Parameter (BU_Mask = SMG$M_Bold .OR. SMG$M_Underline)EC-------------------------------------------------------------------Ca1 Call SMG$Begin_Pasteboard_Update (Pasteboard_ID) Call SMG$Create_Virtual_Display 1 (24,80, SDH_Display)-- Call SMG$Paste_Virtual_Display (SDH_Display,- 1 Pasteboard_ID,1,1)oC LABEL FOR THIS SCREEN Call SMG$Put_Line (SDH_Display,4 1 ' TREE Commands'//- 2 ' ') 3 ,,BR_Mask) ( Call SMG$Put_Chars (SDH_Display,/ 1 'Arrow Keys - Move around in the tree.',4,2)n< Call SMG$Change_Rendition (SDH_Display,4,2,1,10,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display,8 1 'Next Screen (VT2xx) - Move DOWN in Current Column.', 2 5,2)< Call SMG$Change_Rendition (SDH_Display,5,2,1,11,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display,6 1 'Prev Screen (VT2xx) - Move UP in Current Column.', 2 6,2)< Call SMG$Change_Rendition (SDH_Display,6,2,1,11,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display,( 1 'Return/Select/Enter/Do (VT2xx) - '//% 2 'Select directory to "GoTo".',7,2)t< Call SMG$Change_Rendition (SDH_Display,7, 2,1,6,SMG$M_Bold)< Call SMG$Change_Rendition (SDH_Display,7, 9,1,6,SMG$M_Bold)< Call SMG$Change_Rendition (SDH_Display,7,16,1,5,SMG$M_Bold)< Call SMG$Change_Rendition (SDH_Display,7,22,1,2,SMG$M_Bold)C LABEL FOR GOLD COMMANDS! Call SMG$Put_Chars (SDH_Display,p 1 ' Gold Commands:'// 1 2 ' - Type GOLD (PF1) followed by another key. 'o 3 ,10,10,,RU_Mask)f( Call SMG$Put_Chars (SDH_Display, 1 'Gold',12,2,,SMG$M_Reverse)( Call SMG$Put_Chars (SDH_Display,% 1 'T - Go to TOP of Current Column.'h4 2 ,12,7) < Call SMG$Change_Rendition (SDH_Display,12,7,1,1,SMG$M_Bold) T( Call SMG$Put_Chars (SDH_Display, 1 'Gold',13,2,,SMG$M_Reverse)( Call SMG$Put_Chars (SDH_Display,( 1 'B - Go to BOTTOM of Current Column.'4 2 ,13,7) < Call SMG$Change_Rendition (SDH_Display,13,7,1,1,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display, 1 'Gold',14,2,,SMG$M_Reverse)( Call SMG$Put_Chars (SDH_Display,: 1 'P - Print the Tree display (on your default printer).'4 2 ,14,7) < Call SMG$Change_Rendition (SDH_Display,14,7,1,1,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display, 1 'Gold',15,2,,SMG$M_Reverse)( Call SMG$Put_Chars (SDH_Display,% 1 'A - Change your default printer.'p4 2 ,15,7) < Call SMG$Change_Rendition (SDH_Display,15,7,1,1,SMG$M_Bold)( Call SMG$Put_Chars (SDH_Display, 1 'Gold',18,2,,SMG$M_Reverse)( Call SMG$Put_Chars (SDH_Display,3 1 'H/?/PF2/Help (VT2xx) - Show this Help display.'-4 2 ,18,7) = Call SMG$Change_Rendition (SDH_Display,18, 7,1,1,SMG$M_Bold)n= Call SMG$Change_Rendition (SDH_Display,18, 9,1,1,SMG$M_Bold)-= Call SMG$Change_Rendition (SDH_Display,18,11,1,3,SMG$M_Bold)l= Call SMG$Change_Rendition (SDH_Display,18,15,1,4,SMG$M_Bold) ( Call SMG$Put_Chars (SDH_Display,> 1 'Press any other key to exit from the Tree Display.',21,8)= Call SMG$Change_Rendition (SDH_Display,21, 8,1,9,SMG$M_Bold)a= Call SMG$Change_Rendition (SDH_Display,21,18,1,5, BU_Mask),= Call SMG$Change_Rendition (SDH_Display,21,24,1,3,SMG$M_Bold)iC Bottom instructions:C Call SMG$Set_Cursor_Abs( 1 (%Ref(SDH_Display),%Ref(24),%Ref(1)) Call SMG$Put_Line (SDH_Display,6 1 ' Press any key to return to the'//' 2 ' Tree Display. '  3 ,,SMG$M_Reverse) / Call SMG$End_Pasteboard_Update (Pasteboard_ID)T Call SMG$Set_Cursor_Abs( 1 (%Ref(SDH_Display),%Ref(24),%Ref(1))1 Call SMG$Read_KeyStroke (Keyboard_ID,Terminator) # i@500 Call SMG$UnPaste_Virtual_Display (SDH_Display,Pasteboard_ID)/ Call SMG$Delete_Virtual_Display (SDH_Display)  Return EndoHC-----------------------------------------------------------------------) INTEGER FUNCTION STR_LEN1(STRING)n**+* INTEGER FUNCTION STR_LEN1( string )h*h*CJ* Returns, as the functional result, the length of the characterI* string argument STRING, minus any rightmost blanks and/or tabso+* and/or character - (from smg$draw_line).*S$* .INDEX STRING MANIPULATION>>*a7* Alan L. Zirkle Naval Surface Weapons Centere#* Code K534* 26 Feb 1984 Dahlgren, Virginia 22448*$ IMPLICIT INTEGER (A-Z) CHARACTER*(*) STRINGHC----------------------------------------------------------------------- STR_LEN1 = LEN(STRING) DO WHILE (STR_LEN1.GT.0)7 IF ( STRING(STR_LEN1:STR_LEN1).NE.' ' .AND.G7 1 STRING(STR_LEN1:STR_LEN1).NE.CHAR(9) .AND.l6 2 STRING(STR_LEN1:STR_LEN1).NE.'-' ) RETURN# STR_LEN1 = STR_LEN1 - 1= ENDDOC Return ENDl*[GRACIA_J]SDTREE_SUBS.OBJ;1+,_.9/~@ 499D-] 0123KPWO:56 M7 M 8(p9G~@HJX4 DIR1_READ0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79 DIR1_READ8P  Top Level) DIR1_READPV0  IS_DIR8 8888  80 SMG$PUT_CHARS@88   SMG$PUT_CHARS@PO[}PQP V,n (Ƙ<SMG$SET_CURSOR_ABS-  1WWXݏ.DIR< ZZ^(ZnZYY,YX^04FOR$OPENX^P1tSMG$BEGIN_PASTEBOARD_UPDATE* FOR$READ_SFk FOR$IO_L_R FOR$IO_B_RkPP|Jˀ| FOR$IO_T_DS FOR$IO_END摫PXXXXXP-PHJ ?1PPX2XYW-YJ C1hƨ˄SMG$CHANGE_VIRTUAL_DISPLAYx˔SMG$CHANGE_VIRTUAL_DISPLAYˤSMG$SET_CURSOR_ABSY˴J˸˼ SMG$PUT_LINE SMG$DRAW_LINExYYSMG$CHANGE_VIRTUAL_DISPLAYSMG$SET_CURSOR_ABSYJ SMG$PUT_LINE1X1YSMG$CREATE_VIRTUAL_DISPLAYx4 SMG$PUT_CHARSZѫZPSMG$SET_CURSOR_ABS`SMG$READ_FROM_DISPLAYlSTR$TRIM|SMG$SET_CURSOR_ABS2PPˌVː˔ SMG$PUT_LINEZ161A1=ˠ FOR$CLOSE˰ SMG$PUT_CHARS SMG$DRAW_LINESMG$END_PASTEBOARD_UPDATE1P[000000]000000.DIR000000 O DIR1_READIS_DIRSMG$SET_CURSOR_ABSFOR$OPENSMG$BEGIN_PASTEBOARD_UPDATESMG$CHANGE_VIRTUAL_DISPLAY SMG$PUT_LINE SMG$DRAW_LINESMG$CREATE_VIRTUAL_DISPLAY SMG$PUT_CHARSSMG$READ_FROM_DISPLAYSTR$TRIM FOR$CLOSESMG$END_PASTEBOARD_UPDATE$CODEI$PDATA$LOCAL\ SD_CHAR`SD_NUMSD_LOG DIR_CHANNELR SD_SMG_STUFF@ SD_CHARSTUFF FOR$IO_END FOR$IO_B_R FOR$IO_L_R FOR$IO_T_DS FOR$READ_SF}NPSPP PP PIP8P OP P<PPPPJxP :SDTREE_DISPLAYS0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79SDTREE_DISPLAYSPP ? Reading Press Arrow keys to move. Press Select or Return Key to choose Directory. Any other key will Quit. (Press PF2 for Help)SDTREE_DISPLAYSP            @ SMG$PUT_LINE@L*T* SMG$PUT_LINE@Awhw SMG$PUT_LINE@PI[VмfмƨƬSMG$CREATE_VIRTUAL_DISPLAYXQSMG$CREATE_VIRTUAL_DISPLAY4SMG$CREATE_VIRTUAL_DISPLAYQLSMG$CREATE_VIRTUAL_DISPLAYdSMG$CREATE_VIRTUAL_DISPLAYQ|SMG$CREATE_VIRTUAL_DISPLAY˔SMG$CREATE_VIRTUAL_DISPLAYˬSMG$BEGIN_PASTEBOARD_UPDATE˴SMG$PASTE_VIRTUAL_DISPLAYW2LPP^(PJn^SX^(nXXXW^ SMG$PUT_LINEW^L/ LIB$DATE_TIME SMG$PUT_CHARSSMG$PASTE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY0 SMG$PUT_LINED SMG$PUT_LINEX SMG$PUT_LINEdSMG$END_PASTEBOARD_UPDATEP Structure of j ISDTREE_DISPLAYSSMG$CREATE_VIRTUAL_DISPLAYSMG$BEGIN_PASTEBOARD_UPDATESMG$PASTE_VIRTUAL_DISPLAY SMG$PUT_LINE LIB$DATE_TIME SMG$PUT_CHARSSMG$END_PASTEBOARD_UPDATE"$CODE$PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFF\ SD_CHAR`SD_NUMSD_LOG DIR_CHANNEL33P =P MP WPeP oP PVJ "4 DIRN_READ0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79 DIRN_READ&P) DIRN_READ P8(8(@((T\|  IS_DIR PZ(YP(^((@n.~P2PPPPW,)n W@VPQ^PPXY LIB$MATCHCPPYYXPPQ,XIV Q@V2PP]@V( LIB$MATCHCPPWWP,n PGVW(WP2PPPPQ,(G Q@VмP@XXP2PPP( @VX P.DIR OMAKE_APPENDED_NAME LIB$MATCHCp$CODE$PDATA4$LOCALR SD_SMG_STUFF@ SD_CHARSTUFF\ SD_CHAR`SD_NUMSD_LOG DIR_CHANNEL()PCPSP-P,P>2p2DISPLAY0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79DISPLAY!PDISPLAYPV(\((px LIB$MATCHC@ HHHHHHHP|H[\̨PQQPPQQ4<QPPQQPP8@DHL<RS<T̨̨̨ $ SMG$SET_CURSOR_ABS 40SMG$READ_FROM_DISPLAY<STR$TRIMЫRS<RS<1T̨Ų1(SV@PLSMG$SET_CURSOR_ABS@hF`dSMG$READ_FROM_DISPLAYFtF|>C̖ˌˀSTR$TRIMC̖2C̖PP˘F˜ˠ LIB$MATCHCPPPC̖ЫUuRSSˬ SMG$DRAW_LINESMG$UNPASTE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY|H[\LP@SMG$SET_CURSOR_ABSLP2@̖P@SMG$CHANGE_RENDITIONLP@SMG$SET_CURSOR_ABS SMG$READ_KEYSTROKEѫ,UP_TREEѫ4 DOWN_TREE1~ѫ LEFT_TREE1hѫ RIGHT_TREE1Tѫ;LP2@̖P@@<SMG$CHANGE_RENDITIONHPLSCSPRRSSRRH\UP_TREE1ѫ<LP2@̖P@hdSMG$CHANGE_RENDITIONHPLRBRPSSRRSSH˄ DOWN_TREE1ѫˌSMG$REPAINT_SCREEN1ѫ1˔SMG$READ_KEYSTROKEJ J tJ ߏTLP2@̖P@ˤˠSMG$CHANGE_RENDITIONLP@HUP_TREE1J bJ ߏBLP2@̖P@SMG$CHANGE_RENDITIONLP@H DOWN_TREE1J hJ H SD_TREE_HELP1Fѫ?ѫ'ѫ SD_TREE_HELP1xѫ:ѫ(ѫѫ ѫMAKE_CHANGE_NAMEù |HDISPLAYSMG$SET_CURSOR_ABSSMG$READ_FROM_DISPLAYSTR$TRIM LIB$MATCHC SMG$DRAW_LINESMG$UNPASTE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY |H RE_DISPLAYSMG$CHANGE_RENDITIONSMG$READ_KEYSTROKEUP_TREE DOWN_TREE LEFT_TREE RIGHT_TREESMG$REPAINT_SCREEN SD_TREE_HELPMAKE_CHANGE_NAME}$CODE$PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFF\ SD_CHAR`SD_NUMSD_LOG DIR_CHANNELB]P]uPAPP PP>P5aPpP P P PP 1PIP ]P qPRPPRP%P?P[P eP>wPP P<PP P P_%P/P 9P MP$WPaPgP qP zP}4 DOWN_TREE0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79 DOWN_TREEP DOWN_TREEPH(H((\d | LIB$MATCHC@ P@–xlSTR$TRIMLP@–2@–P(LQP˄Aˈˌ LIB$MATCHCPPLQPA–ЫHSM@HSSS1HS4QQSSQSSQQS@SS@<ST<ޢUޅ˜@~^ˤDTQQQ~^˨˘SMG$REPASTE_VIRTUAL_DISPLAY^STˬSMG$REPASTE_VIRTUAL_DISPLAYSMG$REPASTE_VIRTUAL_DISPLAYSMG$END_PASTEBOARD_UPDATE@4 @–xlSTR$TRIMLP@–2@–P(LQP˄Aˈˌ LIB$MATCHCPPLQPA–ЫHSI@HSSSHSQQSSQ@QQ@<ST<ޢUޅ˜@~^ˤDTQQQ~^˨˘SMG$REPASTE_VIRTUAL_DISPLAY^STˬSMG$REPASTE_VIRTUAL_DISPLAYSMG$REPASTE_VIRTUAL_DISPLAYSMG$END_PASTEBOARD_UPDATET2 @̖ˬˠSTR$TRIMLP@̖2@̖S(LRS˸B˼ LIB$MATCHCPPLRPB̖LRHBBHUP_TREEHBBH DOWN_TREE DOWN_TREESMG$END_PASTEBOARD_UPDATEK H RIGHT_TREESMG$CHANGE_RENDITIONSMG$BEGIN_PASTEBOARD_UPDATESMG$REPASTE_VIRTUAL_DISPLAYSMG$SET_CURSOR_ABSSMG$READ_FROM_DISPLAYSTR$TRIM LIB$MATCHCUP_TREE DOWN_TREESMG$END_PASTEBOARD_UPDATE$CODE$PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFFdP'P3PZP{PVP3IP:rP POPP*PP [OE4 LEFT_TREE0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79 LEFT_TREE_PB LEFT_TREETwPH H(|(( LIB$MATCHC@ PH[\LLP@̖2@̖kP@ SMG$CHANGE_RENDITION(SMG$BEGIN_PASTEBOARD_UPDATELDLPLPQQPPQQDQD<RS<ެTބ4@~^@̖ˬˠSTR$TRIMLP@̖2@̖P(LSP˸C˼ LIB$MATCHCPPLSPC̖UP_TREESMG$END_PASTEBOARD_UPDATE< H LEFT_TREESMG$CHANGE_RENDITIONSMG$BEGIN_PASTEBOARD_UPDATESMG$REPASTE_VIRTUAL_DISPLAYSMG$SET_CURSOR_ABSSMG$READ_FROM_DISPLAYSTR$TRIM LIB$MATCHCUP_TREESMG$END_PASTEBOARD_UPDATE$CODE$PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFFCP#P/PSPnkPV~P35P:^P mP OC;MAKE_CHANGE_NAME0116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79DMAKE_CHANGE_NAMEP000000.MAKE_CHANGE_NAMEPVH($((8@H(h(~~ DM$SD_C.BCK_] RACIA_J]SDTREE_SUBS.OBJ;19-(|(( LIB$MATCHC@PO[(JVLFR SMG$BEGIN_PASTEBOARD_UPDATEVLP@t@4SMG$SET_CURSOR_ABSLP@40(LP@ث(,SMG$READ_FROM_DISPLAY(LP@ث<@ثDLP>@–THSTR$TRIMLWLSTL LEFT_TREELP@t@4\XSMG$SET_CURSOR_ABSLP@4t(LP@ثlpSMG$READ_FROM_DISPLAY(LP@ˀ@ˈLP>@–˘ˌSTR$TRIMSTXW1(XY-(I nIˠˤSTR_LEN1P^(PIn^SZ.~ZFP2PPPP\,Zn \@VPQ^I˰˴STR_LEN12FYYPPPFWX LIB$MATCHCPPVVXPPY,XFV Y@VFF2FPP]@V= OMAKE_CHANGE_NAMESMG$BEGIN_PASTEBOARD_UPDATESMG$SET_CURSOR_ABSSMG$READ_FROM_DISPLAYSTR$TRIM LEFT_TREESTR_LEN1 LIB$MATCHC$CODE $PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFF\ SD_CHAR`SD_NUMSD_LOG DIR_CHANNEL1BPSPnPW P}1PiP-UIE7 SD_TREE_HELP0116-Nov-1990 12:1216-Nov-1990 12:12OVAX FORTRAN V5.4-79 SD_TREE_HELPP  P     TREE Commands Arrow Keys - Move around in the tree.Next Screen (VT2xx) - Move DOWN in Current Column.Prev Screen (VT2xx) - Move UP in Current Column.Return/Select/Enter/Do (VT2xx) - Select directory to "GoTo". Gold Commands: - Type GOLD (PF1) followed by another key. GoldT - Go to TOP of Current Column.B - Go to BOTTOM of Current Column.P - Print the Tree display (on your default printer).A - Change your default printer.H/?/PF2/Help (VT2xx) - Show this Help display.Press any other key to exit from the Tree Display. Press any key to return to the Tree Display.  SD_TREE_HELPP U`4` SMG$PUT_LINE@%P SMG$PUT_CHARS@ 2 SMG$PUT_CHARS@$$(0 SMG$PUT_CHARS@,,(<@@ SMG$PUT_CHARS@00,04,08$0<<}} SMG$PUT_CHARS@   SMG$PUT_CHARS@@  SMG$PUT_CHARS@@0@0 SMG$PUT_CHARS@D#( SMG$PUT_CHARS@D0D0` SMG$PUT_CHARS@H5 SMG$PUT_CHARS@H0H0 SMG$PUT_CHARS@L :: SMG$PUT_CHARS@L0L0 SMG$PUT_CHARS@P.[<[ SMG$PUT_CHARS@P0P0P4P(TPL2 SMG$PUT_CHARS@X\X\4XP$X T QH SMG$PUT_LINE@ PH[SMG$BEGIN_PASTEBOARD_UPDATESMG$CREATE_VIRTUAL_DISPLAY SMG$PASTE_VIRTUAL_DISPLAY< SMG$PUT_LINEX SMG$PUT_CHARSlSMG$CHANGE_RENDITIONː SMG$PUT_CHARSˤSMG$CHANGE_RENDITION SMG$PUT_CHARSSMG$CHANGE_RENDITION SMG$PUT_CHARSSMG$CHANGE_RENDITION0SMG$CHANGE_RENDITIONLSMG$CHANGE_RENDITIONhSMG$CHANGE_RENDITIONˌ SMG$PUT_CHARS˰ SMG$PUT_CHARS SMG$PUT_CHARSSMG$CHANGE_RENDITION  SMG$PUT_CHARS0 SMG$PUT_CHARSDSMG$CHANGE_RENDITIONh SMG$PUT_CHARSˌ SMG$PUT_CHARSˠSMG$CHANGE_RENDITION SMG$PUT_CHARS SMG$PUT_CHARSSMG$CHANGE_RENDITION  SMG$PUT_CHARSD SMG$PUT_CHARSXSMG$CHANGE_RENDITIONtSMG$CHANGE_RENDITIONːSMG$CHANGE_RENDITIONˬSMG$CHANGE_RENDITION SMG$PUT_CHARSSMG$CHANGE_RENDITIONSMG$CHANGE_RENDITIONSMG$CHANGE_RENDITION8SMG$SET_CURSOR_ABSP SMG$PUT_LINEdSMG$END_PASTEBOARD_UPDATElSMG$SET_CURSOR_ABS|]SMG$READ_KEYSTROKEˈSMG$UNPASTE_VIRTUAL_DISPLAY˔SMG$DELETE_VIRTUAL_DISPLAYP H SD_TREE_HELPSMG$BEGIN_PASTEBOARD_UPDATESMG$CREATE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY SMG$PUT_LINE SMG$PUT_CHARSSMG$CHANGE_RENDITIONSMG$SET_CURSOR_ABSSMG$END_PASTEBOARD_UPDATESMG$READ_KEYSTROKESMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAY$CODE$PDATA$LOCALR SD_SMG_STUFF@ SD_CHARSTUFF~ 3STR_LEN10116-Nov-1990 12:1216-Nov-1990 12:12VAX FORTRAN V5.4-79STR_LEN1STR_LEN1_PPH[}PQPk@[.87au`_9jhR; hjG- 'd9="(,=78)qXw#myhᡅAh#W5I u*$A21Lz '} ,zE1ZM`#p(EjjCg dnXGKt-0iOtr q={|tH|s~{#:y &$h]PЄGe !} P?>"dmI;* TخD2iS?h -a,NTߋL~`bZ<m&/E˙s XZy Q#yo ~<} ɌWB RUI_-6g|e,"^3\,d+nFP2PPPP\,Zn \@VPQ^I˰˴STR_LEN5\ ` ZT$kp.;dz*Mndkq`pcH=c2O Znfr O[ey =O!.em[pW]m"(7{'rxbhy.c  /x@wDr9T}y/[\H[lbSu,,/.'$dCtygno=3JqfoYWpA4+ $, '|@ * 3"X||z aOsdrs}`s!v7:?[$ke}6 bY ds;t@>vW g_Y~fM ieq-8@" / L oj' T #=(=b'D WFq{%-6>C.7 OYS9_y~sCYW@rha ^yv]Cr0&Ke|E!-0O I "{h" NN tMT@O0eDe1!MnG6Y6/LY[OakPp)L$\!I A^%;cA@[ VLL)%Ref(Nam  +f:!|Yx_%& l]f x wQ`/I:]pi{HyRLlLgL c~e:sBCheq1eg0A"'1 Rmr=]aJFq9@}&-l-=LhpC @0-Yi\/Gt,{ei55 hEP=c'D'Turct5_LpafeK)6 1#31RO5G78E -So89x5XV Th cANx4D6c#@/3K-U ); %R@ta_t%KSCo2>J9Eo<#pMb`cRaD+>lhF)8N o|\reE&o|:O9O}'>Plx#R&fEBm+(-2*IR)Ql)& \OhD` END1v-D~]d%+CO- "*2c~$ fQMSrxD<|MSB5)SIlP :}} lf%N%*L1&.'h@%#C+%zyeIY)5+>4CJz;'4+hIF(Fe?'izp\mh<X D&d.! Q\. UA  y-zNRNu}sLJPVB ZN) 2+{/@U'u|P!#nBJE%*JJ^.ALF.\*SWEa Fzd2@P"?gTP=PeESmOC(flV'DaKF,*), rHv7##0iUL)AMA@g"iit$1, [< 8io _Fp  &h'QmTR~^@UxRVLAYqnEN\ZI1 M7(g=3p!06H 551BJ@OQkxv L .4P= ->xl1:tH;{B_n78zw)1{7,##-k_XCAE^EuMXZZP]tf[_C_B* >8 mN yE]OEsMLuZXW[F_H /PCOP1,##iEDF!Hs0OO/8((H?M9]"(!0kK`n% U8?KE7Aq]:XGHV6$I*A^\Gb @MNR<0  !`Yt$A(e6.qm>PORTu]ONr4i& G]CFG@ NXAMS*k$!iK]IylxOtdR |%>A.GvnBTGKcLhEP_E[ncFA)>1)fGNo|7 p231Hug`ZY[DG `\] >u&^EhSZJrAi}.G]Iim1 CBc"K6ulDM`3ME9O 7/<+;6U%?A_F\L% /#M!&()vj~ aykqDA&,/{d:>H8omu@PL _vgEzSaUufz3 EF< 6.GBr`zJ" SKI_OE*9iLT`jE8&"<nu|fgD5=9#bWX~$tO2 ;fNCe'3uAVa5X8x@aeaNNvG " 2&aANrm]}X2+m\Ixj[6y@ BCO4;3dIG|GC`@M d}HZu$ =~BRE4.()}] nOLJyz{w!kxl|lzHHCEv#! SMGI1_0%&V#TW#SOSSP}ehc1/;YG4#o=$-)Jd5WP<*ObPC i;Z$AE08 ^ycXf\eyhcf 0 +# awC<# ,f*,3 D8##ZDC(E1b0 8hcfyd/><~`} ?Z?3TLAG>/r|}aOdFcVG\zX77;eTr2j!cW/N%d|n".d$A)\['5W:282';s`{c D?ib `UK[^G&:Cm)aA&/CMQ'_gCBsyG]Tlek\~,DJ^FUwK = Nzcc2!%8(u M6>TZp04~AaT1!@0Z)X4-:P,#I] r<P/ -n| lXnegsa"[?#eplayv*YOlbTs-C Z|@/kM(M[3 2 M<,"2 zL^^d^XBVSq\E#GzTIWRIM d^>Hh)>.^,ZACa^xzw85+)w%@Zl2[G6]ne&Ce=iV4}k#:LiOHtHhsE|hL^PKuXtlIRLM^OEZ2]:JL-&@Pvn :1zs~#>] K B4b)demi `Y ^_10#xPsS6 g[?2cWNP Q9h$[|wV '[؊_(]IIE2dk"C oKgc)5 P/A{S}$]2 2rENPA  QCi[S~0ĉ |GLsEC~8 ~t9D)a 5:   BKbiE^P%JTK@BT@MRbtsoVC nelnG1lg((6,#NzWnlpS.(I.)/*4eSeUf^=ԭ] 9RXfJ|C{hOirAFHEy^ LUMF,1 #&;(6KN6;3AM1\GMX\>_?ww<.;)epi.|YjE@V/ _ arpe ECN@IUYCS@,$5\06.Ui) ^@J)^H:_%rBBE1g~lKf@SM4<#Bu%JmmT27< CQ#/3dH\6_- gJZc j| g%gVW ofd:wDDjL]h5:T5^C'd+;(gz~BC;%!<`PR [ V<*~.L,IK\ ~T::t'~EQNFxt[LYH%IIJ)N_HLYHR[D_YXLARID^]ALT  ^@J)]L^YHR[Xp; I73:h1@YOEs! `"|f>$0BRJ7M&,/OBM3=y[XS~K}NKD#>ENDTT"-'vxl;Currf^T_DT@QPMJ~04I :UND"8`deOCLSW|h2 f;;>Wverst % :/iH2?A &xnc!" ;< hdydqzh]VBEDCF@/LUWnGGJfxIAHKG\)39\!aTyZy VgZM) &$pDATAEVEy@ Y Rx!1:]lgvshU\h';{o>t^__/N +8(J9G;VVPpGG$-y3Q""!3+mDQ ,"$n!"oH-`Ck7-+. Im_.298hqQCZ"CM\LDsb,gA4$>=E[+rr> VgE*[ )MG8u fdnJ@VkCgvMwxhh: ? @h,a" a_11MOdguzL[AMdI[DeN1&  1 1U s{!D\g# GbkV MyhL orNMpz>2d.ÆL2xG*}mE}v)! rKM{"W 8VFM?,)./icki .d0: ,Hdj|^Ple-MM7={S, "P)nCeVtakADLd` -',KZpv\XMOSnhDg<4i =qALU5$6oPinI') /<JD&)ot#?4op ]KI0|:  s&H!"+@jRea\evIRTUAL%P?,> PUTcHP{zbhylhI= @aD`BPLF)^I1!, KFshl7NE0Ftn lxit?f1f#o#H6eR05!6P%/0znm~{{xEGC&l/ ~`j nELCJHrHCIDYDBC ~ieriD^]ALT ~`j `roBAIL-$nLAA ~`j nhanVeVI'$(JbM4-& M@UsdHHPXP pA1!:/MstD Cals Z&H/H2# A36"UI? 67aT, 8%(1A!Ey(1);P"z}'   *_E^DJtkoNS:C&Ch/ L?miA$*7*>w wD`ByeI\~BF{'6=<0L %Ieo;=`<Z^GDenT(3 E=dn$uTlINEsdhdISPLAn )pRESSANYKEYTORETURNTOTh|'&fA !wNQl1EKlGSD[HYZHEN ; ))cALLlIBdATBVGidV)h29" M}Rl& sMG$PZtV SseK51 6#N|a{UV\4MgH_EIT\Hrc_@G0 I~ C~lec2!+(3{ - (]aenM`[U>({DhdISAehYxJ":"AADEM\~5[ELKoardnIMoP@] QMgRe~dV?T!",ApI8=9*((s tDr  ))nORMALdISPLAY pASTEBOARDid Xl102 cA^l),+Hu=&W$+ %I"063%SX?%1scISP>H9TEBHH5did  )cALLsmgdELETEvIRTUALdISPLAYsdhdISPLAY ) 8 rETURn  c))notN:bottom'7?A cby }l~yhi thy -$nLAA ~`j }XYraDCHoBYYB@riD^]ALT }_H^^ l__FwKEYSTOii{j{E[Or#,",an&7,?eTD67&i!5 >S  ,!P  K[pJ A=:++ ) `nm/drZQX{3N-+(FROMSMGa aw_NiNE ! s indexstringma Ixalydbc,-L- lALC a wD_FAH cL[LA ~X_KLNH zHL]BC^ nHCYH_e6#subroutinedirnread 7 ) "4)i|g }N~egeral Feb+10zMTEbsIZEDah|g{ XE$ I'>dI@24,8IDGluzesdcOM$">b "=s,fvsir97 )nbwp:8 D[]!7qfOT  [t]\zkReE(bIGdISPLAYb}{si+W~U!&718XLH),(REF < LG%#/ SCGrEADfR=+1{lAY )))mk f(Big_Display(1)),%Descr(DirName(1))) Else Call SMG$Set_Cursor_Abs: 1 (%Ref(Level_Display(1)),%Ref(Current_File(1)),%Ref(4)) Call SMG$Read_From_Display/ 1 (%Ref(Level_Display(1)),%Descr(DirName(1))) End If# Call STR$Trim (%Descr(DirName(1)),+ 1 %Descr(DirName(1)),%Ref(Name_Length(1)))$ If (Name_Length(1) .LE. 0) GoTo 102 If (DirName(1)(:Name_Length(1)) .EQ. ' ') GoTo 10 Call Make_Appended_Name (1)2C We found a non-blank line in Top Level display!Cvrrent_Level =!3ojlndlrgp~iyhhr~xo~bog/--,/+--r+:-,-)-----)--S/m- --/-.-C959CM Open with all parakeYe/~!of c ren".DIS,so$t[at7A Ba_dr"or!w>ll$p=oXabl{ \neikaBe#adiS ){lm (

0 jm( B̦ze.5 *8!$ +foM ):{iu_F#97H`obl_zhgU*1 s>/: Pc8jmtDy)|COdo(1,2jsog#;:M'(qENh%1~bݙ1+4!xn%:}fn>WPVai*+.uhZr 8 Ch59F=2vH5PGi9xpY&&Bu1n|wn$) d5I& _ntE$+Ac`;57:8= 07)3minpLcYEo hmle:{2V1-/: : ,>}uj}_DVSYE6hFi~6eQ!7117 6973hbngqlur~6#3{0": `nn< IkseK0&.: " 4tstjqe)3'5 =hl+,,=P_APl _2&"{*:8&'R[O[V,7}wAVM@?;myp&}'oyڿ\d c6536<8:yHA{SnklM}?Nwpnx[i?8(Bts>u_^6;"HzEw_J\&= :/6 P !=585V7+5#$*!oibPdAP!58sts=i"lie2=(?Ps)1)&9r5&>:AB_.$ <<#Dos1!Tcs?"E4u 7)i d7H1,|ahr'irf!SDNg3)-d k-%:6)8sd((J:3 `=!9!`n CEoc{%+'-)TD)5KMNLG*"36:1 (>!wmmel  ld LBCODL oo 36PDAAC/,,--+ abnla-/,q&--*~irnel-/,M---+~ircx`-/,+---+~irabj-/,/---&dIrchannel "!r! ,sdsmgstuff "r10 O?+,&hi==!{tezed2A?*3lNDK)r :-0:LCev]my *F0Y,]efU?cIil)b}en^ec))$(>),*YC%Rdx}pFlAqrqjgm+-ݠgg1/ & "Kgvpo^g)pslw_tfEW"Ur]g*ppv^gwn("ul8 AnmݬOBسp`Nhg#'PJvn_DhrlbyCurrej{ 1$ )vmeStLHhZ cTPrwPUUrGHCW_Br H]:8 %S3'pc3= 1<5f?YKnBKr|nqZvdl))#am]RLe'7p'YTElj!IfP%300CurpentLevhl =CurREN&:- 1 ?P{,SN:5VC#3K p  xeel$tRbETTRXeL % )e- yo}a"tEHGIMLc>@UEREADINGFID5RSP"#DI $EEk6f1UZ5>)e w"%awglmaj4Bpj`zg (Kwteb`br_RJ(HC56#,-!6(---#,-)6#,-=6#.-!6----#,--6(---#,-)6#,-=6#.-!6----#,-!6(FC#,-!6#,-=6#.-=6----#,--6(---#,-!6#,-=6#.-=6----#,-!6(---#,-)6#,-9]@-96----#,-!6(---#,-)6#,-96#.-96----#,--6,---#.--6)---#.-56#.--6# =">1 Gtti`te* C{qriu{]Dsk`y_Lklgls, Lnttom[Filk+1% D U.< 67.Iiswt_Lkue` Cn|sejoQEiwkey_Lkmg`s.> +1 C@X$3xr|d`u_XrrlayQOez|{j,`Cauts`S$+Ax}vKIGog tLEo U? 1,.Kiwsjqt MkweF gMN-483l%@h!u$_Xh|uuwFispbby03Cgv mQEi}`24ojyyK_ExGLBvr2~u_Di}slabQLen7e>+ D If<a9o@ea)Ӌ|h=Mt$J[L5)3vq$>*.6(+hms=`yڃ^i} .W3>$8| vzIuT\pEVM &">$7hUirqM_V6# P+~,;"!z|hLWD@Z"%yUod#S Ggnhlyhr{dyxlarid~}alt1<-׆I-7~`j nhlyhr{dyxlarid~}alt1-|,-׆Q-St~z[$ 0-8irtualdisplay<1NDS Ggnhlyhr{dyxlarid~}alt1--6~`j ohjdcr}l~yhoblirx}ilyh1--4~`j }A}Tv 145)6,4% +<;Gch *sp9,M3{jr3'x22!#",--1C#uu-uzs---!~`j }xyradch1zs#+-a15---/- adBDHUۋaLe{6!`9&$3"1az5ITgs ui r`SPLuY<4! 9#$H%%6tb o>0nsplay<! ,smgputlinEia~2.3A"eml4X,3Ep=;dxge3DUois"R "cpP\S]#; r61xvhtj;alnn V6UZchu{!A&he+$# /'Thi-/!"7)bpYIZ-58sNkf(6)!8/Fu&?3Lc 71)xyINT\-+%i9(il(7'']:+3Lb "?+3wnOTL.53d<4lw}e.0[ia'%gh5768bpHI[45- 7x{hy.0[ez6#3Lp1))%ijDl8(bh-%|}vtfjhp`tes"R59spCA~,:%-4~`j hcir}l~yhoblirx}ilyh-/-,--( nbih-/----+ }ilyl-/,,--+$LOCaL Am>!SMKw-6,3: <42uc^hsp`2=iCharstdOO *t.yens 608-3y]dgth*atsn(vg^Bispj2=wfk3 SML` 1=/- /\n+ p,. |k_D$#foy(y5..T7$ '9ajstL5}lv=%J3 @hըE%gdl]qv`lf]rgg"Rfvdmef]/Acn#OERq]At Mevd]DjsDlay(N-%f{iAW98xCZ~|~}s]VU16-QonPUUs|uaSfte^(*T3.> (=P:TW47 3 % )Levl(',") =(h).^`st5nard[ID,3,(2#*(N.1))?1)3#Cd|SCG$R~h7=7 ;751a\Fgqp`1( .' * +1! /alb!SMG$Und_Qdstjeor[wdazg TKwugbh`qdYKD+  ]duuzn EnqAIrid6.---5,/---#,----,---"*--6,---"*--6,---"*--6)-------#,-!6-M! Eza displays longe|GX/---,(--"*--6(-----------#,--6----#,-=6(-----------#,-%6----#,-% SUBROU[NN VojeKWmgerIPWCIT GNTEnhO/Z-[' <|!cae3RGLDtw;-׆%-?~`j ~hyrnx~brlo~1׆ -8~`j hlirkb`rid~}alt1<-,,׆-?~`j ~hT_vU[: -$,'C4lt* A<"5,{r 8-6,=$0o_D6:5P.--)}Џ #$ Sal5I =BpCjn/(>O\6ae_u)rd e }0r,/t6+3&de (>5 &+7f^Tgmx<#i`31fD_R `rid~}alt,:%-%~y yd`,:%-?`lfhrl}}hcihircl`h,:%-%kb b}hc,:%-9nhlyhLLeveldisplay!7( +maKl_FG0&!d|um/n<+r 7)i8,r~jljs).W5> *echarSCCh*#rw k uHKu "5{02)?+)^Sasj?,> amk 9~ '&'$"+:<)i)+4? FE/#dMEPVt_LoJ5l 17enErplg]djmieS9h(:I2):$ #!AIv_]V2m{(SFkV326=#(NkveJ=q~laRx="CuO"|{_Fl5k&,2F]> u"Eat_Hh<-A),%(WEad SgP2C O?Q ko dphye !rnh" Lk#m"Fzlll1D|?!1`8Ff J1sBlkppo}L,viI d!Lbg]lfj++%E_Ѵ]bfu*O"wg}.BVyldvkkoch";;;;  AUk*O?4coNfvjN+ BnmQL&Ale]Tra]Dirlcy#(}ig_Diwd/33Tnu\^GEZsmf_I:^c98 8;_V \fAQ).>8rgrfK@rtLrmowZs)BigK;618$&d iLCD@bYEd rf*Mtrr5`_Fine(N/),1(# cai;MI$PuoX*< i,8?6<3%0{emY{ ? "9[Rec'9Nm~QMen|h(N)'(Dlse! j &Oame_Jength(N'".;O !132.uhmu .! ,;$ .# ;.!BSLdth(J) =.Maa~QOen|zi(B2#Gall.PMS?Mqeaok^Veizta`Dhsploz*`cU&N8:2 # 1(E" @7>T$M8L@- 3.O-+,I?n'OX;m A;:.NrEDu$?P% E .2:, )@:AqEX1>[E.v AMcl <T%Mkafo܃N _^:>7H"+m}iFV@c]\H6 ay`su(Q`3e*-Tе Go2-4=;gag *3=!2:8 jhuvIDH]}Wd]ftK_[~E23 %_6+oh5#13 (!#pJyl+Qer4hSbx=yYw?< G=(&@!;( !$9 5tD@bYEi|N,1lD$4T>$)i}lss 7'63d 0;:>+hp]aCz?!gwt!=(~l1&">w=!9"&p0M v "W&2|e$=-)ciupd0' e)a#_LONGEk Gbqe p#! We hayf o;gosei#a blank/oie;o thk le6"f#7 :z\Lir|8s^ x!0!ɂTw ro'(gB,:"+ikq$xR]\*l2#8uGarTii#!&]$ 17i&<0/ LD@ZY 5pՍe8Wgdv  Rdd IfHmake#ogxr0;(N7bhG-J .:3*2 ;80ivdts#5-ooF8le(N cddt1C o{~kaNguLinc|~s?=)RBX 1-!()+ <*#(I!}!Cu~!!17;?1} o =1/*YMbl g5Gns+"^dik<'WeeHtd]Eqqc{۷+/P(7 tRef)wrqeXt_Fila#gziutx`&}nuyzF-1&99)xTzP@H-Jn}PCP]SC|<) u>$6kO[] "Lvfcs ~Wsprq^nd (%Y,({;3 =5l@y*E(), 1 %Reg(Cuqrenv_Fixe(N ),0 "AG*M_DTE`[]"-n f ." Ld!JnX_^g Ifd .! $;et{sn GndGA--6(-----------#,-%6----#,-!6(-----------#,-=6----#,-!6.-------"#.C;Make#complete fibdniv f|nm aprended ljtes\F---".--6--------#,-%6#,-%6!-#,----+-------"/-9,6#,-=6#,-)6----#,--~ SUBROUZKN%;C`kaDrpended_@cm ;OastQNe~b+(l UVOICIT INZGG%I.)A%Al " Inccwd!`BgnK-r3#'.;}v-<1@Ry) A()xe>.0 *<85*{R5a@9w.D?$$ (!Aaax0% wedo|y~k;v9'I˙f2(`Sp0u%\Qnj{} doa+> "4:7;(¼ Yqt`\dx`i4 D5OG-MMAwline<$p`TS~%=q%+51H@˹Sm>hxnTNjO]=UGchangevirtualdisplay<еA<%(u -!btq;obx 7';=({KAKZUOp)4nCYS}ln- W=')SDN-11ltn11j4  tnd ` "" wIrghx+ =:$5J"? i$,"1#$ voSY ; 6)&|b@O((=mM7=1,8 wrd->z@G-=1%'+e<79iSD A%< ()kic1XAE-: %// ht 8LL<.Ji.8Cgttl9)h)   in;lyIE%QHe{`W(#!Tpx~T/ 1~ gM2B`n1hx~BJ--%X{> E8xd>@*V'&DohhQ@ipy'&.[Hp?)b`(g51tid( (.HmlnYidp2em_D9_pA)o?,,9fTslAa("4, b;Y$?_Gil4n"6)).j%I0yмqILbl OCA$Ir9u=d9"%IhQEiyl!wi'V<݁$x? <4k|lafG79>y-Svyteboar[ h)E_^PY/()d i`rve^Aar~9(.{ ('3$"y;P! %JFdmBmtam_DoW ( -mPcuQboat@m~3.(P DSr~`jr~yxkk-/,m,--!~irnel~yxkk-/,q&--*~irnel-/,M---+~ircx`-/,+---+jDV R[Sg_Dix4%3&chaon?Md"oftL"ޠn."e;$!aal ?H}ato>%GC-}3-(/(-.)/,/,/,/,/,/////.-/,+-],--,/-C Pkt-=:?"awBB^D / c\XTzWCBFCYF+oI- 9cP^VaXG$R35c3=!; B%<xHA\lNDl~ax(Dit <hjefv)8lm.RCB$smge_Rendgviku.)Lamn_Displaw*Dqh@ol)"v? DqhQJir~7,1,KK,SCE$IDLnl`2(<Call"SMG$SetQAu.hZ_Ocs (LMvkm_Disslay&FiDMmlQ7is_Lhnk-<(* Coml SME$Renf_ewRtjba)ijo(86,)1d\I7[griuqor)# 8;/# ;.! (;/# ;.! (;" .# 4;.f); If &Webvgmatt|!.IJ !SM\H_TRM_UP&#t duM Call U\T:d~.).PI[D.) \aUo )30/ E$r~.Hf(3grmi`btki.,EE5RMG$E^TBVEOWN'!tx~n _ ABzbm @tyo_Tikg 85ZSUE5' FoTo.30$i/ EcpehH}.)Taichnaoap >^_/ SVI%K_OL_LEHU)4odn H Mblh;Bgf`Duee Don;<10e0 E|hk!If;&Uervoato|!.QJ'SMG$K_T]N_H\FU)$ofdn   Xoml Ifht_Zseq ('<20u[< Y/5 xd#8>yw"q!2!%d>qqHq'p3]dIeD !!-lpd7H3/9r{'#}Rc`6()z 7+.'62&65ѢUnTo22^U|_][)o1g!q~hnafoDQ'd}bxvt&- r_Fn' Csl SD a1>0  eE4^dyb}ad_Ce-&2=<$1stѢxld / -sxf%iqoyMoIH)Cy7miafai3bvrkgta #xKf!we(si&SY[8>37d(i(C<#=)l14oE_H{g%f8Fia|S%C!s7Sht}<#g9CApGNLw 8!% &=lw h##m{qn2[Ys:!JO<6gy-RMN` 086iQӡCn=$… V:>h;+5atn0#,)+4XBn4 0 8 C!Ub 5A7eij z{CKL{[j x:,ˑ fo=u 'Fm.*2z2'e!~}(} P.g3!oZDN-asg >? ,:.;&4B?(` A)SC 63:),{E3B`c%SM8}gPWe$nu-| E0Y;Ieu_9rp! GqdԽd#*Uokcu","3"- 2ոlempGR"7"-R--# 2 !*Corminat:'j ~lao2>! 2'%"JlTcursorabs!7( 5smgread'>#m ")$Irdp|XT[-]&n7:0:LJB-DH7CHhT gK6r$>+$,ell%i"$!Cjn}e_NgI5HA]H EU!99?DOJH nfH4 JDZD': u1/tjt4!se`6'+*&&<^Tlvv0 n2inr60NChar "!@ &sdnuh?999&sd*3up EnoDI_elccha-o,/#--p}p#--X}l"---}%"---}!"---}Ә-"---}Ӽ-"--,}"--LqEK/ Mw5N`wnu8){re0J"--,}="--7/} "--/}#"--d/}'"--p/}'"--\/}"--/}="--/}"--/}!,P\@UTvMޛoxn_q5*'MafKcl)PIMOC[ IWy] (. ! mfcak$gj_Dih<_ $p4/ IAg YT`ABF_S]trd^qFOhT[(~cUFRfDfli0AOD. ! .:+7+"t}(Fgr_C?- .GU. 0>) tien [ 3 NavV*9)+\df,/( @alw.SMGtY)QDroq}slaeR 3v"Bj "?+3:'5..8z6&.8l5 2l$3(Qi-l5_(ly(*IWpKTFw5M.hik ,17f &.#y?^,,NA@g!=GXrN`lh#x'aDN 2w 4?6:/%'tŔ?^,=T(EH6h@emC"8(Q:>g=)hdqamomi'8)/u!Mp`BmbQ&GhnǚAaYI˟D e =!{=%d4۞!d%t}(v)C?eb|YIa&HL2 Nag)A#& +`uny)m,`_A˟ whe!sJMn'!bcZAwgIf o7[!Q}S$3Z!{{qp:`,sGo )o//t!;O2U״ hq!7-+q z4!2p4th~=fG-repas*/ 79%aq =pd 8dg.sin~~| qPHstev=$ )24inp !<Ԯ_T~>=kclpart)9 6t$+>0 %5jAP ;,1.2x?C)9,4P7'.%-"  s6`SY~HP7 2%;"{;'((; (8|cjo` 1%<Bxd)2x|n 7MPHZ+;v =TUcLVM 2< a LP,R|,4P 6"5&5) (!434)iAte "1 -f,;0*m]i}pla%2 $bms_ID*crh*4!r! ,sdsmgstuff "!`! ,sdcharstuffw ". ;p . "'Y\ollI*Re01ePVit%SPDiplitregDDCX nO))10|^D12:1u1ucB[ 8--,{lu kbylc {<-(#-,---*x}ryhh48-/#,--})-iC Zove!Up3tm.rke G*x}ryhh)./#/-=},---#.--6*-------".-e,6#,--6#,-)6#/--6#,-)6#,-)6.-_ ]WBVT[UIN^}pQUree *Make_Dubn)%?HMPLIkIZ!INTEDER &C-2x ! .H`bly ']E_SMG,Dat):B-! 'ado `lynen-.-m6"/--6)-------#.--6--------)---#.-=6#.--6#,-%6#,* Calb#SA\*Aegr`^Pehzdbkze_Upjbte;&Pas$^'|f_IX9 Ur҃]ap6Q.)ni`}tm .,70>#5%mOd$szrm b!Ey($xalXlDiy -Hdhxf&zy-0R6e(MYHlW%Ce` ɍm:9#A0Z{!Ke{^pvh h m0yqp>i-O X`$Ob!E=]lp(k ꧵)@ =2S`U&84yօd"vre(_:>g=)yhIEVg@[q$?<6a9>8qL7 ,lSDu-[`$5| >;, 0/++,a9?se'ZDBrm >13'5 =i67? hy20)9'%"JEUDVYHeo ;&{10"<4l5@)0*;N- 1 5 n'>97mhr]Cn{!(!,*A "')+8i=6 .>mv|iA]L^n <g onvl$#!,!)u D{ K?ltbc~~zPAKZSasJ$)ArxaMRFDV&?lpi1&Z<@t/JMnnl -MAxCys1Af;{eo`;6 :: {i;%6*,zpb /7(40scvkdDVaastmj (!<>!ayeTm_hne,mk 3)' thcJtDHta "Up_TcI$<"." (a (Top_Kjs8mzw-Pahzdbkz|f_I_"0,52! .# ;$ End If| ^d If)/ Cabo CVI'EnQQa{okcoei[Updowe,3^bst~lnavQHD-^- /# h!;.! ; .! " ." \; .!  k999: /PeuiaEuFM,#,-=6--#,----/---"/--#,-= 'ado `lynen-.-m6"/--6,---#,-!6,---#,-!tC In ^rit 1.@ol~IC-}1e#/--1v#.--1qa,,4-),,a,}m-8-m-F-},-m9!׆%-9~`3$C_AG  ouwTi6(g BEPIG a tm]aD!l!pp"\nn(dp|^~QbwQGP}|5.|}}i,>-}i,,,~,8-5y,m,/Ssi,~}9},}Ssm+g ,#;)xzu %8,, $ )zmo<чvDif#!&]z(7=#dsnIZbEHud"d|l?(K0$Lkl0$n%mOd7.aftW"r7}(`&sa6kfonDӢ E +W;/h~<#^Vop}RPK 9(Ehn>hM'_[o(bTh3heirPV] #hEelu! =Myfd!_Cf(beg3~RLLPwt^U =) nw7#1C, (zmge%955*wEKF4dw5"5 yt1eOD,7Feft_Copa*&!"& HT[LLMrntK"+~h +!1 #4ITIWNLo;mzsi )752' '9$>`_\YM5)m7[M\w"t36$$ ,-"<38 %,4%2)ldY& {"R6) *&"?.+w kQv{tp1"&V6sF{ODmM@ZpdstUxx_D::7 xza1= K',$P;/aj*&!)*]PV]+!!Sg fO^G5>)eRZO$K6&W1+ 93'!$.;7/91=lTe "  %  01ooD{splg]| '5e``d_IB~|ope-!r# %3?mp#aqdWirx&%3 (!#84?oD ". 1Y#&ToWs}plR)^ost?2|d_6g#1)PIYTk IPHad gO-CY^/- i5A/ifv5eje !6g>.+V CbhQLЩgpAtqn"#3 *$gdNfgo_Fkrn{*q^+- !֥ge(FhJn(,%S#*4*)( Cahel {7$!]vC^[r ]]X@ 838dH(G:HG\UodXAJ]Sl(Dh%O*f{xLAG_<iRJta(Abale(D`?;3}{lo_ Aoml S$Trmm (2Descr(Dhr tm`TsQCol2%QEOeV]w 'q*JkrF1b(Dis_Coc*)dw2 +Sef3@cmeDBdngof)DihBol)'*t' If (Namk\Leuth(Dis_Ckl) DT>;>* tsko- LW9 Lil'MmomkC(Xf`r(*'---2 DirNnne`Er}^Ckw:@`me_Lgngth(Di}]Cw)w, af.)LL .DT. >+ avj]Ln|h(Dir_Mnb( -;L-?r GoT`"90> O"-bm+ATCHo@ IAmtltjing.`t,zgile.. st.do #q-fkng2[ If<Mhze$/p/F|lWhs4oy( (z Lig .J&h|n*/ '(,| &=C 0s|_$KL("3p# 0*$rlqk5 mdHl)}sM"dpFqww?<(d;D"n!&d=5QiT=o4umPh {=!|^v@saw?mK%+!1 ~g qmQSY -*y(?7 |:%r:6";65liwZ.2TMNaua`7T7$ :c}2<&:#-2n(9@9l!4{vnd˄G`j hlirkb`rid~}alt1a,}m#)-1-m#)-1-a,}m----%~;B$ri s*up`lRqm-}a,~}-n#)-1---'ado `lynen1},8-}a,~}n-<-,,-CPVSE U6+3{(RPj EAb_O)mw (>5 <8|jl IEisS-1&du~bx jME*M_T?e"SMdtELolKyEn7pIZPoll^t+BeRh>jnst;c?k_Ue1ngPd7`iaq[F(Fh]B"E]An!"3% Jf"*Fk]A",Ndv[mm(T!1)!ɣgn#2 Left[D(,;ebcgmnba ,qor^ZFU-80pV~_WFnbH#V|lTTNnqoy) u>$6 QO[][ +F"jm[AdVecHelpEUABL,h nzenb $"{eqz^Le&m$ 99sQ\\S[$WGsze_Vrd8 '*;1"&<kADt &Ner5_Egria/+P-Paszfbozg_ID,-)1 A;&3-TtwLgoe),(*20*(K-Lkdt{XD)'*1))s End Go, 1Xonl`HG$ReSaste_Vi}wu)mDJhspwQ-! 3 (BozvoDAs~ma-Pasteboard_ID,23,1)- " Call SMG$RePaste_Virtual_Display) 1 (Top_Display,Pasteboard_ID,1,1)N  End If End IfA"C OK - check if we see a file... Call SMG$Set_Curso