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)
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)
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}
constinteger clockx=1
owninteger type=0
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})
if type=clock then vv define triggers(0, 0, 0)
signal(3, class, subclass, flag); ! Get the Subsystem to do the rest
end ; ! of ONTRAP
external routine alive(string (255) s)
integer flag, secs, count
string (127) aa, bb
record (parmf) p
type=0
secs=10{mins}*60; count=0
reroutecontingency(3, 65, int mask, ontrap, flag); ! Catch INT: messages
cycle
count=count+1
kick at(secs, clock dact, after, 0)
dpoff(p)
tim("")
repeat
end {alive}
external routine clock(string (255) s)
constinteger inside wid=8, inside dep=3
integer start line, start col, outer, i
routine spec draw box
integer flag, secs, count
string (127) aa, bb
record (parmf) p
start line=12-inside dep//2-1
start col=40-inside wid//2-1
secs=30; count=0
reroutecontingency(3, 65, int mask, ontrap, flag); ! Catch INT: messages
vv init(flag); return if flag#0
vv define triggers(1, 0, 0)
type=clockx
draw box
cycle
count=count+1
kick at(secs, clock dact, after, 0)
dpoff(p)
vv goto(start col+inside wid//1-3, start line+inside dep//2+1)
vv printstring(timex)
vv update screen
repeat
routine draw box
vv goto(start col, start line)
for outer=1, 1, 2 cycle
for i=1, 1, inside wid+2 cycle
vv printstring("*")
repeat
exit if outer=1
for i=1, 1, inside wid cycle
vv printstring("*"); vv spaces(inside wid); vvprintstring("*")
repeat
repeat
end {draw box}
end {clock}
end of file