!***********************************************************************
!*
!* Program to read and clear HELP logfile
!*
!* R.D. Eager University of Kent MCMLXXXII
!*
!***********************************************************************
!
!
!***********************************************************************
!*
!* Constants
!*
!***********************************************************************
!
constantinteger monsize = 16*1024; ! Size of log file
constantinteger sscharfiletype = 3; ! Subsystem file type
constantinteger ssdatafiletype = 4; ! Subsystem file type
constantinteger outchan = 80; ! Channel number for temporary output
constantstring (1) snl = "
"
constantstring (10) templog = "T#HELPLOG"
constantstring (18) monfile = "SUBSYS.HELPMON"
constantstring (11) cumlog = "ALLHELPLOGS"
! Cumulative log
!
!
!***********************************************************************
!*
!* Record formats
!*
!***********************************************************************
!
recordformat fdf(integer link,dsnum,byteinteger status,accessroute,
valid action,cur state,byteinteger mode of use,
mode,file org,dev code,byteinteger rec type,flags,
lm,rm,integer asvar,arec,recsize,minrec,maxrec,
maxsize,lastrec,conad,currec,cur,end,transfers,
darecnum,cursize,datastart,string (31) iden)
recordformat hf(integer dataend,datastart,filesize,filetype,
sum,datetime,format,records,count,info)
recordformat mf(integer pdt,references,string (6) user,
string (20) call)
recordformat rf(integer conad,filetype,datastart,dataend)
!
!
!***********************************************************************
!*
!* Subsystem references
!*
!***********************************************************************
!
systemroutinespec connect(string (31) file,integer mode,hole,
prot,record (rf)name r,integername flag)
systemroutinespec define(integer chan,string (31) iden,
integername afd,flag)
systemroutinespec destroy(string (31) file,integername flag)
systemroutinespec disconnect(string (31) file,integername flag)
systemstringfunctionspec failuremessage(integer mess)
externalintegerfunctionspec instream
systemintegerfunctionspec iocp(integer ep,parm)
systemintegermapspec mapssfd(integer dsnum)
systemroutinespec outfile(string (31) file,integer size,hole,
prot,integername conad,flag)
externalintegerfunctionspec outstream
systemroutinespec permit(string (31) file,string (6) user,
integer mode,integername flag)
externalroutinespec prompt(string (255) s)
systemroutinespec setfname(string (63) s)
externalroutinespec set return code(integer i)
systemintegerfunctionspec sizeof(name x)
systemroutinespec uctranslate(integer ad,len)
systemstring (8)functionspec unpackdate(integer p)
systemstring (8)functionspec unpacktime(integer p)
!
systemroutinespec zcopy2(string (255) parms,integer silent,
integername flag)
!
!
!***********************************************************************
!*
!* Service routines
!*
!***********************************************************************
!
routine clearstream(integer chan)
! Clears out a channel definition, but does not give an error if the
! channel was not defined.
record (fdf)name f
!
if mapssfd(chan) # 0 then start
f == record(mapssfd(chan))
if f_status = 0 then start
mapssfd(chan) = 0
f_dsnum = 0; ! Mark descriptor as free
finish
finish
end ; ! of clearstream
!
!
routine closestream(integer chan)
! Private version of 'closestream'. Does not give an error if the
! operation fails.
integer flag
!
return unless instream # chan # outstream
flag = iocp(16,chan)
end ; ! of closestream
!
!
routine readline(stringname s)
integer c
!
s = ""
cycle
readsymbol(c)
exit if c = nl
s <- s.tostring(c)
repeat
uctranslate(addr(s)+1,length(s))
end ; ! of readline
!
!
!***********************************************************************
!*
!* H E L P L O G
!*
!***********************************************************************
!
externalroutine helplog(string (255) s)
integer act,conad,flag,afd,i,ad
record (rf) rr
record (hf)name r
record (mf)name m
!
set return code(1000)
printstring("Actions are Create,Gather,Quit".snl)
prompt("Action: ")
-> instant if s # ""
!
cycle
readline(s)
!
instant:
continue unless length(s) # 0
act = charno(s,1)
if act = 'Q' then exit else c
if act = 'C' then start
outfile(cumlog,4096,0,0,conad,flag)
-> err if flag # 0
r == record(conad)
r_filetype = sscharfiletype
disconnect(cumlog,flag)
-> err if flag # 0
outfile(monfile,monsize,0,0,conad,flag)
-> err if flag # 0
r == record(conad)
r_dataend = r_filesize
r_filetype = ssdatafiletype
r_format = 3; ! Un-structured
r_count = 0; ! Count of records
disconnect(monfile,flag)
-> err if flag # 0
permit(monfile,"",3,flag)
-> err if flag # 0
finish else c
if act = 'G' then start
connect(monfile,3,0,0,rr,flag)
-> err if flag # 0
r == record(rr_conad)
if r_filetype # ssdatafiletype or r_format # 3 then start
setfname(monfile)
flag = 267; ! Invalid filetype
-> err
finish
define(outchan,templog,afd,flag)
-> err if flag # 0
selectoutput(outchan)
ad = addr(r_info)
for i = 1,1,r_count cycle
m == record(ad+(i-1)*sizeof(m))
printstring("DT: ".unpackdate(m_pdt)." ".unpacktime(m_pdt))
printstring(" ".m_user)
write(m_references,3)
printstring(" : ".m_call.snl)
repeat
selectoutput(0)
closestream(outchan)
clearstream(outchan)
r_count = 0
disconnect(monfile,flag)
-> err if flag # 0
zcopy2(templog.",".cumlog."-MOD",1,flag)
-> err if flag # 0
destroy(templog,flag)
finish else c
printstring("?".snl)
continue
!
err:
printstring("Error -".failuremessage(flag))
repeat
!
set return code(0)
end ; ! of helplog
endoffile