RECORDFORMAT COMF(INTEGER OCPTYPE,IPLDEV,SBLKS,SEPGS,NDISCS, C DDTADDR,GPCTABSIZE,GPCA,SFCTABSIZE,SFCA,SFCK,DIRSITE, C DCODEDA,SUPLVN,WASKLOKCORRECT,DATE0,DATE1,DATE2, C TIME0,TIME1,TIME2,EPAGESIZE,USERS,CATTAD,DQADDR, C SACPORT,OCPPORT,ITINT,CONTYPEA,GPCCONFA,FPCCONFA,SFCCONFA, C BLKADDR,DPTADDR,SMACS,TRANS,LONGINTEGER KMON, C INTEGER DITADDR,SMACPOS,SUPVSN,PSTVA,SECSFRMN,SECSTOCD, C SYNC1DEST,SYNC2DEST,ASYNCDEST,MAXPROCS,INSPERSEC,ELAPHEAD, C COMMSRECA,STOREAAD,PROCAAD,SFCCTAD,DRUMTAD,SP0,SP1,SP2,SP3, C SP4,SP5,SP6,SP7,SP8,SP9, C LSTL,LSTB,PSTL,PSTB,HKEYS,HOOT,SIM,CLKX,CLKY,CLKZ, C HBIT,SLAVEOFF,INHSSR,SDR1,SDR2,SDR3, C SDR4,SESR,HOFFBIT,S2,S3,S4,END) RECORDFORMAT PROCF(STRING (6) USER, C BYTEINTEGER INCAR,CATEGORY,WSN,RUNQ,ACTIVE, C INTEGER ACTWO,LSTAD,LAMTX,STACK,STATUS) RECORDFORMAT USTABF(INTEGER NEXT,STATUS, STRING (6) NAME) EXTERNALINTEGERFNSPEC DPROCS(INTEGERNAME MAXPROCS, INTEGER ADR) ! ! ! ROUTINE DELUXE(INTEGER MAXPROCS) BYTEINTEGERARRAY PROCLIST(0:32*MAXPROCS) RECORDARRAYFORMAT PROCAF(0:MAXPROCS)(PROCF) RECORDARRAYNAME PROCA(PROCF) RECORDARRAY USTAB(0:MAXPROCS)(USTABF) INTEGER I,J,FLAG,NUSERS,NEXTFREE,START,DUMMY,ADR,K,LAST STRING (255) SOUT NUSERS=0 NEXTFREE=0 START=0 DUMMY=0 ADR=0 FLAG=DPROCS(MAXPROCS, ADDR(PROCLIST(0))) WRITE(FLAG,4) AND RETURN IF FLAG#0 MAXPROCS = MAXPROCS-1 PROCA==ARRAY(ADDR(PROCLIST(0)),PROCAF) CYCLE J=0,1,MAXPROCS IF PROCA(J)_USER#"" THEN START ! USER IS ON IF PROCA(J)_USER#"DIRECT" AND PROCA(J)_USER#"VOLUMS" C AND PROCA(J)_USER#"SPOOLR" THEN START NUSERS=NUSERS+1 USTAB(NEXTFREE)_NAME=PROCA(J)_USER USTAB(NEXTFREE)_STATUS=PROCA(J)_STATUS IF NEXTFREE=0 THEN USTAB(NEXTFREE)_NEXT=-1 AND C NEXTFREE=NEXTFREE+1 ELSE START K=START LAST=START CYCLE EXIT IF USTAB(NEXTFREE)_NAME<USTAB(K)_NAME OR USTAB(K)_NEXT=-1 LAST=K K=USTAB(K)_NEXT REPEAT IF K=START THEN START IF USTAB(NEXTFREE)_NAME>USTAB(K)_NAME THEN C USTAB(NEXTFREE)_NEXT=USTAB(K)_NEXT AND USTAB(K)_NEXT=NEXTFREE C ELSE USTAB(NEXTFREE)_NEXT=K AND START=NEXTFREE FINISH ELSE START IF USTAB(NEXTFREE)_NAME>USTAB(K)_NAME THEN C USTAB(NEXTFREE)_NEXT=USTAB(K)_NEXT AND USTAB(K)_NEXT=NEXTFREE C ELSE START USTAB(NEXTFREE)_NEXT=USTAB(LAST)_NEXT USTAB(LAST)_NEXT=NEXTFREE FINISH FINISH NEXTFREE=NEXTFREE+1 FINISH FINISH FINISH REPEAT ! OUTPUT SEGMENT ! %CYCLE I=0,1,NEXTFREE-1 ! PRINTSTRING(USTAB(I)_NAME." ") ! WRITE(USTAB(I)_NEXT,3) ! NEWLINE ! %REPEAT I=START PRINTSTRING("Current users are: (* == background) ") SOUT="" J=START CYCLE I=1,1,NEXTFREE SOUT=SOUT.USTAB(J)_NAME IF USTAB(J)_STATUS&4=4THEN SOUT=SOUT."* " ELSE C SOUT=SOUT." " IF (I>>3)<<3=I OR I=NEXTFREE THEN START PRINTSTRING(SOUT.TOSTRING(10)) SOUT="" FINISH J=USTAB(J)_NEXT REPEAT NEWLINE WRITE(NUSERS,12) PRINTSTRING(" Users") RETURN END ; ! OF DELUXE EXTERNALROUTINE WHOSON(STRING (255) S) INTEGER MAXPROCS RECORDNAME COM(COMF) COM==RECORD(X'80000000'+48<<18) MAXPROCS=COM_MAXPROCS DELUXE(MAXPROCS) RETURN END ; ! OF WHOSON ENDOFFILE