!=====================================================================+ ! GET_BROADCAST_CLASSES - Get Broadcast Classes | !=====================================================================+ ! Author: Harry Flowers ! ! This program defines a symbol BROADCAST_CLASSES that contains the ! current state of broadcast classes enabled and disabled. Just run ! this program before changing broadcast classes, then, to restore ! them, just: ! $ SET BROADCAST=('BROADCAST_CLASSES') ! ! OPTION TYPE = EXPLICIT ! ! Set up system services ! EXTERNAL LONG FUNCTION SYS$ASSIGN, & SYS$QIOW, & SYS$DASSGN, & LIB$SET_SYMBOL, & LIB$STOP ! %INCLUDE "$SSDEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET.TLB" %INCLUDE "$IODEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET.TLB" %INCLUDE "$BRKDEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET.TLB" ! DECLARE LONG STAT, IOSB(1%), CLASS_BITS(1%), BITBYTES DECLARE WORD CHAN, FUNC, BITCHK, BITSET DECLARE STRING CLASSES ! !====================================================================== MARGIN 80% ! Initialize some variables FUNC = IO$_SENSEMODE + IO$M_BRDCST BITBYTES = 8% CLASSES = "" ! ! Assign a channel to this terminal STAT = SYS$ASSIGN("TT:",CHAN BY REF,,) IF (STAT AND 1%)=0% THEN CALL LIB$STOP(STAT BY VALUE) \ END IF ! ! Request the broadcast classes STAT = SYS$QIOW(,CHAN BY VALUE,FUNC BY VALUE,IOSB(0%) BY REF,,, & CLASS_BITS(0%) BY REF,BITBYTES BY VALUE,,,,) IF (STAT AND 1%)=0% THEN CALL LIB$STOP(STAT BY VALUE) \ END IF ! ! Deassign the channel to this terminal STAT = SYS$DASSGN(CHAN BY VALUE) IF (STAT AND 1%)=0% THEN CALL LIB$STOP(STAT BY VALUE) \ END IF ! ! Translate the bits to something usable by DCL ! ! First, check for all classes enabled IF CLASS_BITS(0%) = 0% AND CLASS_BITS(1%) = 0% THEN CLASSES = "ALL" GOTO SET_SYMBOL END IF ! ! Second, check for all classes disabled IF CLASS_BITS(0%) = -1% AND CLASS_BITS(1%) = -1% THEN CLASSES = "NONE" GOTO SET_SYMBOL END IF ! ! Finally, go by each class FOR BITCHK = 0% TO 63% IF BITCHK = 31% ! Stupid implementation THEN BITSET = (CLASS_BITS(0%) < 0%) ! of integers doesn't ELSE IF BITCHK = 63% ! allow full range of THEN BITSET = (CLASS_BITS(1%) < 0%) ! values, thus this ELSE IF BITCHK > 31% ! horrible kludge! THEN BITSET = ((CLASS_BITS(1%) AND 2%**(BITCHK-32%)) <> 0%) ELSE BITSET = ((CLASS_BITS(0%) AND 2%**BITCHK) <> 0%) END IF END IF END IF SELECT BITCHK CASE BRK$C_GENERAL IF BITSET THEN CLASSES = CLASSES + "NOGENERAL," ELSE CLASSES = CLASSES + "GENERAL," END IF CASE BRK$C_PHONE IF BITSET THEN CLASSES = CLASSES + "NOPHONE," ELSE CLASSES = CLASSES + "PHONE," END IF CASE BRK$C_MAIL IF BITSET THEN CLASSES = CLASSES + "NOMAIL," ELSE CLASSES = CLASSES + "MAIL," END IF CASE BRK$C_QUEUE IF BITSET THEN CLASSES = CLASSES + "NOQUEUE," ELSE CLASSES = CLASSES + "QUEUE," END IF CASE BRK$C_SHUTDOWN IF BITSET THEN CLASSES = CLASSES + "NOSHUTDOWN," ELSE CLASSES = CLASSES + "SHUTDOWN," END IF CASE BRK$C_URGENT IF BITSET THEN CLASSES = CLASSES + "NOURGENT," ELSE CLASSES = CLASSES + "URGENT," END IF CASE BRK$C_DCL IF BITSET THEN CLASSES = CLASSES + "NODCL," ELSE CLASSES = CLASSES + "DCL," END IF CASE BRK$C_OPCOM IF BITSET THEN CLASSES = CLASSES + "NOOPCOM," ELSE CLASSES = CLASSES + "OPCOM," END IF CASE BRK$C_USER1 IF BITSET THEN CLASSES = CLASSES + "NOUSER1," ELSE CLASSES = CLASSES + "USER1," END IF CASE BRK$C_USER2 IF BITSET THEN CLASSES = CLASSES + "NOUSER2," ELSE CLASSES = CLASSES + "USER2," END IF CASE BRK$C_USER3 IF BITSET THEN CLASSES = CLASSES + "NOUSER3," ELSE CLASSES = CLASSES + "USER3," END IF CASE BRK$C_USER4 IF BITSET THEN CLASSES = CLASSES + "NOUSER4," ELSE CLASSES = CLASSES + "USER4," END IF CASE BRK$C_USER5 IF BITSET THEN CLASSES = CLASSES + "NOUSER5," ELSE CLASSES = CLASSES + "USER5," END IF CASE BRK$C_USER6 IF BITSET THEN CLASSES = CLASSES + "NOUSER6," ELSE CLASSES = CLASSES + "USER6," END IF CASE BRK$C_USER7 IF BITSET THEN CLASSES = CLASSES + "NOUSER7," ELSE CLASSES = CLASSES + "USER7," END IF CASE BRK$C_USER8 IF BITSET THEN CLASSES = CLASSES + "NOUSER8," ELSE CLASSES = CLASSES + "USER8," END IF CASE BRK$C_USER9 IF BITSET THEN CLASSES = CLASSES + "NOUSER9," ELSE CLASSES = CLASSES + "USER9," END IF CASE BRK$C_USER10 IF BITSET THEN CLASSES = CLASSES + "NOUSER10," ELSE CLASSES = CLASSES + "USER10," END IF CASE BRK$C_USER11 IF BITSET THEN CLASSES = CLASSES + "NOUSER11," ELSE CLASSES = CLASSES + "USER11," END IF CASE BRK$C_USER12 IF BITSET THEN CLASSES = CLASSES + "NOUSER12," ELSE CLASSES = CLASSES + "USER12," END IF CASE BRK$C_USER13 IF BITSET THEN CLASSES = CLASSES + "NOUSER13," ELSE CLASSES = CLASSES + "USER13," END IF CASE BRK$C_USER14 IF BITSET THEN CLASSES = CLASSES + "NOUSER14," ELSE CLASSES = CLASSES + "USER14," END IF CASE BRK$C_USER15 IF BITSET THEN CLASSES = CLASSES + "NOUSER15," ELSE CLASSES = CLASSES + "USER15," END IF CASE BRK$C_USER16 IF BITSET THEN CLASSES = CLASSES + "NOUSER16" ELSE CLASSES = CLASSES + "USER16" END IF END SELECT NEXT BITCHK SET_SYMBOL: ! ! Define the BROADCAST_CLASSES symbol. ! STAT = LIB$SET_SYMBOL("BROADCAST_CLASSES",CLASSES BY DESC,) IF (STAT AND 1%)=0% THEN CALL LIB$STOP(STAT BY VALUE) \ END IF END