From:	MERC::"uunet!WKUVX1.BITNET!MacroMan" 16-JUN-1992 12:28:05.16
To:	MACRO32@WKUVX1.BITNET
CC:	
Subj:	Re: Can I get the creation date/time of the image I am running?

In article <1992Jun16.065743.2486@rp.CSIRO.AU>, etroup@robin.rp.csiro.au (Euan
 Troup, AT Parkes.) writes:
> Is it possible to determine the date and time at which a VMS executable image
> was linked from inside the running program? I would like to be able to run a
> program and have it display the link date/time as a version i.d. I don't seem
 to
> be able to find anything relevant in the manuals, although if someone could
> direct me to the right place I'd be grateful.

I use this routine in some of my code:

        .TITLE  READ_HEADER - Read Image Header
        .IDENT  /1-001/

; This subroutine returns the image identification and link time.
;
; Format:
;
;   status.wlc.v = READ_HEADER( ident.wt.ds [,time.wt.ds] )
;
; Parameters:
;
;   ident       The image identification text.
;
;   time        The image link time (text format).


;   Date        By              Comments
;  4/10/87      D.E. Greenwood  Originally written by John Miano, 24-June-1986 -

;                               obtained from April 87 DECUS L&T Sig Newsletter
        .LIBRARY        "SYS$LIBRARY:LIB"

        $DSCDEF
        $IHDDEF
        $IHIDEF
        $SSDEF

; Argument pointer offsets

        $OFFSET 4,POSITIVE,<IDENT,TIME>

        .PSECT READ_HEADER, RD, NOWRT, EXE, LONG
        .ENTRY READ_HEADER, ^M< R2, R3, R4, R5, R6, R7, R8, R11 >

        CMPL    (AP),#1                 ; Make sure that there is at least
        BGEQ    ENOUGH_ARGUMENTS        ;  one argument to this routine
        MOVL    #SS$_INSFARG, R0
        RET

ENOUGH_ARGUMENTS:

; Get the identification of the image.

        MOVL    @#CTL$GL_IMGHDRBF, R11  ; R11 - Address of image buffer
        MOVL    (R11), R6               ; R6  - Address of image header

        CVTWL   IHD$W_IMGIDOFF(R6), R7
        MOVAB   (R6)[R7], R7            ; R7 - Address of ID Block

        CVTBL   IHI$T_IMGID(R7),R0      ; Length of the ID string
        MOVL    IDENT(AP), R8
        MOVC5   R0, <IHI$T_IMGID+1>(R7), #32, -
                DSC$W_LENGTH(R8), @DSC$A_POINTER(R8)

        CMPL    (AP), #2
        BGEQ    RETURN_TIME
        MOVZBL  #1, R0
        RET

RETURN_TIME:

; Get the time the image was linked and convert it to ASCII

        $ASCTIM_S -
                TIMBUF=@TIME(AP), -
                TIMADR=IHI$Q_LINKTIME(R7)

        RET

        .END

I call it from Fortran as follows:
        CHARACTER*255   IMAGE_IDENT
        CHARACTER*23    LINK_DATE
        CALL READ_HEADER (IMAGE_IDENT, LINK_DATE)

You can add the image ident when you link your code, eg.
$!
$   LINK VGRAPH/LIB/INCLUDE=VGRAPH, -
        SYS$SYSTEM:SYS.STB/SEL, -
        SYS$INPUT/OPT
IDENT="V1.21"
SYS$SHARE:VAXCRTL/SHARE
$!

--

Ed Wilts, BC Systems Corp., 4000 Seymour Place, Victoria, B.C., Canada, V8X 4S8
EWilts@Galaxy.Gov.BC.CA   |   Ed.Wilts@BCSystems.Gov.BC.CA   |   (604) 389-3430
