SUBROUTINE FILL_ITMLST(itmlst,code,buf,buflen,retadr)
C
C SUBROUTINE FILL_ITMLST(itmlst,code[,buf,[buflen[,retadr]]])
C-----------------------------------------
C
C Author :- J.Huber 30-MAR-1994
C
C=========================================
C
C Purpose :
Fill values in itemlist3
C Inputs : itmlst= address of an itmlst structure
C code = item code
C buf = address of item buffer
C buflen = length of buffer
C retadr = address of return length
C Outputs :
C
C ATTENTION: the buf argument is declared as BYTE. In Fortran use %REF(string)
C to pass a CHARACTER argument string !
C
C This is the Fortran-77 version, using Cray-pointers !
C See FILL_ITMLST.F90 for a Fortran-90 version using F90 pointers.
C=========================================
C +
C Declarations.
C -
IMPLICIT NONE
! STRUCTURE /ILE3/
! INTEGER*2 ILE3$W_LENGTH ! Length of buffer in bytes
! INTEGER*2 ILE3$W_CODE ! Item code value
! INTEGER*4 ILE3$PS_BUFADDR ! Buffer address
! INTEGER*4 ILE3$PS_RETLEN_ADDR ! Address of word for returned length
! END STRUCTURE ! ILE3
INCLUDE '($ILEDEF)'
RECORD /ILE3/ itmlst
INTEGER*2 code
BYTE buf(*)
INTEGER*2 buflen
INTEGER retadr
! Declare pointer to argument list
POINTER (ARGLIST_P, ARGLIST_ENTRY)
INTEGER*4 ARGLIST_ENTRY
C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
C Entry Point.
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
itmlst.ILE3$W_CODE = code
itmlst.ILE3$W_LENGTH=0
itmlst.ILE3$PS_BUFADDR=0
itmlst.ILE3$PS_RETLEN_ADDR=0
IF (iargcount().GT.2) THEN
itmlst.ILE3$PS_BUFADDR=%LOC(buf)
itmlst.ILE3$W_LENGTH=4
IF (iargcount().GT.3) THEN
ARGLIST_P = IARGPTR()+4*SIZEOF(ARGLIST_P) !point to argument buflen
IF (arglist_entry.NE.0) THEN !argument present
itmlst.ILE3$W_LENGTH=buflen
ENDIF
IF (iargcount().GT.4) THEN
itmlst.ILE3$PS_RETLEN_ADDR=%LOC(retadr)
ENDIF
ENDIF
ENDIF
RETURN
ENTRY end_itmlst(itmlst)
ITMLST.ILE3$W_CODE = code
ITMLST.ILE3$W_LENGTH=0
RETURN
END