	PROGRAM EDIT_GMENU
!+
! Program EDIT_GMENU is used to edit device specifications for GMENU
!-
	CHARACTER*80 FNAME

!	Read old device data
	CALL GDREAD(FNAME,LFN)

!	Edit device data
	CALL MODMENU

!	Save device data
	CALL GDSAVE(fname(1:LFN))

	END

!+
! Subroutine MODMENU is modify GPLOT graphics devices data for GMENU
!-
	SUBROUTINE MODMENU
	IMPLICIT INTEGER (A-Z)
	INCLUDE '($SMGDEF)'
	INCLUDE '($DVIDEF)'
	INTEGER*2 NOPT,DEFOPT,N,NDEF
	DATA NDEF/1/
	CHARACTER*3 TEXT,ANS
	CHARACTER*27 TEXT_OUT,HEAD1,HEAD2,INSTRUCT*60,INSTRUCT2*60
	INCLUDE 'GPLOT_SRC:GKI.INC'
	INCLUDE 'GPLOT_SRC:GPCOM1.INC'
	RECORD /GDEVICE/GNULL
	INCLUDE 'SYS$LIBRARY:GKSDEFS.BND'
	CHARACTER*26 CHOICE(50)
	CHARACTER*8 OPTIONS(7)/'Exit','Add-Dev','Del-Dev',
	1			'Swap-Dev','Edit-Dev',
	2			'Edit ID','Quit'/

	GNULL.NAME = ' '
	GNULL.QUE = ' '
	GNULL.FORM = ' '
	GNULL.TYPE = 0
	GNULL.WKCAT = 0

!+
! Find the user terminal type.
!-
	ISTATUS = LIB$GETDVI(DVI$_TT_DECCRT2,,'SYS$COMMAND',IFCRT2,,)

!+
! Create and clear the PASTEBOARD. 
!-
	ISTATUS = SMG$CREATE_PASTEBOARD (P_ID)
	ISTATUS = SMG$ERASE_PASTEBOARD  (P_ID)
!+
! Create a virtual keyboard.
!-
	ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD (K_ID)
!+
! Create the main virtual display with a border.
!_
	NDROWS = (NUMDEV+1)/2 + 6
	NDCOLS = 75
	ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY
	1	(NDROWS, NDCOLS, D_ID, SMG$M_BORDER)
	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( D_ID,P_ID,2,2)
!+
! Display the menu header on the main virtual display.
!-
	NSEL = 0
	HEAD1 = 'Edit GPLOT Graphics Menu'
	CALL LIB$SYS_TRNLOG('GKS$VERSION',LVER,GKVER)
	WRITE(HEAD2,100) GKVER(1:LVER)
100	FORMAT('GKS Version ',A)

1	CONTINUE

! Display the Menu Header (this part is not changeable)
	IC1 = 0.5*(NDCOLS - JLEN(HEAD1))
	ISTATUS = SMG$PUT_CHARS (d_id, HEAD1,1,IC1,,SMG$M_BOLD)

	IC2 = 0.5*(NDCOLS - JLEN(HEAD2))
	ISTATUS = SMG$PUT_CHARS (d_id, HEAD2,2,IC2,,SMG$M_BOLD)
!+
! Create the Options Menu virtual display.
!-
	OPTROW = 1
	OPTCOL = NDCOLS - 2
	ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY
	1	(OPTROW, OPTCOL, IDOPT)
!+
! Paste the Options Menu virtual display at row 7, column 2 of PB.
!-
	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( IDOPT,P_ID,7,2)
!+
! Create the Device Menu virtual display.
!-
	devrow = NDROWS - optrow - 5
	devcol = NDCOLS - 2
	ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY
	1	(devrow, devcol, D_ID2)
!+
! Fill the Device menu with choices
!-
	CHOICE(1) = 'EXIT'
	DO J = 1, NDEV	! GPCOM1.INC --> NDEV
	    I = J + 1
	    CHOICE(I) = GDEV(J).NAME
	END DO
	NCHOICE = NUMDEV + 1
!+
! Display the Device menu, starting on row 2 of d-id2.
!-
	ISTAT = SMG$CREATE_MENU (d_id2, CHOICE,,
	1	    SMG$M_FIXED_FORMAT,2)
!+
! Paste the Device Menu on the Pasteboard
!-
	PDROW = 8
	PDCOL = 3
	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( D_ID2,P_ID,PDROW,PDCOL)
!+
! Create the Options menu starting at row 1 of IDOPT virtual display
!-
	ISTAT = SMG$CREATE_MENU (IDOPT, Options,SMG$K_HORIZONTAL,
	1	    ,1,SMG$M_NORMAL)

!+
! Display instructions and the Options Menu
!-
	DEFOPT = 1	! Initial Default option is 1 (EXIT)
2	CONTINUE

! Display the Company ID portion of the Menu header (changeable)
	IC3 = 0.5*(NDCOLS - JLEN(COMPID))
	ISTATUS = SMG$PUT_CHARS (d_id, COMPID,3,IC3,,SMG$M_BOLD)

!	Create the instructions for the options menu
	IF(IFCRT2) THEN
	    INSTRUCT = 
	1   'Use arrow keys to select option, then press ENTER'
	ELSE
	    INSTRUCT =
	1   'Use TAB, BS, LF keys to select option, then press ENTER'
	END IF
	INSTRUCT2 = 'Press Help key to get device information'

!	Write the instructions for the options menu.

	LI4 = JLEN(INSTRUCT)
	IC4 = 0.5*(NDCOLS - LI4)
D	WRITE(8,*) 'L4 MESSAGE = <',INSTRUCT(1:LI4),'>'
	ISTATUS = SMG$PUT_CHARS (d_id, INSTRUCT(1:LI4),4,IC4,,
	1                        SMG$M_REVERSE)

	IC5 = 0.5*(NDCOLS - JLEN(INSTRUCT2))
	ISTATUS = SMG$PUT_CHARS (d_id, INSTRUCT2,5,IC5,,SMG$M_REVERSE)

! Select option from options menu
	ISTAT =SMG$SELECT_FROM_MENU(K_ID,IDOPT,NOPT,DEFOPT,,
	1			    'SYS$HELP:GPLOT.HLB')
	defopt = nopt
D	ISTAT = SMG$PRINT_PASTEBOARD(P_ID,'NPB',1,'LETTER')
!+
! Act on selected option
!-
	IF(NOPT .EQ. 1) THEN		! Exit
	  ISTAT = SMG$ERASE_PASTEBOARD(P_ID)
	  Return
	ELSE IF (NOPT .EQ. 2) THEN	! Add device
D	  WRITE(8,*) 'Add-Device'
	  IF(NUMDEV .LT. NDEV) THEN
	    NUMDEV = NUMDEV + 1
	    INSTRUCT = 'Add Device'
	    WRITE(INSTRUCT2,120) NUMDEV,NDEV
120	    FORMAT(1X,I2,'/',I2,' devices used/dimensioned')
	  ELSE
C	    ISTAT = SMG$ERASE_LINE(d_id,5,1)
C	    INSTRUCT2 = 
C	1   'Unable to add device, increase NDEV in GPCOM1.INC'
C	    IC5 = 0.5*(NDCOLS - JLEN(INSTRUCT))
C	    ISTATUS = SMG$PUT_CHARS (d_id, 
C	1		INSTRUCT2(:IC5),5,IC5,,SMG$M_BLINK)
C	    ISTAT = SMG$ERASE_LINE(d_id,6,1)
C	    STATUS = SMG$READ_KEYSTROKE(K_ID,TWORD,
C	1	 'Press Return to acknowledge.',,
C	2	 D_ID)
	    GOTO 2
	  END IF
	  GDEV(NUMDEV) = GNULL
	ELSE IF (NOPT .EQ. 3) THEN	! Delete device
	  INSTRUCT = 'Select device to delete, then press Enter'
	ELSE IF (NOPT .EQ. 4) THEN	! Swap devices
	  LASTDEV=0
	  INSTRUCT = 'Select device to swap, then press Enter.'
	ELSE IF (NOPT .EQ. 5) THEN	! EDIT device
	  INSTRUCT = 'Select device to edit, then press Enter'
	ELSE IF (NOPT .EQ. 6) THEN	! Edit Company ID
	  ISTAT = SMG$ERASE_LINE(d_id,3,1)
	  ISTAT = SMG$ERASE_LINE(d_id,4,1)
	  ISTAT = SMG$ERASE_LINE(d_id,5,1)
	  ISTAT = SMG$DELETE_VIRTUAL_DISPLAY(D_ID2,P_ID)
	  CALL EDIT_ID(COMPID,P_ID,K_ID,
	1                  DEVROW,DEVCOL,PDROW,PDCOL)
D	WRITE(8,*) 'Returned COMPID=',COMPID
	  GOTO 2
	ELSE IF (NOPT .EQ. 7) THEN
D	  WRITE(8,*) 'QUIT'
C	  STATUS = SMG$READ_KEYSTROKE(K_ID,TWORD,
C	1	 'Are you sure you want to Quit?',,
C	2	 D_ID)
C	  IF(TWORD .EQ. 89 .OR. TWORD .EQ. 121) THEN
	    ISTAT = SMG$ERASE_PASTEBOARD(P_ID)
	    WRITE(6,*) 'No changes to GPLOT device file.'
	    CALL EXIT
C	  ELSE
C	    DEFOPT = 1
C	    GOTO 2
C	  END IF
	ELSE
	  ISTAT = SMG$ERASE_PASTEBOARD(P_ID)
	  STOP 'INVALID OPTION IN MODMENU'
	END IF

3	CONTINUE
!+
! Rewrite two instruction lines before displaying Device Menu
!-
	ISTAT = SMG$ERASE_LINE(d_id,4,1)
	LI4 = JLEN(INSTRUCT)
	IC4 = 0.5*(NDCOLS - LI4)
	ISTATUS = SMG$PUT_CHARS (d_id, INSTRUCT(1:LI4),4,IC4,,
	1                        SMG$M_REVERSE)
D	WRITE(8,*) 'L4 MESSAGE = <',INSTRUCT(1:LI4),'>'

	ISTAT = SMG$ERASE_LINE(d_id,5,1)
	LI5 = JLEN(INSTRUCT2)
	ic5 = 0.5*(NDCOLS - LI5)
	ISTATUS = SMG$PUT_CHARS (d_id, INSTRUCT2(1:LI5),5,IC5,,
	1                        SMG$M_REVERSE)
D	WRITE(8,*) 'L5 MESSAGE = <',INSTRUCT2(1:LI5),'>'
!+
! Fill the Device menu with choices
!-
	CHOICE(1) = 'EXIT'
	DO J = 1, NDEV	! GPCOM1.INC-->NDEV
	    I = J + 1
	    CHOICE(I) = GDEV(J).NAME
	END DO
	NCHOICE = NUMDEV + 1
!+
! Display the Device menu, starting on row 2.
!-
	ISTAT = SMG$CREATE_MENU (d_id2, CHOICE,,
	1	    SMG$M_FIXED_FORMAT,2)
!+
! Select Device to act on
!-
	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( D_ID2,P_ID,PDROW,PDCOL)

	IF (NOPT .EQ. 2) THEN
	  SDEV = NUMDEV
	  NDEF = 1
	ELSE
	  ISTAT =SMG$SELECT_FROM_MENU(K_ID,d_id2,N,NDEF,,
	1			    'SYS$HELP:GPLOT.HLB')
D	ISTAT = SMG$PRINT_PASTEBOARD(P_ID,'NPB',1,'LETTER')
	  ndef = n
	  IF(N .EQ. 1) THEN
	    ISTAT = SMG$ERASE_LINE(d_id,4,1)
	    INSTRUCT = 'Select an Option.'
	    LI4 = JLEN(INSTRUCT)
	    IC4 = 0.5*(NDCOLS - LI4)
	    ISTATUS = SMG$PUT_CHARS (d_id, INSTRUCT(1:LI4),4,IC4,,
	1                            SMG$M_REVERSE)
D	WRITE(8,*) 'L4 MESSAGE = <',INSTRUCT(1:LI4),'>'
	    goto 2
	  END IF
	  sdev = n - 1
	END IF
        if      (nopt .eq. 3) then	! Delete device
	  ndel = sdev
D	  write(8,*) 'Deleting device '//gdev(ndel).name
D	  WRITE(8,*) 'NDEL,NUMDEV=',NDEL,NUMDEV
	  if(ndel .lt. ndev) then
	    do jdev = ndel,ndev-1
	      gdev(jdev) = gdev(jdev+1)
	    end do
	  end if
	  DO JDEV = NUMDEV,NDEV
	    GDEV(NUMDEV) = GNULL
	  END DO
	  numdev = numdev - 1
	  STATUS = SMG$ERASE_DISPLAY(D_ID2)
	  ndef = 1
	  goto 3
	else if(nopt .eq. 4) then	! Swap devices
	  if(lastdev .eq. 0) then
	    lastdev = sdev
	    if(sdev .lt. numdev) ndef = sdev + 1
D	WRITE(8,*) 'First swap device = ',gdev(sdev).name
	    INSTRUCT = 'Selected device will be swapped with '
	1              //gdev(lastdev).name
	  else
	    gdout = gdev(lastdev)
	    gdev(lastdev) = gdev(sdev)
	    gdev(sdev) = gdout
	    STATUS = STR$TRIM(GDEV(SDEV).NAME,GDEV(SDEV).NAME,LN)
D	   write(8,*) 'Swapped devices '//gdev(sdev).name(1:LN)//' and '
D	1                               //gdev(lastdev).name
	    INSTRUCT = 'Select EXIT or a device to swap.'
D	WRITE(8,*) 'L4 MESSAGE = <',INSTRUCT(1:LI4),'>'
	    lastdev = 0
	    ndef = 1
	  end if
	  goto 3

	else if(nopt .eq. 2 .or. nopt .eq. 5) then	! Edit device
	  ISTAT = SMG$DELETE_VIRTUAL_DISPLAY(D_ID2,P_ID)
	  CALL EDIT_DEVICE(GDEV(sdev),P_ID,K_ID,
	1                  DEVROW,DEVCOL,PDROW,PDCOL)
C	  IF (NOPT .EQ. 2) NOPT = 5
	  IF (NOPT .EQ. 2) THEN
	    GOTO 2	! After add, go back to options menu
	  ELSE
	    GOTO 3	! Allow selecting another device
	  END IF
	END IF

! Exit/return to Main Program
	ISTAT = SMG$FLUSH_BUFFER(P_ID)

	RETURN

	END

	SUBROUTINE GDSAVE(fname)
	character*(*) fname
	CHARACTER*80 FOUT,RESULT
	INTEGER CONTEXT,NTRY
	INCLUDE 'GPLOT_SRC:GPCOM1.INC'
	DATA NTRY/0/
		
	FOUT = FNAME(1:)
1	OPEN(UNIT=12,FILE=FOUT,STATUS='NEW'
	1,FORM='UNFORMATTED',ERR=90)
	status = lib$find_file(FOUT,result,context)
	status = str$trim(FOUT,RESULT,lfn)
	WRITE(12) COMPID
	DO I= 1,NUMDEV
	  WRITE(12) GDEV(I)
	END DO
	CLOSE(UNIT=12)
	WRITE(6,*) 'New GMENU data file: ',fout(1:LFN)
	RETURN

90	LDIR = INDEX(FOUT(1:),']')
D	WRITE(6,*) 'No write access to directory:',fout(1:ldir)
	IF(LDIR .GT. 1 .AND. NTRY .LT. 1) THEN
	  L1 = LDIR + 1
	  FOUT(1:) = 'SYS$LOGIN:'//FOUT(L1:)
	  NTRY = NTRY + 1
	  GOTO 1
	ELSE
	  WRITE(6,*) 'ERROR WRITING FILE ',FOUT(1:)
	  RETURN
	END IF

	END

	SUBROUTINE EDIT_ID(COMPID,P_ID,K_ID,DEVROW,DEVCOL,PROW,PCOL)
	IMPLICIT INTEGER (A-Z)
	CHARACTER*(*) COMPID
	INCLUDE 'SYS$LIBRARY:GKSDEFS.BND'
	INCLUDE '($SMGDEF)'
	INCLUDE '($TRMDEF)/LIST'
C	INCLUDE 'GPLOT_SRC:GPCOM1.INC'
	INTEGER*2 TWORD
	CHARACTER*80 COMPOUT
	CHARACTER TBUFF*5,CBUFF*2,CATMES*24
	DATA D_ID/0/

D	WRITE(8,*) '----------------- EDIT_ID --------------'

	STATUS = STR$TRIM(COMPID,COMPID,LID)
D	WRITE(8,*) 'Editing COMPID <'//COMPID(1:LID),'>'

	IF(D_ID .EQ. 0) THEN
	  STATUS = SMG$CREATE_VIRTUAL_DISPLAY
	1	(devrow, devcol, D_ID)
	END IF

	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( D_ID,P_ID,PROW,PCOL)

	STATUS = SMG$READ_COMPOSED_LINE(K_ID,,
	1			COMPOUT,
	2			'Menu ID ['//COMPID(:LID)//']: ',
	2			LID,D_ID,FLAGS,
	3			COMPID(1:LID),,
	4			RENDSET,RENDCOMP,TWORD)
	if( .not. status)  call lib$signal(%val(status))
D	WRITE(8,*) 'COMPID READ, LID=',LID
D	WRITE(8,*) 'New COMPID = <',COMPOUT(1:LID),'>'
	STATUS = STR$TRIM(COMPID,COMPOUT,LID)
	STATUS = SMG$PUT_LINE(D_ID,
	1          'New Menu_ID='//COMPID(1:LID),
	2	   1,SMG$M_BOLD)
D	ISTAT = SMG$PRINT_PASTEBOARD(P_ID,'NPB',1,'LETTER')

	RETURN
	END

	SUBROUTINE EDIT_DEVICE(GDEDIT,P_ID,K_ID,DEVROW,DEVCOL,PROW,PCOL)
	IMPLICIT INTEGER (A-Z)
	INCLUDE 'SYS$LIBRARY:GKSDEFS.BND'
	INCLUDE '($SMGDEF)'
	INCLUDE '($TRMDEF)/LIST'
	INCLUDE 'GPLOT_SRC:GPCOM1.INC'
	RECORD /GDEVICE/GDEDIT,GNULL
	INTEGER IW(200),ICAT(200)
	INTEGER*2 TWORD
	CHARACTER TBUFF*5,CBUFF*2,WSTYPE*30,CATMES*24
	DATA INITED/.FALSE./

	GNULL.NAME = ' '
	GNULL.QUE = ' '
	GNULL.FORM = ' '
	GNULL.TYPE = 0
	GNULL.WKCAT = 0

D	WRITE(8,*) '----------------- EDIT_DEVICE --------------'

	STATUS = STR$TRIM(GDEDIT.NAME,GDEDIT.NAME,LN)
D	WRITE(8,*) 'Editing device <'//GDEDIT.NAME(1:LN),'>'

	IF(D_ID .EQ. 0) THEN
	  STATUS = SMG$CREATE_VIRTUAL_DISPLAY
	1	(devrow, devcol, D_ID)
	END IF

	ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY
	1 ( D_ID,P_ID,PROW,PCOL)

	IF(.NOT. INITED) THEN
	  STATUS = SMG$PUT_LINE(D_ID,
	1          'Please wait while GKS is opened.',
	2	   1,SMG$M_BLINK)
	  STATUS = SMG$SET_CURSOR_REL(D_ID,-1,0)
	  CALL GOPKS(8)
	  CALL GQEWK(1,IERR,NTYPES,IW(I))
CD	  WRITE(8,*) 'Number of GKS Workstation types=',NTYPES
	  DO I=1,NTYPES
	    CALL GQEWK(I,IERR,NTYPES,IW(I))
	    ICAT(I) = -777
	    CALL GQWKCA(IW(I),IERR,ICAT(I))
CD	    WRITE(8,*) I,IW(I),ICAT(I)
! ------------ Fix DEC GKS Bug --------------
	    IF( IW(I) .EQ.  41 .OR. 
	1       IW(I) .EQ. 211 .OR. 
	2       IW(I) .EQ. 213     ) THEN
	      ICAT(I) = 2
	    ELSE IF (IW(I) .EQ. 210 .OR.
	1	     IW(I) .EQ. 212     ) THEN
	      ICAT(I) = 0
	    END IF
! ------------ End DEC GKS Bug Fix ----------
CD	    WRITE(8,*) I,IW(I),ICAT(I)
	  END DO
CD	WRITE(8,*) (IW(I),I=1,NTYPES)
	END IF
	STATUS = SMG$ERASE_LINE(D_ID)

2	STATUS = STR$TRIM(GDEDIT.NAME,GDEDIT.NAME,LN)
	STATUS = SMG$READ_COMPOSED_LINE(K_ID,,
	1				GDEDIT.NAME,'Device Name: ',
	2				LN,D_ID,FLAGS,
	3				GDEDIT.NAME(1:LN),,
	4				RENDSET,RENDCOMP,TWORD)
	if( .not. status)  call lib$signal(%val(status))
	WRITE(TBUFF,100) GDEDIT.TYPE
100	FORMAT(I5)
	STATUS = STR$TRIM(TBUFF,TBUFF,LT)
CD	WRITE(8,*) '1 TBUFF,GDEDIT.TYPE=',TBUFF(1:LT),', ',GDEDIT.TYPE
	STATUS = SMG$READ_COMPOSED_LINE(K_ID,,
	1				TBUFF,'GKS Device type: ',
	2				LT,D_ID,FLAGS,
	3				TBUFF(1:LT),,
	4				RENDSET,RENDCOMP,TWORD)
	if( .not. status)  call lib$signal(%val(status))
	READ(TBUFF,100) GDEDIT.TYPE
CD	WRITE(8,*) '2 TBUFF,GDEDIT.TYPE=',TBUFF(1:LT),', ',GDEDIT.TYPE
	DO I=1,NTYPES
	  IF(GDEDIT.TYPE .EQ. IW(I)) GOTO 3
	END DO
	STATUS = SMG$PUT_LINE(D_ID,'INVALID TYPE: '//TBUFF(1:LT))
	GOTO 2

3	CONTINUE
	CATMES(1:) = 'Workstation Category is'
	IF(ICAT(I) .EQ. 0) THEN
	  WSTYPE(1:) = 'OUTPUT'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	ELSE IF (ICAT(I) .EQ. 1) THEN
	  WSTYPE(1:) = 'INPUT'
	  GOTO 4
	ELSE IF (ICAT(I) .EQ. 2) THEN
	  WSTYPE(1:) = 'OUT/IN'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	  GOTO 4
	ELSE IF (ICAT(I) .EQ. 3) THEN
	  WSTYPE(1:) = 'Workstation Independent Segment Storage'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	  GOTO 4
	ELSE IF (ICAT(I) .EQ. 4) THEN
	  WSTYPE(1:) = 'Metafile Output'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	  GOTO 4
	ELSE IF (ICAT(I) .EQ. 5) THEN
	  WSTYPE(1:) = 'Metafile Input'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	  GOTO 4
	ELSE
	  WSTYPE(1:) = 'invalid.'
	  STATUS = SMG$PUT_LINE(D_ID,CATMES//WSTYPE)
	  GOTO 4
	END IF

	STATUS = STR$TRIM(GDEDIT.QUE,GDEDIT.QUE,LQ)
	STATUS = SMG$READ_COMPOSED_LINE(K_ID,,
	1				GDEDIT.QUE,'Print queue: ',
	2				LQ,D_ID,FLAGS,
	3				GDEDIT.QUE(1:LQ),,
	4				RENDSET,RENDCOMP,TWORD)
	if( .not. status)  call lib$signal(%val(status))
	STATUS = STR$TRIM(GDEDIT.QUE,GDEDIT.QUE,LQ)

	STATUS = STR$TRIM(GDEDIT.FORM,GDEDIT.FORM,LF)
	STATUS = SMG$READ_COMPOSED_LINE(K_ID,,
	1				GDEDIT.FORM,'Print form name: ',
	2				LF,D_ID,FLAGS,
	3				GDEDIT.FORM(1:LF),,
	4				RENDSET,RENDCOMP,TWORD)
	if( .not. status)  call lib$signal(%val(status))

4	CONTINUE
	STATUS = SMG$READ_KEYSTROKE(K_ID,TWORD,
	1	 'Do you want to see Help?',,
	2	 D_ID)
	IF(TWORD .EQ. 89 .OR. TWORD .EQ. 121) THEN
	  STATUS = SMG$PUT_HELP_TEXT(D_ID,K_ID,GDEDIT.NAME,
	1                 'SYS$HELP:GPLOT')
	  STATUS = SMG$PUT_LINE(D_ID,
	1          'To change Help text, edit file SYS$HELP:GPLOT.HLP,')
	  STATUS = SMG$PUT_LINE(D_ID,
	1          'then enter the command:')
	  STATUS = SMG$PUT_LINE(D_ID,' ')
	  STATUS = SMG$PUT_CHARS(D_ID,
	1          '$ LIBRARY SYS$HELP:GPLOT SYS$HELP:GPLOT')
	  STATUS = SMG$READ_KEYSTROKE(K_ID,TWORD,
	1	 ' ',,
	2	 D_ID)
	END IF

	STATUS = SMG$DELETE_VIRTUAL_DISPLAY(D_ID,P_ID)

	IF(.NOT. INITED) THEN
	  CALL GCLKS
	  INITED = .TRUE.
	END IF
D	WRITE(8,*) 'Finished editing device ',GDEDIT.NAME

	RETURN
	END
