!TITLE Source of S#FOR ALL USERS !< %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, %C %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 apply(%INTEGER maxprocs,%ROUTINE use) %SPEC use(%STRING(255) S,%INTEGER Mode) %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 %IF 1=1 %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)_nameustab(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 %C %AND ustab(k)_next=nextfree %ELSE %START ustab(nextfree)_next=ustab(last)_next ustab(last)_next=nextfree %FINISH %FINISH nextfree=nextfree+1 %FINISH %FINISH %FINISH %REPEAT i=start sout="" j=start %CYCLE i=1,1,nextfree use(ustab(j)_name,ustab(j)_status) j=ustab(j)_next %REPEAT %END; ! of apply %SYSTEMROUTINE FORALL USERS(%ROUTINE use) %SPEC use(%STRING(255) s,%INTEGER Mode) %INTEGER maxprocs %RECORDNAME com(comf) com==RECORD(X'80000000'+48<<18) maxprocs=com_maxprocs apply(maxprocs,use) %BEGIN %RECORD %FORMAT FILEFM(%INTEGER conad,filetype,datastart,dataend) %SYSTEM %ROUTINE %SPEC CONNECT(%STRING(31)S, %C %INTEGER a,m,p, %C %RECORD%NAME info, %C %INTEGERNAME flag) %SYSTEM %ROUTINE %SPEC DISCONNECT(%STRING(31)S, %C %INTEGERNAME flag) %EXTERNAL %STRING(255) %FN %SPEC UINFS(%INTEGER which) %EXTERNAL %STRING(8) %FN %SPEC TIME %EXTERNAL %STRING(8) %FN %SPEC DATE %RECORD File (FILEFM) %INTEGER Group,Type,Site,Flag %STRING(255) Line %STRING(10) User User = UINFS(1) Group = CHAR NO(User,4) Type = CHAR NO(User,3) LENGTH(User)=2 %IF 0=0 %OR (User="EC" %AND Group='U' %AND 'U'<=Type<='Z') %START LENGTH(User)=6; User=User.": " Line = User.DATE." ".TIME.", ".UINFS(7)." ".UINFS(2)." " CONNECT("ECSLIB.".TOSTRING('U'),3,0,0,File,Flag) !Disguise file name %IF Flag=0 %THEN %START %IF INTEGER(File_conad+X'8')-X'20'-File_dataend-1 > LENGTH(Line) %THEN %START %CYCLE Site = File_conad+File_datastart,1,File_conad+File_dataend-1 %IF BYTEINTEGER(Site)=10 %AND STRING(Site)=User %THEN ->END %REPEAT STRING(Site) = Line INTEGER(File_conad) = INTEGER(File_conad)+LENGTH(Line)+1 BYTEINTEGER(Site) = NL %FINISH END: %FINISH DISCONNECT("ECSLIB.".TOSTRING('U'),Flag) %FINISH %END %END; ! of whoson %ENDOFFILE !>