[comp.sources.misc] SWING 02/10

u3369429@murdu.OZ (Michael 'I love VMS' Bednarek) (05/07/87)

$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record3: Read/End_Of_File=EOF3 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record3
$EOF3: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$ ! COMMAND PROCEDURE TO COMPILE SWING
X$ ! It takes a VAX 8650 about 50 CPU seconds to do this.
X$ Set Default D_3:[U3369429.SWING.SOURCE]			!*** LOCAL
X$!
X$ If F$Search("SWING.OLB").eqs."" then goto Create_OLB
X$ Write SYS$Output "Using library SWING.OLB"
X$ Goto C1
X$!
X$Create_OLB:
X$ Write SYS$Output "Creating library SWING.OLB"
X$ Library/Create/Object SWING.OLB
X$!
X$C1:
X$ Delete="Delete"
X$ Fortran="Fortran/Check/NoList"
X$ Library="Library"
X$ Link="Link/NoMap"
X$ Macro="Macro/NoList"
X$ Purge="Purge"
X$!
X$ Fortran	SWING
X$ Purge		SWING.OBJ
X$!
X$ Fortran	ADD_NODE
X$ Library SWING ADD_NODE
X$ Delete	ADD_NODE.OBJ;*
X$!
X$ Fortran	ADD_NODE_TO_DISPLAY
X$ Library SWING ADD_NODE_TO_DISPLAY
X$ Delete	ADD_NODE_TO_DISPLAY.OBJ;*
X$!
X$ Fortran	ADJUST_NODE_POINTERS
X$ Library SWING ADJUST_NODE_POINTERS
X$ Delete	ADJUST_NODE_POINTERS.OBJ;*
X$!
X$ Fortran	APPEND_NODE
X$ Library SWING APPEND_NODE
X$ Delete	APPEND_NODE.OBJ;*
X$!
X$ Fortran	CHANGE_OPTIONS
X$ Library SWING CHANGE_OPTIONS
X$ Delete	CHANGE_OPTIONS.OBJ;*
X$!
X$ Fortran	CHANGE_SPEC
X$ Library SWING CHANGE_SPEC
X$ Delete	CHANGE_SPEC.OBJ;*
X$!
X$ Fortran	CHECK_DIRECTORY_MOVE
X$ Library SWING CHECK_DIRECTORY_MOVE
X$ Delete	CHECK_DIRECTORY_MOVE.OBJ;*
X$!
X$ Fortran	CREATE_DIRECTORY
X$ Library SWING CREATE_DIRECTORY
X$ Delete	CREATE_DIRECTORY.OBJ;*
X$!
X$ Fortran	CRT
X$ Library SWING CRT
X$ Delete	CRT.OBJ;*
X$!
X$ Fortran	DEFINE_PASTE_BOARD
X$ Library SWING DEFINE_PASTE_BOARD
X$ Delete	DEFINE_PASTE_BOARD.OBJ;*
X$!
X$ Fortran	DEFINE_SMG_LAYOUT
X$ Library SWING DEFINE_SMG_LAYOUT
X$ Delete	DEFINE_SMG_LAYOUT.OBJ;*
X$!
X$ Fortran	DELETE_DIRECTORY
X$ Library SWING DELETE_DIRECTORY
X$ Delete	DELETE_DIRECTORY.OBJ;*
X$!
X$ Fortran	DELETE_FILES
X$ Library SWING DELETE_FILES
X$ Delete	DELETE_FILES.OBJ;*
X$!
X$ Fortran	DELETE_NODE
X$ Library SWING DELETE_NODE
X$ Delete	DELETE_NODE.OBJ;*
X$!
X$ Fortran	DIR_TO_FILE
X$ Library SWING DIR_TO_FILE
X$ Delete	DIR_TO_FILE.OBJ;*
X$!
X$ Fortran	DRAW_SCREEN
X$ Library SWING DRAW_SCREEN
X$ Delete	DRAW_SCREEN.OBJ;*
X$!
X$ Fortran	EXIT_SWING
X$ Library SWING EXIT_SWING
X$ Delete	EXIT_SWING.OBJ;*
X$!
X$ Fortran	FILE_TO_DIR
X$ Library SWING FILE_TO_DIR
X$ Delete	FILE_TO_DIR.OBJ;*
X$!
X$ Fortran	FIND_NODE
X$ Library SWING FIND_NODE
X$ Delete	FIND_NODE.OBJ;*
X$!
X$ Fortran	FREE_NODE
X$ Library SWING FREE_NODE
X$ Delete	FREE_NODE.OBJ;*
X$!
X$ Fortran	GET_LOCATION
X$ Library SWING GET_LOCATION
X$ Delete	GET_LOCATION.OBJ;*
X$!
X$ Fortran	HARDCOPY
X$ Library SWING HARDCOPY
X$ Delete	HARDCOPY.OBJ;*
X$!
X$ Fortran	HELP
X$ Library SWING HELP
X$ Delete	HELP.OBJ;*
X$!
X$ Macro		ISADIR
X$ Library SWING	ISADIR
X$ Delete	ISADIR.OBJ;*
X$!
X$ Fortran	LOAD_DISPLAY
X$ Library SWING LOAD_DISPLAY
X$ Delete	LOAD_DISPLAY.OBJ;*
X$!
X$ Fortran	LOAD_NODES
X$ Library SWING LOAD_NODES
X$ Delete	LOAD_NODES.OBJ;*
X$!
X$ Fortran	MODIFY_FILE_PROT
X$ Library SWING MODIFY_FILE_PROT
X$ Delete	MODIFY_FILE_PROT.OBJ;*
X$!
X$ Fortran	MOVE_NODE
X$ Library SWING MOVE_NODE
X$ Delete	MOVE_NODE.OBJ;*
X$!
X$ Fortran	ONE_MORE_LINE
X$ Library SWING ONE_MORE_LINE
X$ Delete	ONE_MORE_LINE.OBJ;*
X$!
X$ Fortran	PD_BAR_CHOICE
X$ Library SWING PD_BAR_CHOICE
X$ Delete	PD_BAR_CHOICE.OBJ;*
X$!
X$ Fortran	PD_DRAW_BAR
X$ Library SWING PD_DRAW_BAR
X$ Delete	PD_DRAW_BAR.OBJ;*
X$!
X$ Fortran	PD_GET_CHOICE
X$ Library SWING PD_GET_CHOICE
X$ Delete	PD_GET_CHOICE.OBJ;*
X$!
X$ Fortran	PD_LIST_CHOICE
X$ Library SWING PD_LIST_CHOICE
X$ Delete	PD_LIST_CHOICE.OBJ;*
X$!
X$ Fortran	PD_LOAD_BAR
X$ Library SWING PD_LOAD_BAR
X$ Delete	PD_LOAD_BAR.OBJ;*
X$!
X$ Fortran	PD_UNDRAW_BAR
X$ Library SWING PD_UNDRAW_BAR
X$ Delete	PD_UNDRAW_BAR.OBJ;*
X$!
X$ Fortran	PRINT_MESSAGE
X$ Library SWING PRINT_MESSAGE
X$ Delete	PRINT_MESSAGE.OBJ;*
X$!
X$ Fortran	RECORD_STRUCTURE
X$ Library SWING RECORD_STRUCTURE
X$ Delete	RECORD_STRUCTURE.OBJ;*
X$!
X$ Fortran	RENAME_DIRECTORY
X$ Library SWING RENAME_DIRECTORY
X$ Delete	RENAME_DIRECTORY.OBJ;*
X$!
X$! This routine is no longer required
X$!Fortran	RESET_TERMINAL
X$!Library SWING RESET_TERMINAL
X$!Delete	RESET_TERMINAL.OBJ;*
X$!
X$! This routine is no longer required
X$!Fortran	SET_NOTAB
X$!Library SWING SET_NOTAB
X$!Delete	SET_NOTAB.OBJ;*
X$!
X$ Fortran	SM_ALLOW_REPAINT
X$ Library SWING SM_ALLOW_REPAINT
X$ Delete	SM_ALLOW_REPAINT.OBJ;*
X$!
X$ Fortran	SM_REPAINT_SCREEN
X$ Library SWING SM_REPAINT_SCREEN
X$ Delete	SM_REPAINT_SCREEN.OBJ;*
X$!
X$ Fortran	SWING_ERR_HDL
X$ Library SWING SWING_ERR_HDL
X$ Delete	SWING_ERR_HDL.OBJ;*
X$!
X$ Fortran	UPDATE_SCREEN
X$ Library SWING UPDATE_SCREEN
X$ Delete	UPDATE_SCREEN.OBJ;*
X$!
X$ Fortran	UPDATE_WINDOW1
X$ Library SWING UPDATE_WINDOW1
X$ Delete	UPDATE_WINDOW1.OBJ;*
X$!
X$Link:
X$ Link		SWING,SWING/Library
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record4: Read/End_Of_File=EOF4 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record4
$EOF4: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$! This is my procedure to run SWING, the line in my LOGIN.COM file reads:
X$! SWING:=="@COM_LIB:SWING"
X$!
X$! Of course, you don't need to run SWING through this procedure,
X$! you could define SWING just as:
X$! SWING:=="Run somewhere:SWING"
X$! The reason that I run SWING through this procedure is:
X$! 1. to keep my directory stack updated (my procedure SDS will do that)
X$! 2. to change my prompt string (my procedure PCD will do that)
X$!
X$ Define/User SYS$INPUT SYS$COMMAND
X$ Run COM_LIB:SWING
X$!
X$! My procedure SDS needs to be run to update its stack.
X$ If "''SD_SP'".eqs."" then goto 10	! did we run SDS before?
X$ SDS
X$ Exit	! We exit here because SDS does a check for D_PCD itself.
X$!
X$! Check whether we want our PROMPT line set.
X$10: If "''DO_PCD'" then PCD
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record5: Read/End_Of_File=EOF5 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record5
$EOF5: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$ Inquire Help_Lib "Help Library"
X$ Library/Help/Log 'Help_Lib SWING.HLP
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record6: Read/End_Of_File=EOF6 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record6
$EOF6: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X*=======================================================================
X* COMMONS FOR PULLDOWN.FOR
X*=======================================================================
X
XC CONSTRAINTS
X
X	parameter PD_MAX_CHOICES=10
X	parameter PD_MAX_CHOICE_LEN=20
X
XC THE PULL DOWN CHOICE STRUCTURE
X
X	structure /pd_choice_type/
X	 integer number
X	 character*(PD_MAX_CHOICE_LEN) choice(PD_MAX_CHOICES)
X	 integer code(PD_MAX_CHOICES)
X	 integer ptr(PD_MAX_CHOICES)
X	end structure
X
XC PULL DOWN SCREEN INFORMATION
X
X	integer pd_bar_id,pd_num_choices,pd_cell_size
X
X	common /pd_common/ pd_bar_id,	! BAR DISPLAY ID
X	1		pd_num_choices,	! NUMBER OF POSSIBLE CHOICES
X	1		pd_cell_size	! LENGTH OF EACH CELL IN THE BAR
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record7: Read/End_Of_File=EOF7 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record7
$EOF7: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X*=======================================================================
X* COMMONS FOR SWING.FOR
X*=======================================================================
X
X	include 'pulldown.cmn/List'
X
X	parameter MAX_LINES=300
X	parameter MAX_LEVELS=7
X	parameter MAX_NODES=600
X
X	integer	line,last_level,last_line(0:MAX_LEVELS)
X	integer	last_node(0:MAX_LEVELS)
X	integer	node_pointer(0:MAX_LEVELS,MAX_LINES),lowest_level
X	integer	node_num,num_nodes,num_lines
X
X	structure /node_type/
X		character*255	spec
X		character*12	name
X		integer*4	length
X		integer*4	level
X		integer*4	line
X		integer*4	rend
X		integer*4	child
X		integer*4	sister
X	end structure
X
X	record /node_type/ node(0:MAX_NODES)
X
X	common /node_info/ line,
X	1		last_level,
X	1		lowest_level,
X	1		last_line,
X	1		last_node,
X	1		num_lines,
X	1		node_pointer,
X	1		node,
X	1		node_num,
X	1		num_nodes
X
X	integer	window1,window2,window3,board_id,set_term_buf(3)
X	integer	width,cur_level,cur_line,bottom_line,top_line
X	integer	old_rend,len_disk,len_main,keyboard
X	logical	avo,using_screen,found,update,delete_problem
X	logical	use_window1,do_save,swing_file_exists
X	character this_terminal*31,disk*31,root*255,main*50
X
X	record /pd_choice_type/ pull_choices
X
X	common /smg_info/ board_id,
X	1		keyboard,
X	1		window1,
X	1		window2,
X	1		window3,
X	1		pull_choices,
X	1		this_terminal,
X	1		set_term_buf,
X	1		width,
X	1		avo,
X	1		old_rend,
X	1		disk,
X	1		len_disk,
X	1		root,
X	1		main,
X	1		len_main,
X	1		cur_level,
X	1		cur_line,
X	1		top_line,
X	1		bottom_line,
X	1		using_screen,
X	1		use_window1,
X	1		update,
X	1		found,
X	1		delete_problem,
X	1		do_save,
X	1		swing_file_exists
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record8: Read/End_Of_File=EOF8 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record8
$EOF8: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X	Options    /Extend_Source
X	subroutine add_node(new_dir,parent)
X	Implicit   NONE
X
X	include    'swing.cmn/List'
X
X	character new_dir*42,spec*255
X	integer   parent,len,new_node,free_node,ii,jj
X	logical   greater
X
X	call str$trim(new_dir,new_dir,len)
X
X	spec=node(parent).spec(1:node(parent).length)//new_dir(1:len)//'.DIR;1'
X
X	new_node=free_node()
X
X	call file_to_dir(spec,
X	1		node(new_node).spec,
X	1		node(new_node).length,
X	1		node(new_node).name)
X
X	if (node(parent).child.eq.0) then
X	 node(parent).child=new_node
X
X	else
X	 ii=node(parent).child
X
X	 if (node(new_node).name.lt.node(ii).name) then
X	  node(new_node).sister=node(parent).child
X	  node(parent).child=new_node
X	 else
X	  greater=.true.
X
X	  do while (greater)
X
X	   if (node(ii).sister.eq.0) then
X	    node(ii).sister=new_node
X	    greater=.false.
X	   else
X	    jj=ii
X	    ii=node(ii).sister
X
X	    if (node(new_node).name.lt.node(ii).name) then
X	     node(jj).sister=new_node
X	     node(new_node).sister=ii
X	     greater=.false.
X	    end if
X
X	   end if	! node(ii).sister.eq.0
X	  end do	! while (greater)
X	 end if		! node(new_node).name.lt.node(ii).name
X	end if		! node(parent).child.eq.0
X
X	return
X	end
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record9: Read/End_Of_File=EOF9 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record9
$EOF9: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X	Options	/Extend_Source
X	subroutine add_node_to_display(num)
X	Implicit   NONE
X
X	include    '($smgdef)/List'
X	include    'swing.cmn/List'
X
X	integer    column,num,level
X
X	node(num).rend=smg$m_reverse
X
X	level=node(num).level
X	column=level*17+1
X	line=node(num).line
X
X	call smg$put_chars(window2,node(num).name,line,column,,node(num).rend)
X	call smg$draw_line(window2,line,column-3,line,column-1)
X
X	if (level.eq.last_level) then
X	 call smg$draw_line(window2,line-1,column-3,line,column-3)
X	else if (level.eq.last_level+1) then
X	 call smg$draw_line(window2,line,column-5,line,column-2)
X	else if (level.lt.last_level) then
X	 call smg$draw_line(window2,last_line(level),column-3,line,column-3)
X	end if
X
X	if (.not.found.and.root.eq.node(num).spec) then
X	 found=.true.
X	 cur_line=line
X	 cur_level=level
X	end if
X
X	last_level=level
X	last_line(level)=line
X
X	return
X	end
$ Name=File'nF
$ Write SYS$Output "creating ",Name
$ Open/Write Out 'Name
$ Open/Read In VMS_SHAR_DUMMY.DUMMY
$Next_Record10: Read/End_Of_File=EOF10 In Record
$ Write Out F$Extract(1,255,Record)
$ Goto Next_Record10
$EOF10: Close Out
$ Close In
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'Name
$ Success=F$Element(Check_Sum'nF.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)
$ Write SYS$ERROR "Checking CHECKSUM. ''Success'"
$ nF=nF+1
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X	Options	/Extend_Source
X	subroutine adjust_node_pointers
X	Implicit NONE
X
X	include 'swing.cmn/List'
X
X	integer ll,jj,ptr(0:7)
X
X	do jj=0,MAX_LEVELS
X	 ptr(jj)=0
X	 do ll=1,MAX_LINES
X	  node_pointer(jj,ll)=0
X	 end do
X	end do
X
X	ll=1	! LINE
X	ptr(0)=1
X
X	node_pointer(0,ll)=1
X	ptr(1)=node(ptr(0)).child
X
X	do while (ptr(1).ne.0)
X	 node_pointer(1,ll)=ptr(1)
X	 node(ptr(1)).line=ll
X	 node(ptr(1)).level=1
X	 ptr(2)=node(ptr(1)).child
X
X	 do while (ptr(2).ne.0)
X	  node_pointer(2,ll)=ptr(2)
X	  node(ptr(2)).line=ll
X	  node(ptr(2)).level=2
X	  ptr(3)=node(ptr(2)).child
X
X	  do while (ptr(3).ne.0)
X	   node_pointer(3,ll)=ptr(3)
X	   node(ptr(3)).line=ll
X	   node(ptr(3)).level=3
X	   ptr(4)=node(ptr(3)).child
X
X	   do while (ptr(4).ne.0)
X	    node_pointer(4,ll)=ptr(4)
X	    node(ptr(4)).line=ll
X	    node(ptr(4)).level=4
X	    ptr(5)=node(ptr(4)).child
X
X	    do while (ptr(5).ne.0)
X	     node_pointer(5,ll)=ptr(5)
X	     node(ptr(5)).line=ll
X	     node(ptr(5)).level=5
X	     ptr(6)=node(ptr(5)).child
X
X	     do while (ptr(6).ne.0)
X	      node_pointer(6,ll)=ptr(6)
X	      node(ptr(6)).line=ll
X	      node(ptr(6)).level=6
X	      ptr(7)=node(ptr(6)).child
X
X	      do while (ptr(7).ne.0)
X	       node_pointer(7,ll)=ptr(7)
X	       node(ptr(7)).line=ll
X	       node(ptr(7)).level=7
X	       ptr(7)=node(ptr(7)).sister
X
X	       if (ptr(7).ne.0) Call One_More_Line(MAX_LINES,ll)
X	      end do
X
X	      ptr(6)=node(ptr(6)).sister
X	      if (ptr(6).ne.0) Call One_More_Line(MAX_LINES,ll)
X	     end do
X
X	     ptr(5)=node(ptr(5)).sister
X	     if (ptr(5).ne.0) Call One_More_Line(MAX_LINES,ll)
X	    end do
X
X	    ptr(4)=node(ptr(4)).sister
X	    if (ptr(4).ne.0) Call One_More_Line(MAX_LINES,ll)
X	   end do
X
X	   ptr(3)=node(ptr(3)).sister
X	   if (ptr(3).ne.0) Call One_More_Line(MAX_LINES,ll)
X	  end do
X
X	  ptr(2)=node(ptr(2)).sister
X	  if (ptr(2).ne.0) Call One_More_Line(MAX_LINES,ll)
X	 end do
X
X	 ptr(1)=node(ptr(1)).sister
X	 if (ptr(1).ne.0) Call One_More_Line(MAX_LINES,ll)
X	end do
X
X	lowest_level=0
X	do jj=1,num_nodes
X	 if (node(jj).level.gt.lowest_level) lowest_level=node(jj).level
X	end do
X
X	if (lowest_level.gt.7) call print_message
X	1	('Directory nesting is to deep',1)
X
X	num_lines=ll
X
X	return
X	end