Article 109253 of comp.os.vms:
In article <96Sep27.135600gmt+0100.23046@firewall.bang-olufsen.dk>, "Hans-Peter Harpoeth" <hph@bang-olufsen.dk> writes:
> Hello
> 
>   Is there a line editor I can use within a DCL command procedure, to let
>   the user _edit_ the content of a string symbol?
> 
>   What I want is a simple way to let a user edit the content of a symbol,
>   where I (the command procedure) supply the default content of the symbol.

Here's some local code (which I never use, never having had the need) 
written by a former colleague who I'm sure won't mind my posting it.
All disclaimers apply.


--
Phillip Helbig          email ................. st2f304@hsvax1.hs.uni-hamburg.de
Hamburger Sternwarte    Tel. .................................. +49 40 7252 4110
Gojenbergsweg 112       Fax ................................... +49 40 7252 4198
D-21029 Hamburg         http://www.hs.uni-hamburg.de/english/persons/helbig.html

My old email address is still valid; the present one should be more robust.
I don't speak for the Hamburg Observatory; the Observatory doesn't speak for me.

===============================================================================

	PROGRAM EDTSYMBOL

C	Program is used to edit a symbol in the local or
C	global symbol-table.
C	Call with EDTSYMBOL symbolname
C
C	Written by Lars Nieser, Version of Feb. 19th 1991

	CHARACTER wert*255, args*255, prompt*255
	INTEGER   table, newtable
	INTEGER*2 arglen, wertlen, promptlen

C	Get command-line
	iret = LIB$GET_FOREIGN( args,,arglen )

C	If empty terminate program
	IF (arglen .eq. 0) GOTO 100

C	Check if symbol-table is given
	IF ( INDEX( args, '/GLO' ) .ne. 0 ) newtable = 2
	IF ( INDEX( args, '/LOC' ) .ne. 0 ) newtable = 1

C	Extract PROMT
	IF ( INDEX( args, '/PRO' ) .ne. 0 ) THEN
	  i = INDEX( args, '/PRO' )
 	  DO WHILE ( args(i:i) .ne. '"' )
	    i = i + 1
	  ENDDO
	  j = i + 1
	  DO WHILE ( args(j:j) .ne. '"' )
	    j = j + 1
	  ENDDO
	  prompt = args(i+1:j-1)
	  promptlen = j-i-1
C	  PRINT*, prompt(1:promptlen)
	ENDIF

	arglen = INDEX( args, ' ' )

C	Get the desired symbol
	iret = LIB$GET_SYMBOL(args(1:arglen),wert,wertlen,table)

C	Terminate if symbol not found
	IF (iret .ne. 1) GOTO 110
	
C	PRINT*, iret, wert(1:wertlen), wertlen, table
C	PRINT *

C	open virtual keyboard
	ikbd = 1
	iret = SMG$CREATE_VIRTUAL_KEYBOARD(ikbd)

C	edit symbol-value
	iret = SMG$READ_STRING(ikbd, wert,prompt(1:promptlen),
     1                         255,,,,wertlen,,,wert(1:wertlen))

C	PRINT*, iret, wert(1:wertlen), wertlen
C	PRINT*

C	set symbol to new value
	IF (newtable .eq. 0) newtable = table
	iret = LIB$SET_SYMBOL(args(1:arglen), wert(1:wertlen), newtable )

C	PRINT *, iret
	GOTO 200
 
 100	PRINT*, 'Run with'
	PRINT*, '  EDTSYMBOL symbolname [/GLOBAL|/LOCAL]' //
     1          ' [/PROMPT="prompt"]'
	PRINT*
	PRINT*, 'If /GLOBAL (/LOCAL) is specified, the edited symbol will'
	PRINT*, 'be written to the global (local) symbol-table.'
	PRINT*, 'In any case, EDTSYMBOL will first scan the local symbol-'
	PRINT*, 'table for the symbol.'
	PRINT*
	GOTO 200

 110	PRINT*, 'The symbol ' // args(1:arglen) // ' could not be found in'
	PRINT*, 'the local and global symbol-table. Please check spelling.'
	GOTO 200

 200	END



