!*********************************************************************** !* !* 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