record  format  parmf(integer  dest, srce, p1, p2, p3, p4, p5, p6)
external  routine  spec  dpon(record  (parmf) name  p)
external  routine  spec  dpoff(record  (parmf) name  p)
system  routine  spec  signal(integer  ep, p1, p2, integer  name  flag)
const  long  integer  int mask= x'03E2000A03E2000A'; ! INT: A,C,Q,V,W,X,Y,a,c,q,v,w,x,y
system  routine  spec  reroutecontingency(integer  ep, class, long  integer  mask,
    routine  ontrap, integer  name  flag)

external  routinespec  tim(string (255) s)


include  "CONLIB.VVP_VVPSPECS"



record  format  tmodef(half  integer  flags1, flags2,  {.04} byte  integer  promptchar, endchar,
     {.06} byte  array  breakbit1(0:3) {%or %halfintegerarray BREAKBIT2(0:1))},
     {.0A} byte  integer  pads, rptbuf, linelimit, pageleng,
     {.0E} byte  integer  array  tabvec(0:7),  {.16} byte  integer  cr, esc, del, can, sp1, sp2,
    sp3, sp4, sp5, sp6)
   {length of this format is X20 bytes}

record  format  uinff(string  (6) user, string  (31) jobdocfile,  {.28} integer  mark, fsys,
     {.30} procno, isuff, reason, batchid,  {.40} sessiclim, scidensad, scidens, startcnsl,
     {.50} aiostat, sct date, sync1 dest, sync2 dest,  {.60} async dest, aacct rec, aic revs,
     {.6C} string  (15) jobname,  {.7C} string  (31) basefile,  {.9C} integer  previc,
     {.A0} itaddr0, itaddr1, itaddr2, itaddr3,  {.B0} itaddr4, stream id, dident, scarcity,
     {.C0} preemptat, string  (11) spoolrfile,  {.D0} integer  funds, sesslen, priority, decks,
     {.E0} drives, part close,  {.E8} record  (tmodef) tmodes,  {108} integer  pslot,
     {10C} string  (63) itaddr,  {14C} integer  array  fclosing(0:3), integer  clo fes,
     {160} integer  output limit, dapsecs, long  integer  dapinstrs,  {170} integer  out,
    string  (15) outname,  {184} integer  hiseg, integer  uend)
const  record  (uinff) name  uinf=9<<18
const  integer  every= 1
const  integer  after= 2

const  integer  clock dact=5 {arbitrary}

routine  kick at(integer  seconds, dact, every or after, info)
! Param EVERY OR AFTER should be  1  for every SECONDS seconds, or CANCEL
!                             or  2  for after SECONDS second.
! If SECONDS is -1, then it's a "cancel" request.
record  (parmf) p
   p=0
   p_dest=X'A0000'!every or after
   p_p1=uinf_sync1 dest!dact
   p_p2=seconds
   p_p3=info {returned in P_P1}
   dpon(p)
end ; ! KICK AT

routine  ontrap(integer  class, subclass)
integer  flag
integer  array  aa(0:31)
   kick at(-1 {cancel}, clock dact, after, 9 {info})
   signal(3, class, subclass, flag); ! Get the Subsystem to do the rest
end ; ! of ONTRAP

external  routine  spec  documents(string  (255) s)
external  routine  spec  ddelay(integer  seconds)
external  routine  spec  nrstrg(stringname  s)
external  routine  spec  bel(string  (255) s)
external  routine  spec  define(string (255) s)
external  routine  spec  clear(string (255) s)


external  routine  rdoc(string  (255) s)
integer  flag, secs, done, some, count, bell
string (127) aa, bb
record  (parmf) p
   secs=40; count=0
   reroutecontingency(3, 65, int mask, ontrap, flag); ! Catch INT: messages
   define("25,t#tempxyz")
   done=0; some=0
   cycle 
      count=count+1
      secs=120 if  count>4
      select output(25)
      documents("")
      printstring("**end**")
      newline
      select output(0)
      closestream(25)
      select input(25)
      bell=0
      cycle 
         nrstrg(s)
         if  s="No documents found" then  done=1 else  if  s="**end**" then  exit 
         if  s->aa.("Sending").bb then  bell=1
         printstring(s)
         newline
      repeat 
      tim("")
      select input(0)
      closestream(25)
      bel("") if  bell#0
      exit  if  done#0
      kick at(secs, clock dact, after, 0)
      dpoff(p)
      some=1
   repeat 
   clear("25")
   bel("") if  some#0 and  done#0
end  {rdoc}

external  routine  cl(string (255) s)
integer  j, flag
   vv init(j)
   return  if  j#0
   vv define triggers(2, 0, 0)
   vv define triggers(0, 0, 0)
end  {cl}
   
end  of  file