[mod.computers.vax] MODIFY

js@UW-JUNE.ARPA (Joe Meadows) (06/28/86)

	Heres a short utility for modifying the date/times associated
	with a file. It can modify the Creation, Revision, Expiration
	and Backup dates, as well as the revision count. I hope you
	can find freindly uses for it. Like, maybe take five months worth
	of work and make it look like you did it in two weeks... Or, uh,
	modify that program that was due last week ("But prof, look, I
	finished it last week, I uh, just had troubles printing it ..")
	Ooh, I guess I shouldn't be putting bad ideas into peoples minds..

	I personnaly use it to pretty up directories sometimes.. 

	Well.. Anyway, it's a decent example of the power of QIO.

	Cheers.
	Joe Meadows Jr.	js@uw-june

$say:=write sys$output
$say "Creating modtime.for"
$create modtime.for
$deck
	program modtime
	! MODTIME Version 1.0 June 1st, 1985
	! Written  by Joe Meadows Jr.,  with thanks  to the
	! Fred Hutchinson Cancer Research Center for kindly
	! allowing  me to  use  their  computing  resources.
	!
	! If  you  have any  questions, comments, ideas, or
	! whatever, feel free to contact me via US Mail :
	!	Joe Meadows Jr.
	!	4841 268th Ave. N.E.
	!	Redmond Wa. 98052
	! or via phone : (206) 827-7296

	implicit integer (a-z)
	integer time(2)
	character buffer*80,file*252
	external lib$put_output

	call error(cli$get_value('File',file))
	if (cli$present('log')) routine=%loc(lib$put_output)
	if (cli$present('creation')) then
	 call error(cli$get_value('creation',buffer))
	 call error(sys$bintim(buffer,time))
	 I=change_creation(file,time,routine)
	end if
	if (cli$present('revision')) then
	 call error(cli$get_value('revision',buffer))
	 call error(sys$bintim(buffer,time))
	 I=change_revision(file,time,routine)
	end if
	if (cli$present('number')) then
	 call error(cli$get_value('number',buffer))
	 call str$trim(buffer,buffer,len)
	 call error(ots$cvt_ti_l(buffer(:len),time))
	 I=change_revnum(file,time,routine)
	end if
	if (cli$present('backup')) then
	 call error(cli$get_value('backup',buffer))
	 call error(sys$bintim(buffer,time))
	 I=change_backup(file,time,routine)
	end if
	if (cli$present('expiration')) then
	 call error(cli$get_value('expiration',buffer))
	 call error(sys$bintim(buffer,time))
	 I=change_expiration(file,time,routine)
	end if
	end
$eod
$say "Creating error.mar"
$create error.mar
$deck
	.title	error-exit
	.entry	error,0
	blbs	@4(ap),return
	$exit_s	code=@4(ap)
return:	ret
	.end
$eod
$say "Creating time.mar"
$create time.mar
$deck
	.TITLE Change_Times
;	Author	Joe Meadows
$FABDEF
$NAMDEF
FAB:	$FAB	NAM=NAM
NAM:	$NAM	ESA=ES,ESS=NAM$C_MAXRSS,RSA=RS,RSS=NAM$C_MAXRSS
DELFAB:	$FAB	FNA=RS,FNS=NAM$C_MAXRSS
ES:	.BLKB	NAM$C_MAXRSS
RS:	.BLKB	NAM$C_MAXRSS
ESD:	.LONG	0,ES
RSD:	.LONG	0,RS
$IODEF
$ATRDEF
$FIBDEF
FIB:	.BLKB	FIB$K_LENGTH
FIBD:	.LONG	FIB$K_LENGTH,FIB
DEVNAM:	.LONG	0,NAM+NAM$T_DVI+1
CHAN:	.WORD	0
ATR:	.LONG	0,buffer,0
buffer:	.BLKB	35
;
FILENAME=4
TIME=8
ROUTINE=12
;
	.ENTRY	CHANGE_CREATION,^M<R6,R7>
	MOVW	#ATR$S_CREDATE,ATR
	MOVW	#ATR$C_CREDATE,ATR+2
	BRB	START
	.ENTRY	CHANGE_REVISION,^M<R6,R7>
	MOVW	#ATR$S_REVDATE,ATR
	MOVW	#ATR$C_REVDATE,ATR+2
	BRB	START
	.ENTRY	CHANGE_REVNUM,^M<R6,R7>
	MOVW	#ATR$S_ASCDATES,ATR
	MOVW	#ATR$C_ASCDATES,ATR+2
	BRB	START
	.ENTRY	CHANGE_BACKUP,^M<R6,R7>
	MOVW	#ATR$S_BAKDATE,ATR
	MOVW	#ATR$C_BAKDATE,ATR+2
	BRB	START
	.ENTRY	CHANGE_EXPIRATION,^M<R6,R7>
	MOVW	#ATR$S_EXPDATE,ATR
	MOVW	#ATR$C_EXPDATE,ATR+2

START:	MOVQ	@FILENAME(AP),R6
	MOVB	R6,FAB+FAB$B_FNS
	MOVL	R7,FAB+FAB$L_FNA
	MOVQ	@TIME(AP),buffer

	$PARSE	FAB=FAB
	JSB	ERROR
	MOVZBL	NAM+NAM$T_DVI,DEVNAM
	$ASSIGN_S-
		DEVNAM=DEVNAM,CHAN=CHAN
	JSB	ERROR

LOOP:	$SEARCH	FAB=FAB
	CMPL	R0,#RMS$_PRV
	BEQL	LOOP
	JSB	ERROR
	MOVC3	#6,NAM+NAM$W_FID,FIB+FIB$W_FID
	CMPW	ATR+2,#ATR$C_ASCDATES
	BNEQ	CONT
	$QIO_S	CHAN=CHAN,FUNC=#IO$_ACCESS,P1=FIBD,P5=#ATR
	MOVC5	#0,buffer+15,#0,#<ATR$S_ASCDATES-15>,buffer+15
	MOVW	@TIME(AP),buffer
CONT:	$QIO_S	CHAN=CHAN,FUNC=#IO$_MODIFY,P1=FIBD,P5=#ATR
	JSB	ERROR
	TSTL	@ROUTINE(AP)
	BEQL	BLIP
	MOVZBL	NAM+NAM$B_RSL,RSD
	PUSHAL	RSD
	MOVL	@ROUTINE(AP),R6
	CALLS	#1,(R6)
BLIP:	BRW	LOOP

EXIT:	CMPL	R0,#RMS$_NMF
	BNEQ	BYE
	MOVL	#1,R0
BYE:	RET

ERROR:	BLBC	R0,EXIT
	RSB

	.END
$eod
$say "Creating modify.cld"
$create modify.cld
$deck
!************************************MODIFY*************************************
define verb MODIFY
   image EXE$DIR:MODTIME
   parameter P1 , label=FILE , prompt="File"
      value (required)
   qualifier CREATION
      value
   qualifier BACKUP
      value
   qualifier REVISION
      value
   qualifier NUMBER
      value
   qualifier EXPIRATION
      value
   qualifier LOG
$eod
$say "Compiling modtime.for"
$fortran modtime
$say "Compiling error.mar"
$macro error
$say "Compiling time.mar"
$macro time
$say "Linking modtime,error,time"
$link modtime,error,time
$say "Defining command MODIFY (modify.cld)"
$set command modify
$say "You need to define EXE$DIR to point to the where modtime is"