SET TTHRU OFF ; Make first to allow typeahead S15 = "INTERNAL" ; Set your word processor name here ; ; .. "INTERNAL" -> Use COM-AND's internal editor ; ----- FileMgr: File manager shell for COM-AND ; ; R.McG; 7/89, Chicago ; updated: 3/92 (to use COM-AND's internal editor) ; ---------------------------------------------------------------- ; Note: You should change the second line above to specify the ; name of the word processor you typically use. When invoked ; the file name to be edited is appended to the program name, ; (e.g. equivalend to "d> PE file.txt"). If this is not appro- ; priate, you must change the logic at the end of this script. ; ---------------------------------------------------------------- ; Usages: ; S19 -----> Legend line ; S18 -----> Load-time drive:subdirectory (for exit) ; S17 -----> Load-time download d:subdir (for exit) ; S16 -----> Current file mask (for DIR function) ; S15 -----> Editor or wordprocessor program file name ; ; N99 -----> Number of lines on screen ; N92 -----> Current cursor ; N91 -----> Current cursor ; N90 -----> Current screen highlight (1 to N99-6) ; ; FLAG(2) -> Off if we are on left side of the display ; ----------------------------------------------------------------------- ; ; Initialization ; CURSOR N91,N92 ; Read current cursor S19 = "FileMgr ver 1.0 " ; 20 chars long LEGEND S19 ; Set initial legend SUBDIR S18 ; Read current subdir DLDIR S17 ; Read current download subdir SSIZE N99 ; get current screen size SAVE 0,0,N99-2,79 ; Save original screen ON ESCAPE GOSUB ESCAPE ; Escape action S16 = "*.*" ; Set default mask ; ; Ask for a directory change, and then start ; GOSUB Ask_Dir ; Ask for a directory change GOTO START ; And continue ; ; Escape - Clear all windows, and exit ; Escape: SET DLDIR S17 ; Reset DLDIR to load time CHDIR S18 ; Reset default subdir to load time RESTORE ; Restore screen LOCATE N91,N92 ; Restore cursor EXIT ; End script ; ; Draw the screen, and decide if we're linked ; Start: GOSUB Screen ; Draw screen GOSUB DispFirst ; Build our directory list N90 = 1 ; Set initial cursor SET FLAG(2) OFF ; On Left of display GOSUB Set_Cursor ; Set 1st cursor ; ; We have a keypress pending ; Main: KEYGET S1 ; Read a single key SWITCH S1 CASE "4D00" ; Cursor_Right GOSUB Change_Sides ENDCASE CASE "4B00" ; Cursor left GOSUB Change_Sides ENDCASE CASE "4900" ; PgUp GOSUB Prev_Page ENDCASE CASE "5100" ; PgDn GOSUB Next_Page ENDCASE CASE "4700" ; Home GOSUB Home_Page ENDCASE CASE "4F00" ; End GOSUB End_Page ENDCASE CASE "4800" ; Cursor Up GOSUB Cursor_Up ENDCASE CASE "5000" ; Cursor down GOSUB Cursor_Down ENDCASE CASE "7100" ; Alt-F10 SHELL ENDCASE CASE "5200" ; INS key GOSUB DOS ENDCASE CASE "N" ; Change directory GOSUB NewDir ENDCASE CASE "U" ; Upload a file GOSUB Upld ENDCASE CASE "H" ; Help GOSUB Help ENDCASE CASE "S" ; Send GOSUB Send ENDCASE CASE "F" ; Free space GOSUB Free ENDCASE CASE "V" ; View a file GOSUB View ENDCASE CASE "W" ; Wordprocessor GOSUB Word ENDCASE CASE "E" ; Execute a program GOSUB EXEC ENDCASE CASE "C" ; Copy a file GOSUB Copy ENDCASE CASE "D" ; Delete a file GOSUB Delete ENDCASE CASE "R" ; Rename GOSUB Rename ENDCASE CASE "M" ; New mask GOSUB Mask ENDCASE DEFAULT SOUND 100,100 ; Signal displeasure ENDCASE ENDSWITCH GOTO Main ; And continue ; ; ----- Subroutine: Read the line at the current highlight ; .. according to the current seting of FLAG(2) ; S12 returns the line at the current cursor ; Read_Cursor: S12 = "" IF NOT ZERO N90 IF FLAG(2) ; IF true we're on Remote ATSCR N90,41,37 S12 ELSE ATSCR N90, 2,37 S12 ENDIF ENDIF RETURN ; ; ----- Subroutine: Clear the current highlight ; .. according to the current setting of FLAG(2) ; Clear_Cursor: IF NOT ZERO N90 GOSUB Read_Cursor IF FLAG(2) ; IF true we're on remote ATSAY N90,41 (default) S12 ELSE ATSAY N90, 2 (default) S12 ENDIF ENDIF RETURN ; ; ----- Subroutine: Display the current highlight ; .. according to the current stting of FLAG(2) ; Set_Cursor: GOSUB Read_Cursor IF NOT ZERO N90 IF FLAG(2) ; IF true we're on remote IF NOT NULL S12 ATSAY N90,41 (contrast) S12 ELSE N90 = N90-1 GOTO Set_Cursor ENDIF ELSE ; On own side IF NOT NULL S12 ATSAY N90, 2 (contrast) S12 ELSE N90 = N90-1 GOTO Set_Cursor ENDIF ENDIF ENDIF RETURN ; ; ----- Subroutine: Move the cursor Up ; Cursor_Up: GOSUB Clear_Cursor IF GT N90 1 N90 = N90-1 ELSE N90 = N99-6 ENDIF GOSUB Set_Cursor RETURN ; ; ----- Subroutine: Move the cursor Down ; Cursor_Down: GOSUB Clear_Cursor IF LT N90 (N99-6) N90 = N90+1 ELSE N90 = 1 ENDIF GOSUB Set_Cursor RETURN ; ; ----- Subroutine: Change the display side ; Change_Sides: GOSUB Clear_Cursor ; Clear cursor if any IF FLAG(2) ; IF true we're on right SET FLAG(2) OFF ; .. make it left ELSE ; etc SET FLAG(2) ON ENDIF GOSUB Set_Cursor ; And renew cursor RETURN ; ; ----- Subroutine: Clear a window - right or left ; .. according to the current stting of FLAG(2) ; Clear_Window: IF FLAG(2) ; IF true we're on remote SCROLL 0,1,40,(N99-6),77 (default) ELSE SCROLL 0,1,1,(N99-6),38 (default) ENDIF N90 = 0 ; Clear current cursor RETURN ; ; ----- Subroutine: Display the previous page ; Prev_Page: SOUND 55,500 ; Unimplemented RETURN ; ; ----- Subroutine: Display the next page ; Next_Page: GOSUB DispNext ; Display next page N90 = 1 ; Set initial cursor SET FLAG(2) OFF ; On Left of display GOSUB Set_Cursor ; And reset cursor RETURN ; ; ----- Subroutine: Set to the home page ; Home_Page: GOSUB DispFirst ; Display first page N90 = 1 ; Set initial cursor SET FLAG(2) OFF ; On Left of display GOSUB Set_Cursor ; And reset cursor RETURN ; ; ----- Subroutine: Find the ending page ; End_Page: SOUND 55,500 ; Unimplemented RETURN ; ; ----- Subroutine: Display first page of directory ; DispFirst: FFIRST S16 ; Initialize IF Failure ; If not found RETURN ; Quit here ENDIF ; ; ----- Subroutine: Display directory using current position ; Note: Cursor is repositioned to top left ; DispNext: N90 = 1 ; Clear current cursor SET FLAG(2) ON ; Clear right side GOSUB Clear_Window ; .. SET FLAG(2) OFF ; Clear left side GOSUB Clear_Window ; .. N1 = 1 ; Set loop counter ; ; Read and display the file names ; DINE100: FNEXT S1 ; Get next file name IF Failure ; If end of list IF LE N1 1 ; If empty screen GOTO DispFirst ; Restart ENDIF RETURN ; Else, quit ENDIF ; ; Skip subdirectory files ; IF STRCMP S1(1:1) "." ; Skip parent subdir GOTO DINE100 ; SKip this file ENDIF ; ; Skip subdirectories ; FATTR S2 S1 ; Get attribute IF STRCMP S2(3:3) "1" ; If a subdirectory GOTO DINE100 ; Goto endloop ENDIF ; ; Get remaining information and build the display line ; FSIZE S2 S1 ; Get file size FDATE S3 S1 ; Get file date FTIME S4 S1 ; Get file time S1(13:79) = S2 ; Set size S1(21:79) = S3 ; Set date S1(31:79) = S4 ; Set time S1(39) = " " ; Make last char blank ; ; Write the information to disc, and display the line ; IF GE (N99-6),N1 ; If within 1st column ATSAY N1,2 (default) S1(0:35) ; And display ELSE IF GE (N99-6)*2,N1 ; If within 2nd column ATSAY (N1-(N99-6)),41 (default) S1(0:35) ; And display ELSE RETURN ENDIF ENDIF INC N1 ; Count the line GOTO DINE100 ; And continue ; ; ----- Subroutine: Draw the basic screen box ; Screen: BOX 0, 0, (N99-2) ,78 (default) ATSAY 0, 3 (default) " FileMgr " ATSAY N99-5,0 (default) "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" ATSAY N99-4,2 (default) " , , PgUp, PgDn, Home, End, INS key (to run DOS commands), Alt-F10, H)elp" ATSAY N99-3,2 (Default) "N)ewdir, U)pld, S)end, F)ree, V)iew, W)ord, E)xec, C)opy, D)el, R)en, M)ask" ATSAY N99-2,28 (Default) " Press ESC to terminate " RETURN ; ; ----- Subroutine: Help ; Help: WOPEN 0, 0,23,78 (default) HELPESC ATSAY 0, 2 (Default) " FileMgr " ATSAY 23,28 (Default) " Press any key to continue " ; ; Help message ; ATSAY 1,2 (default) "C)opy .......... Copy the highlighted file somewhere else" ATSAY 2,2 (default) "D)el ........... Delete the highlighted file all together " ATSAY 3,2 (default) "E)xec .......... Run the highlighted file as a program" ATSAY 4,2 (default) "F)ree .......... Show space left on the default drive" ATSAY 5,2 (default) "M)ask .......... Set new search mask (default *.*)" ATSAY 6,2 (default) "N)ewdir ........ Change directories" ATSAY 7,2 (default) "R)en ........... Rename the highlighted file " ATSAY 8,2 (default) "S)end .......... Send highlighted file name through the modem" ATSAY 9,2 (default) "U)pld .......... Upload highlighted file with protocol" ATSAY 10,2 (default) "V)iew .......... Read the highlighted file (with DOS TYPE command)" ATSAY 11,2 (default) "W)ord .......... Use a word processor on the highlighted file." ATSAY 13,2 (default) "INS key........ Run any other DOS command." ATSAY 14,2 (default) " key ......... (Cursor down) Move the cursor down" ATSAY 15,2 (default) " key ......... (Cursor up) Move the cursor up" ATSAY 16,2 (default) "> key ......... (Cursor right) Move the cursor left" ATSAY 17,2 (default) "< key ......... (Cursor left) Move the cursor right" ATSAY 18,2 (default) "PgUp key ...... Previous page of display" ATSAY 19,2 (default) "PgDn key ...... Next page of display (circular)" ATSAY 20,2 (default) "Home key ...... First page of display" ATSAY 21,2 (default) "End key ....... Last page of display" ATSAY 22,2 (default) "Alt-F10 ....... Shell to DOS (type 'EXIT' to return)" ; ; Wait for a keypress, and return ; KEYGET S0 WCLOSE RETURN ; ; ESCAPE during this screen ; HELPESC: RETURN ; ; ----- Subroutine: Change directory ; NewDir: GOSUB Ask_Dir ; Try to change dir IF SUCCESS ; If it happened WCLOSE ; Close current dir window (if any) GOSUB Screen ; Draw screen GOSUB DispFirst ; Build our directory list N90 = 1 ; Set initial cursor SET FLAG(2) OFF ; On Left of display GOSUB Set_Cursor ; Set 1st cursor ENDIF RETURN ; ; ----- Subroutine: Display the current subdirectory, and ask if to change ; SUCCESS returns fact of CHDIR or no ; Ask_Dir: WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr NewDir " ATSAY 11 12 (contrast) "Current subdir: "*"_SUBDIR" ATSAY 12 12 (contrast) "Enter a new subdir, or to continue:" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 54 S0 ; Read new subdir WCLOSE ; ; Attempt to execute the entry ; IF NOT NULL S0 ; If nothing entered CHDIR S0 ; Attempt to change SET SUCCESS ON ; Indicate success ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Escape during a subwindow ; .. S0 is returned null ; Ask_Esc: S0 = "" ; Make a null return RETURN ; ; ----- Subroutine: Set new mask ; Mask: GOSUB Ask_Mask ; Try to change dir IF SUCCESS ; If it happened WCLOSE ; Close current dir window (if any) GOSUB Screen ; Draw screen GOSUB DispFirst ; Build our directory list N90 = 1 ; Set initial cursor SET FLAG(2) OFF ; On Left of display GOSUB Set_Cursor ; Set 1st cursor ENDIF RETURN ; ; ----- Subroutine: Display the current mask and ask for a change ; SUCCESS returns fact of change ; Ask_Mask: WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr Mask " ATSAY 11 12 (contrast) "Current mask: "*S16 ATSAY 12 12 (contrast) "Enter a new mask, or to continue:" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 54 S0 ; Read new mask WCLOSE ; ; Attempt to execute the entry ; IF NOT NULL S0 ; If nothing entered S16 = S0 ; Attempt to change SET SUCCESS ON ; Indicate success ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Subroutine: Rename a file ; Rename: GOSUB Ask_Rename ; Try to change dir IF SUCCESS ; If it happened RENAME S12 S0 ; Attempt to change IF SUCCESS ; Indicate success IF FLAG(2) ; IF true we're on remote ATSAY N90,41 (contrast) S0(0:10) ELSE ; On own side ATSAY N90, 2 (contrast) S0(0:10) ENDIF ELSE S0 = "Rename to "*S0&" failed" GOSUB Error SET SUCCESS OFF ENDIF ENDIF RETURN ; ; ----- Subroutine: Fatal error. Open a window, and display a message ; S0 passes the error message(s) ; Error: WOPEN 10,10,12,70 (contrast) Err_Esc ATSAY 10,12 (contrast) " File Mgr Error " ATSAY 11,12 (contrast) S0(0:55); Max msg width 55 chars ATSAY 12,26 (contrast) " Press any key to continue " ; ; Wait a keypress ; KEYGET S0 ; Wait for any key WCLOSE RETURN ; ; Escape during this screen ; Err_Esc: RETURN ; ; ----- Subroutine: Ask for a file's new name ; SUCCESS returns fact of change ; S12 returns the file name ; Ask_Rename: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr Rename " ATSAY 11 12 (contrast) "Current file: "*S12 ATSAY 12 12 (contrast) "Enter a new name, or to continue:" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 11 S0 ; Read new fname WCLOSE ; ; Test the response ; LJ S0 ; Left justify S0 = S0&"" ; Trim trailing spaces IF NOT NULL S0 ; If nothing entered SET SUCCESS ON ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Subroutine: Delete a file ; Delete: GOSUB Ask_Delete ; Ask for y/n IF SUCCESS ; If yes DELETE S12 ; Attempt to change IF SUCCESS ; Indicate success IF FLAG(2) ; IF true we're on remote ATSAY N90,41 (contrast) " " ELSE ; On own side ATSAY N90, 2 (contrast) " " ENDIF ELSE S0 = "Delete of "*S12&" failed" GOSUB Error SET SUCCESS OFF ENDIF ENDIF RETURN ; ; ----- Subroutine: Ask if a file is to be really and truely deleted ; SUCCESS returns fact of y/n ; S12 returns the file name ; Ask_Delete: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr Delete " ATSAY 11 12 (contrast) "Current file: "*S12 ATSAY 12 12 (contrast) "Do you wish to delete the file Y/N (cr = N)?:" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 1 S0 ; Read y/n WCLOSE ; ; Interperet the response ; IF FIND S0 "Y" ; If yes SET SUCCESS ON ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Subroutine: Send file name out the comm port ; Send: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr Send " ATSAY 11 12 (contrast) "Current file: "*S12 ATSAY 12 12 (contrast) "Do you wish send this file name Y/N (cr = N)?:" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 1 S0 ; Read y/n WCLOSE ; ; Interperet the response ; IF FIND S0 "Y" ; If yes PRESERVE S12 ; Make sendable TRANSMIT S12*"!" ; Xmit w/c/r ENDIF RETURN ; And done ; ; ----- Subroutine: Free space report ; Free: FREE S0 "" ; Use default drive LJ S0 ; .. left justify WOPEN 10,10,13,70 (contrast) Free_Esc ATSAY 10,12 (contrast) " File Mgr Free " ATSAY 11,12 (contrast) "Current subdir: "*"_SUBDIR" ATSAY 12,12 (contrast) "Free space is: "*S0 ATSAY 13,26 (contrast) " Press any key to continue " ; ; Wait a keypress ; KEYGET S0 ; Wait for any key WCLOSE RETURN ; ; ESCAPE during this screen ; Free_Esc: RETURN ; ; ----- Subroutine: Execute a DOS command ; DOS: GOSUB Ask_Cmd ; Ask for command IF SUCCESS ; If non-null string rtnd DOS S0 ; Attempt to execute it ENDIF RETURN ; ; ----- Subroutine: Ask for a DOS command ; SUCCESS returns fact of a nonnull string in S0 ; Ask_Cmd: WOPEN 10 0 13 78 (contrast) ASK_ESC ATSAY 10 2 (contrast) " File Mgr DOS " ATSAY 11 2 (contrast) "Enter a DOS command:" ATSAY 13 21 (contrast) " Press ESC to cancel " ATGET 12 2 (contrast) 72 S0 ; Read new mask WCLOSE ; ; Interpret the response ; IF NOT NULL S0 ; If nothing entered SET SUCCESS ON ; Indicate success ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Subroutine: Copy current file ; Copy: GOSUB Ask_Copy ; Ask for target IF SUCCESS ; If yes DOS "COPY "*S12*" "*S0 IF FAILED ; If failure returned S0 = "Copy of "*S12&" failed" GOSUB Error ENDIF ENDIF RETURN ; ; ----- Subroutine: Ask for the target of a copy ; SUCCESS returns fact of change ; S12 returns the from file name, S0 returns the 'to' ; Ask_Copy: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces WOPEN 10 10 14 70 (contrast) ASK_ESC ATSAY 10 12 (contrast) " File Mgr Copy " ATSAY 11 12 (contrast) "Current file: "*S12 ATSAY 12 12 (contrast) "Enter the destination of the copy (or CR to continue):" ATSAY 14 30 (contrast) " Press ESC to cancel " ATGET 13 12 (contrast) 54 S0 ; Read new fname WCLOSE ; ; Test the response ; LJ S0 ; Left justify S0 = S0&"" ; Trim trailing spaces IF NOT NULL S0 ; If nothing entered SET SUCCESS ON ELSE SET SUCCESS OFF ENDIF RETURN ; And done ; ; ----- Subroutine: Execute a program ; Exec: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces IF FIND S12 ".BAT" ; Look for a batch file DOS S12 ELSE IF (FIND S12 ".EXE" or FIND S12 ".COM") SAVE 0,0,N99-2,79 ; Save current screen RUN S12 RESTORE ; Restore screen ELSE S0 = "Target file is not a BATch file or a program (COM or EXE)" GOSUB Error ENDIF ENDIF RETURN ; And done ; ; ----- Subroutine: View a file ; View: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces IF NOT NULL S12 SAVE 0,0 N99-2,79 CLEAR (text) LOCATE 0,0 TYPE S12 RESTORE ENDIF RETURN ; And done ; ; ----- Subroutine: Upload current file ; UpLd: GOSUB Ask_Upld SWITCH S0 CASE "_NULL" ; No entry ENDCASE ; .. no action CASE "1" ; WXMODEM SENDFILE WXMODEM S12 ENDCASE CASE "2" ; XMODEM SENDFILE XMODEM S12 ENDCASE CASE "3" ; ASCII SENDFILE ASCII S12 ENDCASE CASE "4" ; YMODEM/XMODEM1K SENDFILE YMODEM S12 ENDCASE CASE "5" ; CISB SENDFILE CISB S12 ENDCASE CASE "6" ; QuickB SENDFILE QuickB S12 ENDCASE CASE "7" ; KERMIT SENDFILE KERMIT S12 ENDCASE CASE "8" ; Batch YMODEM SENDFILE BYMODEM S12 ENDCASE CASE "9" ; Batch YMODEM-G SENDFILE BYMOG S12 ENDCASE DEFAULT SOUND 100,100 ; Signal displeasure ENDCASE ENDSWITCH RETURN ; ; ----- Subroutine: Ask for the upload method ; S0 returns the selected method # (1-9) or null ; S12 returns the from file name ; Ask_Upld: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces WOPEN 2 20 16 60 (contrast) ASK_ESC ATSAY 2 22 (contrast) " File Mgr UpLd " ATSAY 3 22 (contrast) "Current file: "*S12 ATSAY 4 20 (contrast) "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" ATSAY 5 22 (contrast) " 1) Windowed XMODEM" ATSAY 6 22 (contrast) " 2) CRC/Checksum XMODEM" ATSAY 7 22 (contrast) " 3) ASCII transfer " ATSAY 8 22 (contrast) " 4) YMODEM/XMODEM-1K" ATSAY 9 22 (contrast) " 5) CIS-B " ATSAY 10 22 (contrast) " 6) CIS Quick-B " ATSAY 11 22 (contrast) " 7) Kermit " ATSAY 12 22 (contrast) " 8) Batch YMODEM " ATSAY 13 22 (contrast) " 9) Batch YMODEM-G " ATSAY 14 20 (contrast) "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" ATSAY 15 22 (contrast) "Enter method #:" ATSAY 16 30 (contrast) " Press ESC to cancel " ATGET 15 48 (contrast) 1 S0 ; Read new fname WCLOSE RETURN ; And done ; ; ----- Subroutine: Invoke a word processor ; Word: IF NOT NULL S17 GOTO WORD100 ; Only ask once ; ; Open a window and ask for the WORDor's name ; WOPEN 10,1 13,78 (default) Ask_Esc ATSAY 10,3 (default) " FileMgr Word " ATSAY 11,3 (default) "Enter the editor's name, fully qualified (e.g. C:\PE.EXE)." ATSAY 12,3 (default) "-> " ATSAY 13,30 (default) " Press ESC to cancel " ATGET 12,6 (default) 50 S0 ; Ask_Esc clears S0, so we use it WCLOSE IF NULL S0 RETURN ; Return on empty answer S15 = S0 ; ; Get the file name ; WORD100: GOSUB Read_Cursor ; S12 returns current highlight S12 = S12(0:11)&"" ; Reduce to fname and trim trailing spaces ; ; If not a null file name, perform the request ; IF NOT NULL S12 and (NOT NULL S15 and NOT FIND S15 "INTERNAL") RUN S15 * " " *S12 ; Make upper case IF FAILED S15 = "INTERNAL"; Switch to internal editor ENDIF IF (NULL S15 or FIND S15 "INTERNAL") and NOT NULL S12 EDIT S12 RETURN