[Info-vax] Notable VMS "feature"

gcornelius at charter.net gcornelius at charter.net
Sun Jan 24 15:12:32 EST 2016


VAXman- wrote:
>        PROGRAM MY_TERMINAL
>        IMPLICIT NONE
> 
>        INCLUDE '($DSCDEF)'
>        INCLUDE '($JPIDEF)'
>        INCLUDE '($STSDEF)'
>        INCLUDE '(LIB$ROUTINES)'
>        INCLUDE '(STR$ROUTINES)'
> 
>        INTEGER*4 STATUS
> 
>        RECORD  /DSCDEF1/ LOGICAL
> 
>        LOGICAL.DSC$W_MAXSTRLEN = 0
>        LOGICAL.DSC$B_DTYPE = DSC$K_DTYPE_T
>        LOGICAL.DSC$B_CLASS = DSC$K_CLASS_D
>        LOGICAL.DSC$A_POINTER = 0
> 
>        STATUS = STR$DUPL_CHAR(LOGICAL,254,%REF('X'))
>        IF (.NOT.(STATUS.AND.STS$M_SUCCESS)) THEN
>          CALL SYS$EXIT(%VAL(STATUS))
>        ENDIF
> 
>        STATUS = STR$APPEND(LOGICAL,%DESCR(':'))
>        IF (.NOT.(STATUS.AND.STS$M_SUCCESS)) THEN
>          CALL SYS$EXIT(%VAL(STATUS))
>        ENDIF
> 
>        STATUS = LIB$DELETE_LOGICAL(LOGICAL,)
>        CALL SYS$EXIT(%VAL(STATUS))
> 
>        END

Actually Fortran does descriptors pretty well all by itself:

! JUNK.FOR GFC 20160124 Oneshot
	character*255 u
	istat = LIB$SYS_FAOL('!254*X:',,u)
	if (istat.and.1.eq.1) istat=LIB$DELETE_LOGICAL(u,)
	call sys$exit(%val(istat))
	end

Not finding an equivalent to the following byte array
declarator/initializer, I used the $FAOL trick above
instead of it:

	byte u(255) /255*'X'/

The rest is of course stolen from you.

George



More information about the Info-vax mailing list