|  | Yes,  SET HOST/LOG 0 is very useful,  but then you have a lot of editting 
to get rid of some of the junk characters like null,  or escape sequences 
which don't come out too well when you are doing a hardcopy.
How could you extend .0 to take in the SYS$OUTPUT stream?  I would be 
interested in ideas.
What follows is my attempt to improve things for my own (ab)usage of the 
system:
$	status_process	=	'f$verify(0)'
$	on	control	then	continue
$	status_message	=	f$environment("message")
$	status_image	=	f$environment("verify_image")
$	set	message	/nofacility /notext /noidentification /noseverity
$!	allow P1 to spell out a logging_file
$	log_file	=	f$parse(p1, "sys$scratch:session.log;0") - ";0"
$	title		=	"Command Logging Session"
$	delete/nolog/before=0-5-00	'log_file';*
$	set	message		'status_message
$	open/write	logging_file	'log_file'
$	on	control	then	goto	get_command
$	set	noon
$	write	sys$output	""
$!	tell them how to escape
$	write	sys$output	"''title' started ... ""$LOGOUT"" to close."
$	write	sys$output	""
$get_command:
$	inquire/nopunc	command	"* ''f$environment("prompt")"
$	if	(f$length(f$edit(command, "collapse")) .eq. 0) then goto get_command
$! make sure that least two characters are spelt out to escape
$	if	(f$locate(command, " $LOGOUT") .eq. 1)	.and.	-
		(f$length(command) .gt. 2)	-
		then	goto	exit
$	write	logging_file	"$ ",f$edit(command, "trim")
$	'command'
$	goto	get_command
$exit:
$	close	logging_file
$	write	sys$output	""
$	write	sys$output	"... ''title' file ''log_file' closed."
$	write	sys$output	""
$	set	message		'status_message
$	exit	(%X10000001 + (0 * f$verify(status_process,  status_image)))
 | 
|  | 
    		HI all,
    I propose you a little procedure who record all the command you
    type.You can use any tools, but only the command which have call
    it is recording.
    All the instructions are include in top of the procedure
    
    	Enjoy.
    			Marc..
    
----------------------------------cut here ---------------------------------    
$!    
$!
$!
$!RECORD.COM		VERS 1.1
$!          ***************************************************
$!	    * Created on December 3, 1987 by 	MARC Blassin  *
$!	    *			QA 	VALBONE               *
$!	    ***************************************************
$! CREATE UNDER A IDEA OF DAVE H.			(HACKERS NOTE 617)
$!
$!	BEGIN RECORDING WITH '@RECORD NAME_YOU_WANTED_FOR_THE_SESSION'
$!	DURING THE SESSION YOU CAN CALL ANY TOOLS (LIKE ALLIN1,HELP,NCP...)
$!	BUT ONLY THE COMMAND WILL BE RECORDED .
$! 	AT ANY TIME YOU CAN STOP THE RECORDING WITH 'QUITR' OR 'CTRL/Y'
$!	
$!	YOU CAN ALSO STOP THE RECORDING FOR A TIME WITH 'STOPR'
$!	AND CONTINUE WITH 'CONTR'.DURING THIS TIME ALL WORK NORMALY.
$!
$!	AT THE END OF THE SESSION YOU CAN SEE IT IF YOU WANT. YOU ONLY
$!	HAVE TO TYPE '[RETURN]' OR 'Y+[RETURN]' AT THE PROMPT
$!
$!	THE 'R' BEFORE YOUR PROMPT MEAN THAT YOU ARE IN RECORDING SESSION
$!			ENJOY.
$!				MARC..		
$!
$!
$  	RS == "READ SYS$COMMAND"
$  	WS == "WRITE SYS$OUTPUT"
$  	SET NOVERIFY
$  	SET NOON
$!
$!
$!
$	IF P1 .EQS. "" THEN -
	RS P1/PROMPT="NAME OF THE SESSION > " 
$	P1 = P1 + ".RCD"
$!
$  	OPEN/WRITE RECORD 'P1'
$ GET_COMMAND:
$  	ON CONTROL_Y  THEN GOTO QUIT_RECORD
$  	SET NOVERIFY
$  	RS COMMAND/PROMPT="R''F$ENVIRONMENT("PROMPT")"
$  	COMMAND = F$EDIT(COMMAND,"UPCASE")
$  	IF COMMAND .EQS. "STOPR" THEN GOTO STOP_RECORD
$  	IF COMMAND .EQS. "QUITR" THEN GOTO QUIT_RECORD
$	IF COMMAND .EQS. "EX" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "EXI" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "EXIT" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "STO" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "STOP" THEN GOTO GET_COMMAND
$  	WRITE RECORD "''COMMAND'"
$  	DEFINE/NOLOG/USER_MODE SYS$INPUT SYS$COMMAND
$  	'COMMAND' 
$ GOTO GET_COMMAND
$!
$!
$!
$ STOP_RECORD:
$  	RS COMMAND/PROMPT="''F$ENVIRONMENT("PROMPT")"
$  	COMMAND = F$EDIT(COMMAND,"UPCASE")
$  	ON CONTROL_Y THEN GOTO QUIT_RECORD
$  	IF COMMAND .EQS. "QUITR" THEN GOTO QUIT_RECORD
$  	IF COMMAND .EQS. "CONTR" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "EX" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "EXI" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "EXIT" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "STO" THEN GOTO GET_COMMAND
$	IF COMMAND .EQS. "STOP" THEN GOTO GET_COMMAND
$	DEFINE/NOLOG/USER_MODE SYS$INPUT SYS$COMMAND
$	'COMMAND'
$ GOTO STOP_RECORD
$ EXIT 
$!
$!
$!
$!
$!
$!
$ QUIT_RECORD:
$ 	CLOSE RECORD
$	IF F$SEARCH("''F$DIR()'*.JOU") .NES. "" THEN -
		DELETE/NOLOG *.JOU.*
$ 	WS "                 [1;7mDO YOU WANT TO SHOW YOUR RECORDING SESSION[0m"
$ REASK:
$	RS ASK/PROMPT= "[Y] > "
$ 	ASK = F$EDIT(ASK,"UPCASE")
$	IF ASK .EQS. "" THEN GOTO SHOW_RECORD
$	IF ASK .EQS. "Y" THEN GOTO SHOW_RECORD
$	IF ASK .NES. "N" THEN GOTO REASK
$ EXIT
$!
$!
$!
$ SHOW_RECORD:
$ 	COUNT = 0
$ 	OPEN/READ SEE 'P1'
$ READ_LOOP:
$	READ/END_OF_FILE=END_LOOP_1 SEE SEELINE
$	COUNT = COUNT + 1
$	IF COUNT .GE. 19 THEN GOSUB PRESS_KEY
$	WS "''SEELINE'"
$ GOTO READ_LOOP
$!
$!
$!
$ PRESS_KEY:
$	RS KEY/PROMPT="          [1;7mPRESS ANY KEY TO CONTINUE SEEING THE RECORDING SESSION[0m"  	
$	COUNT = 0
$ RETURN
$!
$!
$!
$ END_LOOP_1:
$ 	CLOSE SEE
$ 	WS "                         [1;7mEND OF RECORDING SESSION[0m"
$ EXIT
    
 |