From: MERC::"uunet!WKUVX1.BITNET!DSJ-Mgr" 21-DEC-1992 09:30:10.32 To: galaxy::gleeve CC: Subj: OCTOBER92.DEATH $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.1 $! On 6-OCT-1992 12:26:17.15 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- September 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. [.DEATH]DEATH.VAX;1 $! 2. [.DEATH]DEATH_NOTICE.FOR;1 $! 3. [.DEATH]GET_DOWN.FOR;1 $! 4. [.DEATH]SET_TERM_MBX.MAR;1 $! 5. [.DEATH]SIMPLE.FOR;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete 'f'* $ exit $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-UNPACK, Unpacking file ''P1'" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex LOCAL x1,x2;x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t, ERASE_CHARACTER(1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF INDEX(ERASE_LINE,"-+-+-+-+-+-+-+-+")=1; ENDLOOP;ENDPROCEDURE; PROCEDURE ExpandChar CASE CURRENT_CHARACTER FROM ' ' TO 'z' ["`"] :ERASE_CHARACTER(1);COPY_TEXT(ASCII(GetHex));[" "]:ERASE_CHARACTER(1);[ OUTRANGE,INRANGE]:MOVE_HORIZONTAL(1);ENDCASE;ENDPROCEDURE; PROCEDURE ProcessLine s:=ERASE_CHARACTER(1);LOOP EXITIF CURRENT_OFFSET>=LENGTH( CURRENT_LINE);ExpandChar;ENDLOOP;IF s="V" THEN APPEND_LINE;ENDIF;ENDPROCEDURE; PROCEDURE AdvanceLine MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1); ENDPROCEDURE;PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)= END_OF(b);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep; ELSE ProcessLine;AdvanceLine;ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME, "UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:= GET_INFO(COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b, GET_INFO(COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ if P2 .eqs. "" then $ goto ckskip $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ckskip: e "-W-CHKSUMSKIP, checksum validation unavailable for ''P1'" $ endsubroutine $start: $! $ create 'f' X$`20 X$`20fort`20simple X$`20link`20simple X$`20 X$`20fort`20get_down X$`20link`20get_down X$`20 X$`20 X$`20typ`20simple.for X`5B....SIMPLE.FOR`20extracted....`5D X$`20 X$`20 X$`20 X$`20type`20get_down.for X`5B....GET_DOWN.FOR`20extracted....`5D X$`20 X$`20 X$`20 X$`20run`20get_down XSubprocess`20cpu`20time`20=`20`20`20`20`20`20`20`20`20`20`2021 X$`20 X$`20 X$`20 X`0C X$`20 X$`20type`20death_notice.for X`5B....DEATH_NOTICE.FOR`20extracted....`5D X$`20 X$`20type`20set_term_mbx.mar X`5B....SET_TERM_MBX.MAR`20extracted....`5D X$`20 X$`20 X$`20 X$`20fort`20death_notice X$`20 X$`20macro`20set_term_mbx X$`20 X$`20 X$`20link`20death_notice,set_term_mbx X$`20 X$`20 X$`20run/detach/proc="looper"`20looper X%RUN-S-PROC_ID,`20identification`20of`20created`20process`20is`2000000075 X$`20 X$`20show`20sys XVAX/VMS`20V5.4-2`20`20on`20node`20LABDOG`20`20`203-JUL-1992`2021:24:31.34`20 V`20`20Uptime`20`202`2001:17:53 X`20`20Pid`20`20`20`20Process`20Name`20`20`20`20State`20`20Pri`20`20`20`20`20 V`20I/O`20`20`20`20`20`20`20CPU`20`20`20`20`20`20`20Page`20flts`20Ph.Mem X00000021`20SWAPPER`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2016`20`20`20`20 V`20`20`20`200`20`20`200`2000:00:01.70`20`20`20`20`20`20`20`20`200`20`20`20`20 V`20`200`20`20`20 X00000025`20CONFIGURE`20`20`20`20`20`20`20HIB`20`20`20`20`20`208`20`20`20`20 V`20`20`20`206`20`20`200`2000:00:00.32`20`20`20`20`20`20`20`2092`20`20`20`20154 V`20`20`20 X00000027`20ERRFMT`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`208`20`20 V`20`20`201539`20`20`200`2000:00:23.18`20`20`20`20`20`20`20`2084`20`20`20`20132 V`20`20`20 X00000028`20OPCOM`20`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`207`20`20 V`20`20`20`20576`20`20`200`2000:00:06.66`20`20`20`20`20`20`20283`20`20`20`20159 V`20`20`20 X00000029`20AUDIT_SERVER`20`20`20`20HIB`20`20`20`20`2010`20`20`20`20`20`20150 V`20`20`200`2000:00:03.56`20`20`20`20`20`201346`20`20`20`20417`20`20`20 X0000002A`20JOB_CONTROL`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20`20`20`20202 V`20`20`200`2000:00:01.55`20`20`20`20`20`20`20170`20`20`20`20344`20`20`20 X0000002B`20IPCACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20 V`20`20`20`2013`20`20`200`2000:00:00.25`20`20`20`20`20`20`20`2069`20`20`20`2013 V7`20`20`20 X0000002C`20TP_SERVER`20`20`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20`2011832 V`20`20`200`2000:07:50.48`20`20`20`20`20`20`20160`20`20`20`20251`20`20`20 X0000002D`20NETACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20 V`20`202296`20`20`200`2000:02:07.41`20`20`20`20`20`20`20231`20`20`20`20417`20 V`20`20 X0000002E`20EVL`20`20`20`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`206 V`20`20`20`20`20`20518`20`20`200`2000:00:22.21`20`20`20`20`2049017`20`20`20`20 V`2062`20`20N X0000002F`20REMACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`209`20`20 V`20`20`20`20`2032`20`20`200`2000:00:00.25`20`20`20`20`20`20`20`2078`20`20`20 V`20`2059`20`20`20 X00000030`20SYMBIONT_0001`20`20`20HIB`20`20`20`20`20`204`20`20`20`20`20`20`2024 V`20`20`200`2000:00:01.02`20`20`20`20`20`20`20239`20`20`20`20120`20`20`20 X00000031`20MULTINET_SERVER`20HIB`20`20`20`20`20`206`20`20`20`20`20`20296`20 V`20`200`2000:00:07.03`20`20`20`20`20`20`20643`20`20`20`20220`20`20`20 X00000032`20CTM_SERVER`20`20`20`20`20`20HIB`20`20`20`20`2012`20`20`20`20`20`20 V`2021`20`20`200`2000:00:00.98`20`20`20`20`20`20`20190`20`20`20`20407`20`20`20 X00000073`20SERVER_0009`20`20`20`20`20LEF`20`20`20`20`20`206`20`20`20`20`20`202 V41`20`20`200`2000:00:04.91`20`20`20`20`20`20`20560`20`20`20`20299`20`20N X00000074`20ELLISB`20`20`20`20`20`20`20`20`20`20CUR`20`20`20`20`20`204`20`20 V`20`20`20`20485`20`20`200`2000:00:26.75`20`20`20`20`20`202557`20`20`20`20287 V`20`20`20 X00000075`20looper`20`20`20`20`20`20`20`20`20`20COM`20`20`20`20`20`204`20`20 V`20`20`20`20`20`205`20`20`200`2000:00:09.21`20`20`20`20`20`20`20`2060`20`20 V`20`20`2093`20`20`20 X$`20 X$`20 X$`20 X$`20set`20proc/priv=all X$`20 X$`20spawn/nowait`20run`20death_notice X%DCL-S-SPAWNED,`20process`20ELLISB_1`20spawned X$`20 XEnter`20the`20target`20pid X$ X75 X$`20 X$`20stop/id=75 Xsubprocess`20terminated`20reason:`20`20`20`20`20`20`20`20`20`20`200 X$`20 X$`20 X$`20show`20sys XVAX/VMS`20V5.4-2`20`20on`20node`20LABDOG`20`20`203-JUL-1992`2021:25:48.35`20 V`20`20Uptime`20`202`2001:19:10 X`20`20Pid`20`20`20`20Process`20Name`20`20`20`20State`20`20Pri`20`20`20`20`20 V`20I/O`20`20`20`20`20`20`20CPU`20`20`20`20`20`20`20Page`20flts`20Ph.Mem X00000021`20SWAPPER`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2016`20`20`20`20 V`20`20`20`200`20`20`200`2000:00:01.76`20`20`20`20`20`20`20`20`200`20`20`20`20 V`20`200`20`20`20 X00000025`20CONFIGURE`20`20`20`20`20`20`20HIB`20`20`20`20`20`208`20`20`20`20 V`20`20`20`206`20`20`200`2000:00:00.32`20`20`20`20`20`20`20`2092`20`20`20`20154 V`20`20`20 X00000027`20ERRFMT`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`208`20`20 V`20`20`201539`20`20`200`2000:00:23.18`20`20`20`20`20`20`20`2084`20`20`20`20132 V`20`20`20 X00000028`20OPCOM`20`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`207`20`20 V`20`20`20`20576`20`20`200`2000:00:06.66`20`20`20`20`20`20`20283`20`20`20`20159 V`20`20`20 X00000029`20AUDIT_SERVER`20`20`20`20HIB`20`20`20`20`2010`20`20`20`20`20`20150 V`20`20`200`2000:00:03.56`20`20`20`20`20`201346`20`20`20`20417`20`20`20 X0000002A`20JOB_CONTROL`20`20`20`20`20HIB`20`20`20`20`20`209`20`20`20`20`20`202 V05`20`20`200`2000:00:01.55`20`20`20`20`20`20`20170`20`20`20`20344`20`20`20 X0000002B`20IPCACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20 V`20`20`20`2013`20`20`200`2000:00:00.25`20`20`20`20`20`20`20`2069`20`20`20`2013 V7`20`20`20 X0000002C`20TP_SERVER`20`20`20`20`20`20`20HIB`20`20`20`20`20`209`20`20`20`20118 V37`20`20`200`2000:07:50.68`20`20`20`20`20`20`20160`20`20`20`20251`20`20`20 X0000002D`20NETACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`2010`20`20`20 V`20`202296`20`20`200`2000:02:07.41`20`20`20`20`20`20`20231`20`20`20`20417`20 V`20`20 X0000002E`20EVL`20`20`20`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`206 V`20`20`20`20`20`20518`20`20`200`2000:00:22.21`20`20`20`20`2049017`20`20`20`20 V`2062`20`20N X0000002F`20REMACP`20`20`20`20`20`20`20`20`20`20HIB`20`20`20`20`20`209`20`20 V`20`20`20`20`2032`20`20`200`2000:00:00.25`20`20`20`20`20`20`20`2078`20`20`20 V`20`2059`20`20`20 X00000030`20SYMBIONT_0001`20`20`20HIB`20`20`20`20`20`204`20`20`20`20`20`20`2024 V`20`20`200`2000:00:01.02`20`20`20`20`20`20`20239`20`20`20`20120`20`20`20 X00000031`20MULTINET_SERVER`20HIB`20`20`20`20`20`206`20`20`20`20`20`20296`20 V`20`200`2000:00:07.03`20`20`20`20`20`20`20643`20`20`20`20220`20`20`20 X00000032`20CTM_SERVER`20`20`20`20`20`20HIB`20`20`20`20`2012`20`20`20`20`20`20 V`2021`20`20`200`2000:00:00.98`20`20`20`20`20`20`20190`20`20`20`20407`20`20`20 X00000073`20SERVER_0009`20`20`20`20`20LEF`20`20`20`20`20`206`20`20`20`20`20`202 V41`20`20`200`2000:00:04.91`20`20`20`20`20`20`20560`20`20`20`20299`20`20N X00000074`20ELLISB`20`20`20`20`20`20`20`20`20`20CUR`20`20`20`20`20`204`20`20 V`20`20`20`20583`20`20`200`2000:00:27.78`20`20`20`20`20`202667`20`20`20`20337 V`20`20`20 X$`20 $ call unpack [.DEATH]DEATH.VAX;1 906890899 "" $! $ create 'f' XC*************************************************************** XC*`09Program`20which`20illustrates`20tracking`20the`20process`20deletion`20of XC*`09a`20process`20which`20we`20have`20not`20created. XC*`09Author:`09Bruce`20Ellis XC*************************************************************** X X`09program`09death_notice X`09implicit`09none X`09include`09'($syssrvnam)' X`09include`09'($iodef)' X`09include`09'($dvidef)' X`09include`09'($accdef)' X`09external`09death_ast,set_term_mbx X`09integer`09stat,len,chan,mbx_unit,death_flag,iosb(2),pid X`09integer`09kernel_args(4) X`09character`09mbx*5 X`09structure`09/acc/ X`09`09integer`09msg_type,status X`09`09byte`09junk(78) X`09end`09structure X`09record`09/acc/`09exit_msg X`09structure`09/pql/ X`09`09byte`09quota X`09`09integer`09value X`09end`09structure X`09structure`09/dvi/ X`09`09integer*2`20size,item X`09`09integer`09value X`09`09integer`09ret_len X`09end`09structure X`09record`09/pql/`20list(4) X`09record`20`09/dvi/`20dvi_list(2) X`09 XC*************************************************************** XC*`09Create`20the`20termination`20mailbox XC*************************************************************** X`09mbx='ellis' X`09stat=sys$crembx(,chan,,,,,mbx) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) X`09dvi_list(1).size=4 X`09dvi_list(1).item=dvi$_unit X`09dvi_list(1).value=%loc(mbx_unit) X`09dvi_list(2).item=0 XC*************************************************************** XC*`09Get`20the`20mailbox's`20unit`20number XC*************************************************************** X`09stat=sys$getdviw(,%val(chan),,dvi_list,,,,) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) XC*************************************************************** XC*`09Get`20the`20target`20process`20id XC*************************************************************** X`09type`20*,'Enter`20the`20target`20pid' X`09read(*,100)`20pid X`20100`09format(Z) X`09death_flag=0 XC*************************************************************** XC*`09Blast`20the`20termination`20mailbox`20unit`20field`20of`20the`20target XC*`09process'`20PCB. XC*************************************************************** X`09kernel_args(1)=3`09`09!3`20arguments X`09kernel_args(2)=%loc(pid)`09!process`20id`20address X`09kernel_args(3)=0`09`09!null`20argument X`09kernel_args(4)=mbx_unit X`09stat=sys$cmkrnl(set_term_mbx,kernel_args) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) XC*************************************************************** XC*`09Post`20a`20read`20to`20the`20termination`20mailbox. XC*************************************************************** X`09stat=sys$qio(%val(33),%val(chan),%val(io$_readvblk),iosb,death_ast, X`091`20death_flag,exit_msg,%val(acc$k_termlen),,,,) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) XC######################`09do`20work`20here`20########################### X`09if(death_flag.eq.1)`20then X`09`09type`20*,'subprocess`20terminated`20reason:',exit_msg.status X`09endif XC*************************************************************** XC*`09Wait`20till`20she/he`20dies XC*************************************************************** X`09call`20`09sys$waitfr(%val(33),iosb) X`09if(death_flag.eq.1)`20then X`09`09type`20*,'subprocess`20terminated`20reason:',exit_msg.status X`09endif X`09end XC*************************************************************** XC*`20Subroutine`20to`20handle`20termination`20AST XC*************************************************************** X`09subroutine`09death_ast(death_flag) X`09integer`09death_flag X`09death_flag=1 X`09end $ call unpack [.DEATH]DEATH_NOTICE.FOR;1 1512555928 "" $! $ create 'f' XC********************************************************************** XC*`09Program`20which`20illustrates`20the`20use`20of`20a`20termination`20mailbo Vx XC*`20`20`09used`20to`20detect`20the`20deletion`20of`20a`20process`20which`20we V`20have`20created XC*`09Author:`20Bruce`20Ellis XC********************************************************************** X`09program`09spawn X`09implicit`09none X`09include`09'($syssrvnam)' X`09include`09'($iodef)' X`09include`09'($pqldef)' X`09include`09'($dvidef)' X`09include`09'($accdef)' XC`20Declare`20AST`20function`20which`20will`20handle`20process`20termination X`09external`09death_ast X`09integer`09stat,len,chan,mbx_unit,death_flag,iosb(2) X`09character`09term*8,mbx*5 XC`20Storage`20for`20the`20termination`20accounting`20message X`09structure`09/acc/ X`09`09integer`09msg_type,status X`09`09byte`09junk(78) X`09end`09structure X`09record`09/acc/`09exit_msg XC`20Process`20quota`20list`20for`20SYS$CREPRC X`09structure`09/pql/ X`09`09byte`09quota X`09`09integer`09value X`09end`09structure XC`20SYS$GETDVI`20argument`20list X`09structure`09/dvi/ X`09`09integer*2`20size,item X`09`09integer`09value X`09`09integer`09ret_len X`09end`09structure X`09record`09/pql/`20list(4) X`09record`20`09/dvi/`20dvi_list(2) X`09 XC********************** XC`20Create`20the`20mailbox XC********************** X`09mbx='ellis' X`09stat=sys$crembx(,chan,,,,,mbx) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) X`09dvi_list(1).size=4 X`09dvi_list(1).item=dvi$_unit X`09dvi_list(1).value=%loc(mbx_unit) X`09dvi_list(2).item=0 XC********************** XC`20Determine`20the`20mailbox's`20unit`20number XC********************** X`09stat=sys$getdviw(,%val(chan),,dvi_list,,,,) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) XC********************** XC`20Get`20the`20terminal`20name`20for`20the`20SYS$CREPRC`20call`20definition V`20of XC********************** X`09call`09get_term(term,len) X`09term=term(1:len) X`09list(1).quota=pql$_wsdefault X`09list(1).value=2048 X`09list(2).quota=pql$_wsquota X`09list(2).value=2048 X`09list(3).quota=pql$_wsextent X`09list(3).value=2048 X`09list(4).value=pql$_listend X`09death_flag=0 XC********************** XC`20Create`20the`20process`20with`20a`20termination`20mailbox`20associated XC********************** X`09stat=sys$creprc(,'simple',term,term,term,,,,%val(4),,%val(mbx_unit),) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) X`09stat=sys$qio(%val(33),%val(chan),%val(io$_readvblk),iosb,death_ast,, X`091`20exit_msg,%val(acc$k_termlen),,,,) X`09if`20(.not.stat)`20call`20lib$stop(%val(stat)) XC######################`09do`20work`20here`20########################### X`09if(death_flag.eq.1)`20then X`09`09type`20*,'subprocess`20terminated`20reason:',exit_msg.status X`09endif XC********************** XC`20Wait`20for`20the`20process`20to`20die XC********************** X X`09call`20`09sys$waitfr(%val(33),iosb) X`09if(death_flag.eq.1)`20then X`09`09type`20*,'subprocess`20terminated`20reason:',exit_msg.status X`09endif X`09end XC************************* XC*`20`09Subroutine`20to`20handle`20process`20termination XC************************* X`09subroutine`09death_ast() X`09integer`09death_flag XC************************* XC*`20Identify`20that`20the`20process`20is`20dead. XC************************* X`09death_flag=1 X`09end X XC************************* XC*`20Subroutine`20to`20get`20terminal`20name. XC************************* X`09subroutine`09get_term(t,l) X`09include`09'($jpidef)' X`09integer`09l X`09character*8`09t XC************************* XC*`20Get`20our`20terminal`20name. XC************************* X`09call`09lib$getjpi(jpi$_terminal,,,,t,l) X`09end $ call unpack [.DEATH]GET_DOWN.FOR;1 845837297 "" $! $ create 'f' X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E X;`09Routine:`09set_term_mbx X;`09Author:`09`09Bruce`20Ellis X;`09Function:`20sets`20terminitation`20mailbox`20unit`20number X;`09to`20specified`20value. X;`09Inputs:`094(ap)->pid,`208(ap)->`20prcnam,`2012(ap)`20contains`20 X;`09`09mailbox`20unit`20number. X;`09Outputs:`20R0`20contains`20status,`20including`20any`20from`20$LKWSET X;`09`09`20or`20exe$nampid.`20`20SS$_WASSET`20if`20termination`20mailbox X;`09`09`20unit`20was`20set. X;`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E`5E V`5E`5E`5E`5E`5E`5E X X`09.library`09/sys$library:lib.mlb/ X`09.link`09/sys$system:sys.stb/ X`09$pcbdef Xmbx_unit=12`09 Xlock_locs: X`09.address`09lock_start X`09.address`09lock_end X`09.entry`09set_term_mbx,`5Em X`09movw`09mbx_unit(ap),r6`09`09;save`20the`20termination`20mbx`20unit X`09$lkwset_s`09inadr=lock_locs`09`09;lock`20down`20pages`20accessed X`09`09`09`09`09`09;`20at`20high`20ipl X`09blbc`09r0,exit Xlock_start: X`09jsb`09g`5Eexe$nampid`09`09`09;convert`20pid`20to`20pcb`20address X`09blbc`09r0,exit X`09tstw`09pcb$w_tmbu(r4)`09`09`09;was`20it`20alreadt`20set? X`09bneq`09err_out`09`09`09`09;`20if`20so`20scram X`09movw`09r6,pcb$w_tmbu(r4)`09`09;blast`20the`20termination`20mbx`20unit X`09unlock`09lockname=SCHED,newipl=#0`09;release`20spinlock`20acquired X`09`09`09`09`09`09;`20by`20exe$nampid Xlock_end: X`09movl`09#ss$_normal,r0 Xexit: X`09ret`09`09`09`09`09;scram Xerr_out: X`09unlock`09lockname=SCHED,newipl=#0`09;release`20spinlock`20acquired X`09movl`09#ss$_wasset,r0 X`09ret X`09.end $ call unpack [.DEATH]SET_TERM_MBX.MAR;1 1762931137 "" $! $ create 'f' XC********************************************************* XC*`20Program`20which`20displays`20cpu`20time`20since`20process`20creation XC*`20Author:`20Bruce`20Ellis XC********************************************************* X`09program`09simple X`09integer`09value XC`20Get`20and`20display`20CPU`20time X`09call`09show_times() X`09value=1 X`09end X`09 XC******************************************************** XC*`20Subroutine`20which`20displays`20CPU`20time XC******************************************************** X`09subroutine`20show_times() X`09include`09'($syssrvnam)' X`09include`09'($jpidef)' X`09integer`09cpu,stat XC`20Get`20CPU`20time X`09stat=lib$getjpi(jpi$_cputim,,,cpu) XC`20Blast`20it`20out X`09type`09*,'Subprocess`20cpu`20time`20=`20',cpu X`09end $ call unpack [.DEATH]SIMPLE.FOR;1 1260086256 "" $ v=f$verify(v) $ exit