From: SMTP%"DSJ@WKUVX1.WKU.EDU" 24-OCT-1994 15:58:13.16 To: EVERHART CC: Subj: AUGUST94.TMRQUE X-FileServer: Digital Systems Journal File Server Date: Mon, 24 Oct 1994 14:21:58 CDT Sender: DSJ-Mgr@WKUVX1.WKU.EDU Errors-To: DSJ-Mgr@WKUVX1.WKU.EDU Warnings-To: <> From: DSJ-Mgr@WKUVX1.WKU.EDU Reply-To: DSJ@WKUVX1.WKU.EDU Subject: AUGUST94.TMRQUE To: EVERHART@arisia.gce.com $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : TMRQUE $! By : Hunter Goatley $! Date : 11-AUG-1994 16:10:24.00 $! Using: VMS_SHARE 8.5-1, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! To unpack this archive: $! Minimum of VMS 4.4 (VAX) / OpenVMS 1.0 (Alpha) is required. $! Remove the headers of the first part, up to `cut here' line. $! Execute file as a command procedure. $! $! The following file(s) will be created after unpacking: $! 1. TMRQUE.DSJ;2 $! $ set="set" $ set symbol/scope=(nolocal,noglobal) $ f="SYS$SCRATCH:."+f$getjpi("","PID")+";" $ if f$trnlnm("SHARE_UNPACK") .nes. "" then $ - f=f$parse("SHARE_UNPACK_TEMP",f) $ e="write sys$error ""%UNPACK"", " $ w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ 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=file,P2=chksum,P3=attrib,P4=size,P5=fileno,P6=filetotal $ 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: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks" $ 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/NOJOURNAL 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m; LOOP m:=MARK(NONE);EXITIF m=END_OF(CURRENT_BUFFER);DELETE(m);EXITIF INDEX( ERASE_LINE,"-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE; PROCEDURE ProcessLine LOCAL c,s,l,b,n,p;s := ERASE_LINE;c := SUBSTR(s,1,1);s := s-c;IF c = "X" THEN SPLIT_LINE; ENDIF;MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1);p := p+1;CASE c FROM ' ' TO '`' ['`'] : COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[' ']: p:=p+1;[INRANGE,OUTRANGE] : COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE;PROCEDURE Decode(b)LOCAL m; POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");o:=CREATE_BUFFER(f,f);Decode(o);WRITE_FILE(o, 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 'f' $ fa=f$getdvi(f$parse(f),"ALLDEVNAM") $ Pa=f$getdvi(f$parse(P1),"ALLDEVNAM") $ if fa .eqs. Pa then $ rename &f 'f$parse(P1)' $ if fa .nes. Pa then $ copy &f 'f$parse(P1)' $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X XThe`20following`20MACRO-32`20code`20fragment`20allocates`20a`20TQE,`20by`20inv Voking XEXE$ALLOCTQE,`20for`20repeatedly`20executing`20a`20system`20routine.`20Note`20 Vthat`20the Xroutine`20does`20not`20charge`20any`20quotas. X X`20`20`20`20`20`20`20$TQEDEF`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Timer`20Queue`20Entry X X`20`20`20`20`20`20`20SECONDS`20`20`20`20`20`20`20`20`20=`20-1000*1000*10`20`20 V`20`20`20`20`20`20`20;`201`20second X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20JSB`20`20`20`20`20G`5EEXE$ALLOCTQ VE`20`20`20`20`20`20`20`20`20`20;`20Allocate`20a`20TQE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20`20`20`20#TQE$C_SSREPT,`20 VTQE$B_RQTYPE(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Repeating V`20system`20subroutine X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVAB`20`20`20TQE_EXPIRED_ROUTINE V,`20TQE$L_FPC(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Address`20o Vf`20routine`20to`20execute X.IF`20`20`20`20`20DEFINED`20AXP X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20`20#PSL$C_KERNEL, V`20TQE$L_RMOD(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Kernel`20mo Vde`20desired X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRL`20`20`20`20`20TQE$L_EFN(R2) V`20`20`20`20`20`20`20`20`20`20;`20No`20event`20flag`20necessary X.IF_FALSE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20#PSL$C_KERNEL,`20TQE$B_RMO VD(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRB`20TQE$B_EFN(R2)`20`20`20`20 V`20`20`20`20`20`20`20;`20No`20EFN`20specified X.ENDC X X= X XThe`20following`20is`20a`20MACRO-32`20code`20fragment`20that`20demonstrates`20 Vone`20way`20of Xallocating`20a`20TQE`20and`20charging`20the`20calling`20process`20for`20an`20A VST,`20a`20TQE, Xand`20the`20number`20of`20bytes`20of`20non-paged`20pool`20required`20to`20cont Vain`20the Xactual`20TQE.`20Note`20that`20the`20code`20is`20assumed`20to`20be`20executing V`20in`20kernel Xmode. X X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20Since`20this`20TQE`20will`20execute V`20on`20behalf`20of`20the`20calling`20process,`20we X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20charge`20the`20process`20for`20all V`20the`20system`20resources`20it`20uses.`20`20We`20 X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20begin`20by`20charging`20the`20proce Vss`20for`20both`20a`20TQE`20and`20an`20AST. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20G`5ECTL$GL_PCB, V`20R4`20`20`20`20`20`20`20`20;`20Obtain`20PCB`20address`20in`20R4 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20PCB$L_JIB(R4),`20 VR0`20`20`20`20`20`20`20;`20Copy`20address`20of`20JIB`20to`20R0 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADAWI`20`20`20#-1,`20JIB$W_TQCNT( VR0)`20`20`20`20;`20Charge`20TQE`20against`20the`20process X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BLSS`20`20`20`20200$`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Branch`20if`20no`20quota V`20left X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADAWI`20`20`20#-1,`20PCB$W_ASTCNT V(R4)`20`20`20;`20Decrement`20#`20of`20AST's`20left X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BGEQ`20`20`20`20400$`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Branch`20if`20we`20got`20o Vne X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20Add`20back`20quotas`20subtracted`20 Vif`20we`20encountered`20insufficient`20quotas. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`200$:`20ADAWI`20`20`20#1,`20PCB$W_ASTCNT(R4)`20 V`20`20`20;`20Put`20back`20the`20AST`20quota`20we`20took X`20`20`20`20`20`20`20`20`20200$:`20ADAWI`20`20`20#1,`20JIB$W_TQCNT(R0)`20`20 V`20`20`20;`20Add`20back`20TQE`20quota`20deducted X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVZWL`20`20#SS$_EXQUOTA,`20R0`20 V`20`20`20`20`20`20`20;`20Include`20final`20status`20code X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BRW`20`20`20`20`20ABT`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20And`20return`20to`20cal Vler`20w/`20error X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20Allocate`20non-paged`20pool`20to`20 Vcontain`20the`20TQE.`20`20The`20EXE$DEBIT_BYTCNT_ALO X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20routine`20handles`20debiting`20and V`20checking`20of`20BYTLIM`20quota. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20400$:`20MOVZWL`20`20#TQE$K_LENGTH,`20R1`20`20`20`20 V`20`20`20;`20Size`20of`20a`20TQE`20entry X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20PUSHL`20`20`20R3`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Save`20R3`20contents X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20JSB`20`20`20`20`20G`5EEXE$DEBIT_B VYTCNT_ALO`20`20;`20Some`20non-paged`20pool`20please X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20POPL`20`20`20`20R3`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Restore`20previous`20R3 V`20value X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BLBC`20`20`20`20R0,`200$`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Return`20deducted`20quotas`20 V`26`20exit`20if`20none X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R1`20`20`20`20`20`20now`20contains V`20the`20size`20of`20pool`20that`20was`20allocated X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R2`20`20`20`20`20`20contains`20the V`20address`20of`20the`20pool`20to`20use`20as`20a`20TQE X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRQ`20`20`20`20(R2)`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Say`20not`20on`20queue`20y Vet X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVW`20`20`20`20R1,`20TQE$W_SIZE( VR2)`20`20`20`20`20`20;`20Set`20size`20in`20TQE`20field X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20`20`20`20#DYN$C_TQE,`20TQE V$B_TYPE(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Type`20is V`20TQE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20`20`20`20#TQE$C_SSREPT,`20 VTQE$B_RQTYPE(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Repeating V`20system`20subroutine`20TQE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVAB`20`20`20TQE_EXPIRATON,`20TQ VE$L_FPC(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Address`20o Vf`20routine`20to`20execute X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20R6,`20TQE$L_FR3(R V2)`20`20`20`20`20`20`20;`20EPB`20address`20into`20R3,`20TQE$L_FR3 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRL`20`20`20`20TQE$L_FR4(R2)`20 V`20`20`20`20`20`20`20`20`20`20;`20No`20AST`20address,`20TQE$L_FR4 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRQ`20`20`20`20TQE$Q_TIME(R2)`20 V`20`20`20`20`20`20`20`20`20;`20Skip`20over`20TQE$Q_TIME`20(absolute`20time) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20EMUL`20`20`20`20P4(AP),`20#SECOND VS,`20#0,`20R9;`20Convert`20seconds`20to`20ticks,`20in`20R9/R10 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVQ`20`20`20`20R9,`20`20TQE$Q_DE VLTA(R2)`20`20`20`20;`20Delta`20time`20to`20TQE$Q_DELTA X X.IF`20`20`20`20`20DEFINED`20AXP`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Architectural`20differences X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20#PSL$C_KERNEL,`20 VTQE$L_RMOD(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Mode`20is V`20kernel X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRL`20`20`20`20TQE$L_EFN(R2)`20 V`20`20`20`20`20`20`20`20`20`20;`20Event`20flag`20field X.IF_FALSE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20`20`20`20#PSL$C_KERNEL,`20 VTQE$B_RMOD(R2) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Mode`20is V`20kernel X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRB`20`20`20`20TQE$B_EFN(R2)`20 V`20`20`20`20`20`20`20`20`20`20;`20Event`20flag`20field X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRW`20`20`20`20TQE$B_EFN+2(R2) V`20`20`20`20`20`20`20`20`20;`20Undefined`20word X.ENDC`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20AXP`20vs.`20VAX`20of Vfsets X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRL`20`20`20`20TQE$L_RQPID(R2) V`20`20`20`20`20`20`20`20`20;`20Clear`20rest`20of`20TQE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20CLRL`20`20`20`20TQE$L_CPUTIM(R2) V X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20Enqueue`20TQE.`20R5`20will`20contai Vn`20TQE`20address,`20R0/R1`20quadword`20expiration`20time X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20PUSHL`20`20`20R5`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Preserve`20UCB`20addres Vs X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20R2,`20R5`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Copy`20TQE`20address`20to`20R V5 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20READ_SYSTIME`20R0`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20;`20Obtain`20current`2064`20bit`20time`20i Vn`20R0/R1 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADDL`20`20`20`20TQE$Q_DELTA(R5), V`20R0`20`20`20`20`20;`20Add`20in`20delta`20time,`20low-order`2032`20bits X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADWC`20`20`20`20TQE$Q_DELTA+4(R5) V,`20R1`20`20`20;`20Done`20in`20two`20parts`20to`20catch`20overflow X X`20`20`20`20`20`20`20`201000$:`20JSB`20`20`20`20`20G`5EEXE$INSTIMQ`20`20`20`20 V`20`20`20`20`20`20`20;`20Insert`20in`20the`20queue`20(Start`20the`20clock) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20POPL`20`20`20`20R5`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Restore`20UCB`20address V`20to`20R5 X X X= X XThe`20following`20MACRO-32`20code`20fragment`20handles`20the`20case`20of`20dea Vllocating Xthe`20TQE`20and`20performing`20the`20substitution`20of`20EXE$AR_TQENOREPT: X X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20We`20have`20a`20TQE`20that`20we`20w Vant`20to`20deallocate.`20`20First`20add`20back X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20back`20the`20quotas`20we`20deducted V`20when`20we`20started`20up. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20G`5ECTL$GL_PCB, V`20R4`20`20`20`20`20`20`20`20;`20Get`20current`20process`20PCB`20address X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20PCB$L_JIB(R4),`20 VR0`20`20`20`20`20`20`20;`20Address`20of`20JIB`20to`20R0 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADAWI`20`20`20#1,`20PCB$W_ASTCNT( VR4)`20`20`20`20;`20Put`20back`20the`20AST`20quota`20we`20took X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ADAWI`20`20`20#1,`20JIB$W_TQCNT(R V0)`20`20`20`20`20;`20And`20the`20TQE`20quota`20we`20deducted X X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20Next`20delete`20the`20TQE`20entry V`20and`20substitute`20the`20system-wide`20norepeat`20TQE X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20address`20for`20the`20TQE`20address V`20in`20R5.`20`20This`20is`20done`20as`20we`20must`20return`20to X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20EXE$SWTIMINT`20with`20a`20valid`20T VQE`20address`20in`20R5.`20`20There`20is`20no`20support`20in X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20OpenVMS`20for`20removing`20a`20syst Vem`20routine`20TQE`20other`20than`20this`20substitution. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVB`20`20`20`20#DYN$C_IRP,`20IRP V$B_TYPE(R5) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Set`20type V`20code`20to`20something`20OpenVMS`20knows X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20R5,`20R0`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Get`20TQE`20address`20in`20R0 V X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20JSB`20`20`20`20`20G`5EEXE$DEANONP VAGED`20`20`20`20`20`20`20;`20And`20toss`20TQE`20back`20in`20the`20pool X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20G`5EEXE$AR_TQENOR VEPT,`20R5`20`20;`20Replace`20R5`20contents`20w/`20permanent`20TQE X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20RSB`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Return`20to`20EXE V$SWTIMINT X X X= X XThe`20following`20is`20a`20VAX`20MACRO`20code`20fragment`20that`20demonstrates V`20how`20to`20remove Xa`20previously`20enqueued`20TQE: X X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20We`20must`20now`20cancel`20the`20TQ VE`20we`20have`20outstanding.`20`20We`20call`20the X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20EXE$RMVTIMR`20routine`20to`20do`20i Vt`20for`20us. X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20;`20INPUTS`20to`20EXE$RMVTIMR: X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R2`20`20`20`20`20`20access`20mode X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R3`20`20`20`20`20`20request`20id X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R4`20`20`20`20`20`20type`20of`20ent Vry`20to`20remove X`20`20`20`20`20`20`20;`20`20`20`20`20`20`20R5`20`20`20`20`20`20process`20id X`20`20`20`20`20`20`20; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20G`5ECTL$GL_PCB, V`20R4`20`20`20`20`20`20`20`20;`20Get`20PCB`20address`20in`20R4 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVPSL`20`20R0`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Get`20PSL`20into`20R0 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20EXTZV`20`20`20#PSL$V_PRVMOD,`20#P VSL$S_PRVMOD,`20R0,`20R0 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20JSB`20`20`20`20`20G`5EEXE$MAXACMO VDE`20`20`20`20`20`20`20`20`20;`20Maximize`20access`20modes X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20PCB$L_PID(R4),`20 VR5`20`20`20`20`20`20`20;`20Get`20current`20PID X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20#TQE$C_TMSNGL,`20 VR4`20`20`20`20`20`20`20;`20Indicate`20a`20single`20request X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20#GENLOCK_C_REQIDT V,`20R3`20`20`20;`20Specify`20the`20TQE`20number X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20MOVL`20`20`20`20R0,`20R2`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Copy`20access`20mode X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20JSB`20`20`20`20`20G`5EEXE$RMVTIMQ V`20`20`20`20`20`20`20`20`20`20`20;`20Delete`20timer`20queue`20entry X $ call unpack TMRQUE.DSJ;2 106750331 "" 16 1 1 $ v=f$verify(v) $ exit