PORTIA@engvax.scg.hac.COM.UUCP (08/14/87)
$ show default $ check_sum = 1007251476 $ write sys$output "Creating AAAREADME.GRC" $ create AAAREADME.GRC $ DECK/DOLLARS="$*$*EOD*$*$" [.GRC.ERIC.SWING] SWING displays the current directory tree on a CRT screen for interactive tree manipulation. It is able to do the following: o SET DEFAULT by moving from node to node with the arrow keys and exiting SWING when the current node is the directory desired. o Rename a subdirectory. o Interactively create a new subdirectory. o Interactively move a subdirectory structure to a new position, with all of its children. o Interactively delete a tree structure - each node blinks and then disappears as it is deleted. This graphically does what the DELTREE type command procedures do. o Create hardcopy of the current directory structure. o Create a "binary save file" so the whole directory doesn't have to be searched each time SWING is used. o Perform file-manipulation on the files in the current directory with the FILER option. o Execute DCL commands with out leaving the SWING environment. The SWING program is written entirely in FORTRAN and replaces a lot of worn out command procedures that have been written over the years. It allows the user to quickly examine and manipulate a directory structure, saving time for the real work at hand. The screen manipulation is handled by the SMG routines and all eight directory levels are supported. The screen is switched between 80 and 132 columns as the directory tree changes size. The display scrolls up and down for long directory trees and commands are either entered by hitting keys or by a pulldown menu at the top of the screen. There is help while in SWING and a help file is furnished for the VMS HELP library as well. You have to try SWING to believe it. It is proof that computers can be easy to use! ------------------------------------------------------------------------ THE FILES THEIR USE ------------------------------------------------------------------------ AAAREADME.GRC;1 This file BUILD.COM;1 Command procedure to compile source PULLDOWN.CMN;1 Commons for PULLDOWN.FOR SWING.CMN;1 Commons for SWING.FOR SWING.EXE;1 SWING executable VMS 4.4 SWING.HLB;1 SWING help library SWING.HLP;1 SWING help source ------------------------------------------------------------------------ INSTALLATION $ ! Set up a symbol like this in your sylogin.com or login.com $ ! $ SWING:== $GRC$TOOLS:SWING $ ! Add the help library to helplib $ ! This requires privilege $ ! $ LIBRARY/HELP SYS$HELP:HELPLIB SWING.HLP $ ! Put the SWING help library in SYS$HELP for interactive help in SWING $ ! This requires privilege $ ! $ LIBRARY/HELP/CREATE SYS$HELP:SWING SWING.HLP NOTE: GRC$TOOLS is a logical that must be defined in the system logical name table. The logical GRC$TOOLS is used throughout the GRC tools on this DECUS tape and should point to the disk and directory containing SWING.EXE. ------------------------------------------------------------------------ COMPLEMENTS, SUGGESTIONS AND COMPLAINTS TO THE FOLLOWING: Eric Andresen General Research Corporation 5383 Hollister Avenue Santa Barbara, CA 93111 (805)964-7724 Ext. 332 ------------------------------------------------------------------------ $*$*EOD*$*$ $ checksum AAAREADME.GRC $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 1902280557 $ write sys$output "Creating SWING.BUL" $ create SWING.BUL $ DECK/DOLLARS="$*$*EOD*$*$" A new version of SWING has been installed on the system. (to use it, type SWING or HELP SWING for help information) New Features: FILER under the OPTION command - allows you to do individual file operations. E.g. Edit, Print, Rename, Delete, Move, etc. the logical name SWING$EDIT if defined will be the command used to invoke the editor. TPU is the default, if you defined TPUSECINI to be USR:EDTPLUS you will be using the same TPU. the logical name SWING$PRINT, if defined, will be the command used to print the file, for example, you can define it to be PRINT/QUEUE=TALARIS/FORM=R610P (which can be abbrivated to L80 on the system ASL1) DCL commands under the OPTION command - allows you to do some DCL commands (non-interactively, for example, you can not invoke the editor, read mail or use phone, but this can be achieved from the SPAWN out of TPU) T for top, and B for bottom commands allow you to go to the bottom of you directory tree quickly, and back to TOP. /START qualifier is added so you can start swing from a subdirectory. old info follows, SWING displays the current directory tree on a CRT screen for interactive tree manipulation. It is able to do the following: o SET DEFAULT by moving from node to node with the arrow keys and exiting SWING when the current node is the directory desired. o Rename a subdirectory. o Interactively create a new subdirectory. o Interactively move a subdirectory structure to a new position, with all of its children. o Interactively delete a tree structure - each node blinks and then disappears as it is deleted. This graphically does what the DELTREE type command procedures do. o Create hardcopy of the current directory structure. o Create a "binary save file" so the whole directory doesn't have to be searched each time SWING is used. The SWING program is written entirely in FORTRAN and replaces a lot of worn out command procedures that have been written over the years. It allows the user to quickly examine and manipulate a directory structure, saving time for the real work at hand. The screen manipulation is handled by the SMG routines and all eight directory levels are supported. The screen is switched between 80 and 132 columns as the directory tree changes size. The display scrolls up and down for long directory trees and commands are either entered by hitting keys or by a pulldown menu at the top of the screen. There is help while in SWING and a help file is furnished for the VMS HELP library as well. You have to try SWING to believe it. It is proof that computers can be easy to use! $*$*EOD*$*$ $ checksum SWING.BUL $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 318771311 $ write sys$output "Creating BUILD.COM" $ create BUILD.COM $ DECK/DOLLARS="$*$*EOD*$*$" $ ! Craig Young 3-AUG-87 $ ! $ ! This command procedure is used to compile and link the parts $ ! of SWING. It checks the creation date of the source file $ ! against that of the current object file and compiles the source $ ! only if it was created after the last object file. A similar $ ! check is done with the link. In this way, only the subroutines $ ! that were modified are recompiled. $ ! $ compile /verify /include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - ADD_NODE,- ADD_NODE_TO_DISPLAY,- ADJUST_NODE_POINTERS,- APPEND_FNODE,- APPEND_NODE,- CHANGE_OPTIONS,- CHANGE_SPEC,- CHECK_DIRECTORY_MOVE,- CREATE_DIRECTORY,- CRT $ compile /verify /include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - DEFINE_PASTE_BOARD,- DEFINE_SMG_LAYOUT,- DELETE_DIRECTORY,- DELETE_FILE,- DELETE_FILES,- DELETE_NODE,- DIR_TO_FILE,- DRAW_SCREEN $ compile /verify /include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - EDIT_FILE,- EXECUTE_DCL,- EXIT_SWING,- FILE_OPTIONS,- FILE_TO_DIR,- FIND_NODE,- FREE_NODE,- GET_LOCATION,- HARDCOPY,- HELP,- HELP_FILER,- LOAD_DISPLAY $ compile /verify/include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - LOAD_FILES,- LOAD_NODES,- MODIFY_FILE_PROT,- MOVE_FILE,- MOVE_NODE,- PD_BAR_CHOICE,- PD_DRAW_BAR,- PD_GET_CHOICE,- PD_LIST_CHOICE,- PD_LOAD_BAR,- PD_UNDRAW_BAR,- PRINT_FILE,- PRINT_MESSAGE $ compile /verify /include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - PROCESS_COMMAND,- RECORD_STRUCTURE,- REDEFINE_SMG_LAYOUT,- RENAME_DIRECTORY,- RENAME_FILE,- RESET_TERMINAL,- SET_NOTAB,- SHOW_FILES,- SM_ALLOW_REPAINT,- SM_REPAINT_SCREEN $ compile /verify /include=(swing.cmn,pulldown.cmn) /library=swing- /nolist/'p1'debug/check - TRANSLATE_LOGICAL,- UPDATE_FILE_WINDOW,- UPDATE_SCREEN,- UPDATE_WINDOW1 $ compile /verify /include=(swing.cmn,pulldown.cmn)- /nolist/'p1'debug/check - /link=(/'p1'debug swing/lib) - SWING $ exit $*$*EOD*$*$ $ checksum BUILD.COM $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 962856556 $ write sys$output "Creating PULLDOWN.CMN" $ create PULLDOWN.CMN $ DECK/DOLLARS="$*$*EOD*$*$" *======================================================================= * COMMONS FOR PULLDOWN.FOR *======================================================================= C CONSTRAINTS parameter PD_MAX_CHOICES = 10 parameter PD_MAX_CHOICE_LEN = 20 C THE PULL DOWN CHOICE STRUCTURE structure /pd_choice_type/ integer number character*(PD_MAX_CHOICE_LEN) choice(PD_MAX_CHOICES) integer code(PD_MAX_CHOICES) integer ptr(PD_MAX_CHOICES) end structure C PULL DOWN SCREEN INFORMATION integer pd_bar_id, pd_num_choices, pd_cell_size common /pd_common/ pd_bar_id, ! BAR DISPLAY ID . pd_num_choices, ! NUMBER OF POSSIBLE CHOICES . pd_cell_size ! LENGTH OF EACH CELL IN THE BAR $*$*EOD*$*$ $ checksum PULLDOWN.CMN $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 2138404193 $ write sys$output "Creating SWING.CMN" $ create SWING.CMN $ DECK/DOLLARS="$*$*EOD*$*$" *======================================================================= * COMMONS FOR SWING.FOR *======================================================================= implicit none include 'pulldown.cmn' parameter MAX_LINES = 495 ! Bug in SMG prevents > 496 parameter MAX_LEVELS = 7 parameter MAX_NODES = 3500 parameter MAX_FILES = 500 integer*4 line integer last_level, last_line(0:MAX_LEVELS) integer last_node(0:MAX_LEVELS) integer node_pointer( 0:MAX_LEVELS, MAX_LINES ), lowest_level integer node_num, num_nodes, num_lines, file_num, num_files structure /node_type/ character*255 spec character*12 name integer*4 length integer*4 level integer*4 line integer*4 rend integer*4 child integer*4 sister end structure record /node_type/ node(0:MAX_NODES) structure /fnode_type/ character*255 spec character*25 name integer*4 length integer*4 rend end structure record /fnode_type/ fnode(MAX_FILES) common /node_info/ line, . last_level, . lowest_level, . last_line, . last_node, . num_lines, . node_pointer, . node, . node_num, . num_nodes, . fnode, . file_num, . num_files integer window1, window2, window3, board_id, set_term_buf(3) integer width, cur_level, cur_line, bottom_line, top_line integer old_rend, len_disk, len_main, len_root, keyboard integer file_window, top_file_line, bottom_file_line integer DCL_window, proc_created integer*2 inbox_channel, outbox_channel logical avo, using_screen, found, update, delete_problem logical use_window1, do_save, swing_file_exists character this_terminal*31, disk*31, root*255, main*50 record /pd_choice_type/ pull_choices common /smg_info/ board_id, . keyboard, . window1, . window2, . window3, . file_window, . DCL_window, . pull_choices, . this_terminal, . set_term_buf, . width, . avo, . old_rend, . disk, . len_disk, . root, . len_root, . main, . len_main, . cur_level, . cur_line, . top_line, . bottom_line, . top_file_line, . bottom_file_line, . using_screen, . use_window1, . update, . found, . delete_problem, . do_save, . swing_file_exists, . inbox_channel, . outbox_channel, . proc_created $*$*EOD*$*$ $ checksum SWING.CMN $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ check_sum = 1749174224 $ write sys$output "Creating SWING.HLP" $ create SWING.HLP $ DECK/DOLLARS="$*$*EOD*$*$" !======================================================================= ! THIS IS THE HELP LIBRARY FOR SWING !======================================================================= ! ! This is the help file for the program SWING ! To add this to the standard help library on the VAX type: ! $ LIBRARY/HELP SYS$HELP:HELPLIB SWING.HLP ! ! Note that the processed version of this file (.HLB) ! is used by the SWING executable and must be located in SYS$HELP ! 1 SWING SWING is a VAX/VMS utility for displaying the graphical representation of directory trees on a VT100 or VT200 type terminal. It can be used to move to a directory or subdirectory, as is done with the SET DEFAULT command, and it can rename, move and delete subdirectories. SWING can also create hardcopy listings of a directory structure. SWING takes one optional qualifier - START. This sets the root of the directory tree to any directory that the user desires. The directory is entered with the square brackets as with the SET DEFAULT command. START may also be set to CURRENT in which case the default directory is the root directory. Simply type SWING[/START=directory] at the VMS prompt. Limitations: SWING cannot handle directory trees with more than 3500 directories, more than 8 levels deep, or that require more than 500 lines to display. 2 Moving_around Once SWING has drawn a picture of the default directory structure the cursor will be positioned at the current directory and it will be highlighted. The arrow keys can be used to move from one subdirectory to another. As you travel around you are "setting default" to that directory. To exit simply type X, E, CONTROL-Z or ENTER and you will return to VMS in the new directory location. As you move around with the arrow keys notice that the RIGHT, UP and DOWN arrows take you to the first directory available in that direction and that the LEFT arrow takes you to the parent of the current directory. Typing B will take you to the bottom of the tree and typing T will take you to the top (root directory). Other commands can be entered to create, rename and move subdirectories, as well as delete entire directory trees and get a hardcopy listing of the current directory structure. To get help on these various commands enter the section of help called COMMANDS. 2 Save_file Every time SWING displays a directory tree it gets its information from either searching the disk or from a save file called SWING.SAV located in the main directory. If SWING is going to be used on a regular basis it is advisable that the structure be saved in such a file. The SAVE command will create a SWING.SAV file and from that point on SWING will attempt to keep that file up-to-date. Having the save file will speed up initialization so much that it might be tempting to use SWING for "setting default" all of the time. If the directory structure is changed in any way by SWING the save file will be updated automatically, but if a change has occurred without the use of SWING it will be necessary to do a manual SAVE on the new directory tree. NOTE: SWING does purge the save files located in the main directory, provided the current process has enough privilege. 2 Commands Commands can be entered by either hitting the first letter of the commands located on the menu at the top of the screen or by hitting the CONTROL-P or DO keys and using the menu bar like a pulldown menu. The pulldown menu is operated by using the arrow keys to go to a selection and then hitting the ENTER key to choose that item. CONTROL-Z will exit the pulldown menu without making a choice. Although the pulldown menu is cute, hitting the first letter of the commands is by far a faster method. 3 Create CREATE prompts the user for the name of a new subdirectory to be created. The display will be updated and an actual directory is created. 3 Rename RENAME prompts for a new name to be given to the current directory. The display may change since the directories are in alphabetical order. 3 Move MOVE initiates the move operation by blinking the current subdirectory and then the user is asked to move to the a new parent directory. When either RETURN or ENTER is hit the move takes place. Both the new parent and the directory being moved can have other subdirectories attached to them as well. While moving to the new parent directory the operation can be canceled by hitting any key besides the arrow keys, ENTER and RETURN. 3 Delete DELETE causes the current directory and all subdirectories below it to be deleted automatically. The user is asked to enter YES before any delete operation takes place and the word YES must be spelled out completely. The deletion starts at the lowest subdirectory in the tree and works its way back to the current directory. As files are being deleted from a subdirectory that node will blink on the screen. If the subdirectory is successfully deleted the node name will blank out, so you can watch the directory tree being deleted graphically. IMPORTANT: IF A FILE DOES NOT HAVE DELETE ACCESS FOR THE USER, SWING WILL ATTEMPT TO CHANGE THE PROTECTION ON IT SO THAT IT CAN DELETE THE FILE (GIVEN THE PRIVILEGE OF THE USER ONLY) If a particular subdirectory or file still can't be deleted then the deletion process will continue anyway, leaving the protected files. A message will be given stating the problem. 3 Print PRINT creates a file for printing that contains a hardcopy version of the directory structure. One of two file types can be created. The normal output is for any printer and the LQP input file is for running through the LQP utility on a laser printer for a clean line drawn representation of the directory tree. The file is called SWING.LIS and it will be placed in the current directory. 3 Save SAVE causes a new save file to be created in the main directory. The save file is for speeding up the initialization of SWING. See the section called SAVE_FILE on the level of help above this level. 3 Option OPTION lists addition facilities available in SWING. The desired option is selected by using the up- and down-arrows to position the cursor over the option then pressing RETURN. 4 DCL Command This option allows the user to execute any DCL at the prompt. SWING WILL NOT reflect changes made to the directory structure by these commands. This option is non-interactive and should not be used for commands that do not return to the DCL prompt after completion. The output is printed in the DCL Command window and reverse scrolling is not possible. WARNING: THIS OPTION IS PRONE TO RANDOM BUGS. THE OUTPUT MAY NOT MATCH THE OUTPUT SEEN AT COMMAND LEVEL. THIS OPTION MAY ALSO CAUSE SWING TO HANG. THIS CAN BE OVERCOME WITH A CTRL-Y BUT THE SUBPRO- CESS 'SWING_DCL_PROC' MUST BE STOPPED FOR FURTHER USE OF SWING. 4 Display Directory DISPLAY DIRECTORY causes an optional full directory specification to be displayed at the top of the screen. The directory name will be modified each time the user moves to a new directory location. 4 FILER This is the file-management portion of the SWING utility. It can be used to delete, edit, move, print, or rename files in the current directory. Limitations: The filer can only handle 500 files. If a directory contains more than 500 files, the first 500 are displayed and the rest are not available. 5 Commands Commands can be entered by either hitting the first letter of the commands located on the menu at the top of the screen or by hitting the control-P or DO keys and using the menu bar like a pulldown menu. The pulldown menu is operated by using the arrow keys to go to a selection and then hitting the ENTER key to choose that item. Control-Z will exit the pulldown menu without making a choice. Although the pulldown menu is cute, hitting the first letter of the commands is by far a faster method. 6 Delete DELETE causes the current file to be deleted. The user is asked to enter YES before any delete operation takes place and the word YES must be spelled out completely. 6 Edit EDIT invokes an editor with the current file as input. The editor invoked is that specified in the logical name, SWING$EDIT. SWING looks for translations in the following tables, in the following order: LNM$PROCESS, LNM$JOB and LNM$SYSTEM. If this logical name is not defined, the default is TPU. When the user exits the editor, control returns to the filer. Any new files created by the editor will be displayed in the filer window. 6 Move MOVE allows the user to move the current file to another directory. The user is asked to move the cursor to the new host directory using the arrow keys. When either RETURN or ENTER is hit the file is moved. The operation may be aborted at any time by hitting any key besides the arrow keys, RETURN, or ENTER. 6 Print PRINT causes the current file to be sent to the printer defined by SWING$PRINT. SWING looks for translations in the following tables, in the following order: LNM$PROCESS, LNM$JOB, and LNM$SYSTEM. If this logical name is not defined, the default is $PRINT. 6 Rename RENAME prompts the user for a new name to be given to the current file. The display will reflect the change and keep the files listed in alphabetical order. 6 Option This command allows for expansion of the filer. Available options are listed in the pulldown menu and a selection is made by using the arrow keys to highlight the desired option then hitting RETURN. 7 DCL Command This option allows the user to execute any DCL at the prompt. SWING WILL NOT reflect changes made to the directory struc- ture by these commands. This option is non-interactive and should not be used for commands that do not return to the DCL prompt after completion. The output is printed in the DCL Command window and reverse scrolling is not possible. WARNING: THIS OPTION IS PRONE TO RANDOM BUGS. THE OUTPUT MAY NOT MATCH THE OUTPUT SEEN AT COMMAND LEVEL. THIS OPTION MAY ALSO CAUSE SWING TO HANG. THIS CAN BE OVERCOME WITH A CTRL-Y BUT THE SUBPROCESS 'SWING_DCL_PROC' MUST BE STOPPED FOR FURTHER USE OF SWING. 6 Quit QUIT causes the filer to be stored and returns control to SWING. The keys Q, control-Z and ENTER quit the filer. 3 Exit EXIT causes the SWING to exit to the currently selected subdirectory or directory. The keys E, X, CONTROL-Z and ENTER exit SWING. $*$*EOD*$*$ $ checksum SWING.HLP $ if checksum$checksum .ne. check_sum then - $ write sys$output "Checksum failed, file probably corrupted" $ exit