!***********************************************************************
!*
!*                          The BINTT command
!*
!***********************************************************************
!
!
!***********************************************************************
!*
!*          Record and array formats
!*
!***********************************************************************
!
recordformat  comf(integer  ocptype,ipldev,sblks,sepgs,ndiscs,
         dlvnaddr,gpctabsize,gpca,sfctabsize,sfca,sfck,dirsite,
         dcodeda,suplvn,tojday,
         (integer  date0,date1,date2 or  c 
         byteinteger  dsp0,dsp1,dsp2,string (8) date),
         (integer  time0,time1,time2 or  c 
         byteinteger  tsp0,tsp1,tsp2,string (8) time),
         integer  epagesize,users,cattad,servaad,
         byteinteger  nsacs,resv1,sacport1,sacport0,
         nocps,resv2,ocpport1,ocpport0,
         integer  itint,contypea,gpcconfa,fpcconfa,sfcconfa,
         blkaddr,ration,smacs,trans,longinteger  kmon,
         integer  ditaddr,smacpos,supvsn,pstva,secsfrmn,secstocd,
         sync1dest,sync2dest,asyncdest,maxprocs,inspersec,elaphead,
         commsreca,storeaad,procaad,sfcctad,drumtad,tslice,feps,
         maxcbt,performad,sp1,sp2,sp3,sp4,sp5,sp6,
         lstl,lstb,pstl,pstb,hkeys,hoot,sim,clkx,clky,clkz,
         hbit,slaveoff,inhssr,sdr1,sdr2,sdr3,
         sdr4,sesr,hoffbit,blockzbit,blkshift,blksize,end)
recordformat  pe(integer  dest,srce,p1,p2,p3,p4,p5,p6)
recordformat  pmessf(record (pe) p,integer  invoc,msgtype,outno)
recordformat  procf(string (6) user,byteinteger  incar,category,snzt,
                    runq,active,integer  actw0,lstad,lamtx,stack,status)
!
ownrecord (procf)arrayformat  procaf(0:255)
!
!
!***********************************************************************
!*
!*          Constants
!*
!***********************************************************************
!
constantinteger  background = 4
constantrecord (comf)name  com = x'80c00000'
                                        ! Supervisor communication segment
!
!
!***********************************************************************
!*
!*          Subsystem references
!*
!***********************************************************************
!
systemstringfunctionspec  failuremessage(integer  mess)
systemstringfunctionspec  itos(integer  n)
systemintegerfunctionspec  parmap
systemroutinespec  setpar(string (255) s)
externalroutinespec  set return code(integer  i)
externalintegerfunctionspec  uinfi(integer  entry)
externalstringfunctionspec  uinfs(integer  entry)
!
!
!***********************************************************************
!*
!*          Director references
!*
!***********************************************************************
!
externalintegerfunctionspec  dprocedure(integer  n,adr)
externalintegerfunctionspec  dprocs(integername  maxprocs, integer  adr)
!
!
!***********************************************************************
!*
!*          Service routines
!*
!***********************************************************************
!
routine  dobintt(integer  maxprocs)
integer  i,incar,flag,procs
string (7) me
record (procf)arrayname  proca
record (pmessf) class68
byteintegerarray  proclist(0:maxprocs<<5)
!
procs = 0
me = uinfs(1)
incar = uinfi(13)
flag = dprocs(maxprocs,addr(proclist(0)))
if  flag # 0 then  start 
   printstring("DPROCS ".itos(flag))
   newline
   return 
finish 
maxprocs = maxprocs - 1
proca == array(addr(proclist(0)),procaf)
!
for  i = 0,1,maxprocs cycle 
   if  proca(i)_user = me and  c 
       proca(i)_incar # incar and  c 
       proca(i)_status & background # 0 then  start 
                                        ! Found a background process belonging to ME
      procs = procs + 1
      class68_p = 0
      class68_p_p1 = 1;                 ! Bottom 24 bits of Subclass - 'dprocedure' completes
      class68_invoc = proca(i)_incar
      class68_msgtype = 3;              ! Asynchronous
      class68_outno = 6;                ! PON and continue
      flag = dprocedure(3,addr(class68))
      if  flag # 0 then  start 
         printstring("DPROCEDURE ".itos(flag))
         newline
         return 
      finish 
   finish 
repeat 
if  procs = 0 then  start 
   printstring("* No background jobs found *")
else 
   if  procs = 1 then  start 
      printstring("Background job interrogated")
   else 
      printstring(itos(procs)." background jobs interrogated")
   finish 
finish 
newline
end ;   ! of dobintt
!
!
!***********************************************************************
!*
!*          B I N T T
!*
!***********************************************************************
!
externalroutine  bintt(string (255) parms)
integer  maxprocs,flag
!
setpar(parms)
if  parmap # 0 then  start 
   flag = 263;                          ! Wrong number of parameters
   -> err
finish 
!
maxprocs = com_maxprocs
dobintt(maxprocs)
set return code(0)
return 
!
err:
set return code(flag)
newline
printstring("BINTT fails -".failuremessage(flag))
stop 
end ;   ! of bintt
endoffile