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)_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 %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