[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