[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference noted::hackers_v1

Title:-={ H A C K E R S }=-
Notice:Write locked - see NOTED::HACKERS
Moderator:DIEHRD::MORRIS
Created:Thu Feb 20 1986
Last Modified:Mon Aug 03 1992
Last Successful Update:Fri Jun 06 1997
Number of topics:680
Total number of notes:5456

617.0. "Record commands" by ENOUGH::HEAFEY () Wed Dec 02 1987 18:43

	I'm trying to record all commands entered within a process. I 
	don't want to have to turn on image accounting, just something
	quick and dirty. The following is what I've come up with. Any
	ideas/improvements greatly appreciated.

	Thanks in advance,
	Dave H.

$  SET NOVERIFY
$  SET NOON
$  ON CONTROL then CONTINUE
$  DELETE/NOLOG/BEFORE=-5-00 RECORD.RPT;*
$  OPEN/write out RECORD.RPT
$Get_command:
$  ON CONTROL then GOTO Get_command
$  SET NOVERIFY
$  INQUIRE/NOPUNC command "''F$ENVIRONMENT("PROMPT")"
$  WRITE out "''command'"
$  'command'
$  GOTO Get_command
T.RTitleUserPersonal
Name
DateLines
617.1DELNI::CANTORDave C.Thu Dec 03 1987 04:457
      How about
      
      $ SET HOST 0/LOG
      
      ?
      
      Dave C.
617.2RDGENG::MACKAYKitThu Dec 03 1987 08:2144
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)))
617.3TRY IT AND YOU'LL SEELEROUF::BLASSINFri Dec 04 1987 06:44128
    		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 "                 DO YOU WANT TO SHOW YOUR RECORDING SESSION"
$ 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="          PRESS ANY KEY TO CONTINUE SEEING THE RECORDING SESSION"  	
$	COUNT = 0
$ RETURN
$!
$!
$!
$ END_LOOP_1:
$ 	CLOSE SEE
$ 	WS "                         END OF RECORDING SESSION"
$ EXIT
    
617.4should we have set verify/out=filespec?VIDEO::OSMANtype video::user$7:[osman]eric.vt240Mon Dec 07 1987 13:507
I just had an idea.  Should DCL grow a switch, like this:

	$ set verify/out=filespec

That would allow a convenient way to do recording.

/Eric