LEX 'TFLAGS' * TOGGLE SYSTEM FLAGS ID #EC * RESTRICTED TO FLAGS -1 TO -59 MSG 0 * TO SAFEGUARD AGAINST MEMORY RESET POLL 0 ENTRY IN CHAR #F * A FUNCTION - RETURNS PREVIOUS VALUE OF FLAG KEY 'TFLAG' * SYNTAX TFLAG(-n), 1<=n<=59 TOKEN 12 POP1R EQU #0E8FD * POP 1 REAL FLTDH EQU #1B223 * FLOATING POINT TO HEX NUMBER CONVERSION HDFLT EQU #1B31B * THE REVERSE OF FLTDH SFLAGT EQU #13608 * SYSTEM FLAG TOGGLE ROUTINE (USED BY LC,USER ETC) FNRTN1 EQU #0F216 ARGERR EQU #0BF19 ENDTXT NIBHEX 811 * ONE OBLIGATORY NUMERIC PARAMETER IN GOSBVL POP1R * POP 1 REAL NUMBER A=0 S * CLEAR THE SIGN NIBBLE GOSBVL FLTDH * REAL IN A(W) TO HEX INTEGER IN A(A) C=0 W LC(2) #3C * #3C=60 DECIMAL ?C<=A B * PREVENT TOGGLE OF FLAGS -60 TO -64 GOYES ERROR C=0 A LC(3) #100 * FLAG NUMBER IS HEX COMPLEMENT OF #100 C=C-A X GOSBVL SFLAGT * TOGGLE ! ERRORS OUT ON USER FLAGS A=0 W * START SET-UP FOR OUTPUT GONC OUT * CARRY STATUS=PREVIOUS FLAG STATUS A=A+1 A * INCREMENT FOR ALTERNATE CASE OUT GOSBVL HDFLT * HEX INT. => REAL IN A(W) C=A W * COPY TO C(W) FOR OUTPUT GOVLNG FNRTN1 * BACK TO THE USER WITH PREVIOUS FLAG VALUE ERROR GOVLNG ARGERR END * WHEW! This keyword arose more as the result of the learning process, than from any real need. In retrospect I can see that it could be improved - e.g. the hex complement could have been achieved with: C=A B A=-A-1 B, and so on. At some time in the future, I may well toggle user flags. At present to toggle an accessible flag : DEF KEY'%','N=VAL(DISP$)@N=FLAG(N,NOTFLAG(N))': There may be better ways.