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