$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 15-MAR-1993 14:27:24.82 By user UDAA055 $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $!+ THIS PACKAGE DISTRIBUTED IN 2 PARTS, TO KEEP EACH PART $! BELOW 30 BLOCKS $! $! 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. SSHOOK.TXT;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 = "!" $ 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=filename, P2=checksum, P3=attributes $ 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 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(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 LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE COPY_PREVIOUS(b,n)LOCAL m, s,e;m:=MARK(NONE);MOVE_HORIZONTAL(-b);s:=MARK(NONE);MOVE_HORIZONTAL(n-1);e:= MARK(NONE);POSITION(m);COPY_TEXT(CREATE_RANGE(s,e));ENDPROCEDURE; PROCEDURE ProcessLine LOCAL c,s,l,b,n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;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 '`' ['\']: b:=GetHex(s,p); n:=GetHex(s,p+2); p:=p+4; COPY_PREVIOUS(b,n);['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[' ']: p:=p+1; [INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); 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");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'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' XFrom:`09CBS%UK.AC.NSFNET-RELAY::BITNET.WKUVX1::MACRO32`2014-MAR-1993`2018:00:4 V6.01 XTo:`09UDAA055 XCC:`09 XSubj:`09Sys.`20Serv.`20Hook`20(Was`20RE:`20Imp`20terminates`20Qio`20!) X XVia:`20U\8F11;`20Sun,`2014`20Mar`2093`20\7C06`20GMT XReceived:`20from`20ukcc.uky.edu`20by`20sun3.nsfnet-relay.ac.uk`20with`20Intern Vet`20SMTP`20 X`20`20`20\0303\0404id`20;\330B\A20C1993`2017:59:36`20+0000 X\A80FUKCC.UKY.EDU\A804UKCC.\B808(IBM`20VM`20\9705V2R2)`20\B005BS\A8123375;`20 V\7E0C\7C042:40:28`20EST X\7A0FWKUVX1.BITNET`20(NJE`20origin`20MXMAILER@WKUVX1)`20\6A0B\A308\B308(LMail V`20V1.1d/1.7f)\A30Cid`204564; X\410A\A20C19\A40A6`20-0500 XX-ListName:`20"VMS`20Internals,`20MACRO,`20and`20BLISS`20Discussions"`20\650B V`20`20 XWarnings-To:`20<> XErrors\0E05MacroMan@BITNET.WKUVX1 XOriginal-Sender:\2818Date:`2013\DA0B0:\DA0B`20(EST) XFrom:`20"Brian`20J.`20Schenkenberger,`20VAXman"`20 XReply-\BF05\F107\960ESubject:`20Sys.`20Serv.`20Hook`20(Was`20RE:`20Imp`20termi Vnates`20Qio`20!) XTo:`20macro32`20<\0907\5B0E> XMessage-ID:`20<01GVR8SDS7CI8WVYOS@MONMOUTH-etdl1\C007IL> XX-VMS-\6304IN%"\5E08wkuvx1.bitnet" XMIME-version:`201.0 XContent-transfer-encoding:`207BIT XSender:`20MacroMan%\B00D@EDU.UKY.UKCC X XIn`20a`20previous`20response`20to`20the`20problem`20posted`20under\1905origina Vl`20subject Xtitle`20cited,`20I`20wrote: X X>IF`20you`20want\5504exact`20this`20function`20on`20an`20individual`20basis V`20I`20suggest`20something X>along`20\8204lines`20of\0D05following: X> X>`20`20`20\0303`20`201)`20Get\E003copy\2B04my`20LEIs.`20Read`20\3904Ci\D804art Vicle.`20`20:-)`20:-)\440A2)`20Alloca\2805`20reg\B305f`20P1`20space. X\2C093)`20C\6A04\5904service`20vector`20for`20RMS$SETDDIR`20from\2805P1`20 V\2306\470A\0303tables`20to\7303locat\7504in\3205al\8F08P1`20\9006\840B4)\840Ct V`20prompt\4A04reflect`20default`20direcotory`20routine X\830Do`20a\6A1D5)`20Insert`20a`20call\3204your\2D04code`20into`20\8806rvice V`20\E906\D109\6F0Dfor`20RMS$SETDDIR.\1D0A6)`20All`20done. X> X>Let's`20generalize\6305action`20here. X>\3B081)`20You`20issue\A603$`20SET`20DEFAULT`20`5BABSOLUTE.ELSEWHERE`5D X\3B092)`20The`20CLI`20routine,`20after`20parsing\EC06requests,`20calls`20 V\C30B\DF0Dto`20do\AA05work\A30B3)\6805code\5204've`20place`20in\4D0C\5F07 V\7405P1\2F05\450B4)\E804r`20code,`20now`20hold\A504\7204original\500Dservice V`20vector\AC0D\4606issues\4105CHME`20#.`20`20(READ`20THE`20CITED`20AR VTICLE!\CC04\4C0Doperand`20of\4A0Ainstruction`20is`20never`20guaranteed`20to V`20have\3104\4C0Dsame`20value.)\190A5)`20EXCEPTION!`20SCB+44(16)!`20EXE$CMODEX VEC!\0E05\FD07!`20RET!`20REI!\480A6)`20Back`20in`20your`20P1`20code.`20`20Check V`20return`20status.`20`20If`20OK,\A504n`20set\AA0D\EB04prompt`20with`20\100Bse Vtting\5C05\6904`20loading`20in`20P1`20region. X\4E0CReturn\140B7)\7E04\8A06`20was`20not\8D05simply\AB07!`20Don't`20touch`20 V\D405\8406. X> X>`7B...`7D X>If`20you'd`20like`20some`20help`20\B705any`20of\BE05short`20and`20schetchy V`20details`20above, X>send`20me`20Email`20direct. X XOK.`20Enough!`20`20For`20those`20of`20\FE04that`20asked\5D05fo\2008\1905didn't V... XHere`20it`20is. X XThe`20program`20requires`20CMKRNL\4605TMPMBX`20privileges`20to`20install\CE05h Vook. X_NO_\250Care`20\4F07d`20after\2905`20is\3D08ed. X XBJS-`20/Brian`20Schenkenberger/S\0F0B@Eisner.DECUS.Org/Space`20\E304Rent/ X`20`20`20`20/Independent`20Consult./Tmesis`20\1007ing/Jackson,`20NJ/(908)`2036 V3-7551\4805/VMS`20Softw\C504Support/Vitronics,`20Inc./Eatontow\470C542-0600 V\4704/@Monmouth-ETDL1.Army.Mil/CIS:`2070253,114/ X XCut`20along`20the`20dotted`20line! X........\0808\1010\2020\0E0E X;--------\0808\1010\2020\0E0E X;`20Hook`20SYS$SETDDIR`20to`20provide\CE05"Nick`20DeSmith"`20set\1F04mpt`20cap Vability`20without X;`20\3304continual`20TQE`20expiration`20and`20subsequent`20delivery`20of`20an V\2903ec.`20mode`20AST.\EC53After`20'HOOK'ing`20\AD04system`20service`20vector V`20table,`20a`20call`20to`20\2B05\2407will: X;`201)`20mask`20\1C04registers`20as`20before X;`202)`20encounter`20\2704'new'`20JMP`20instruction`20and`20branch\6B08code V\7003gment`20we X;`20`20`20`20have`20loaded`20in`20P1`20space. X;`203)\9605`20execute\4405CHME\670Dcopied`20from\2105original\F507 X;`204)`20check\EF06tatus`20return\380Cdispatched`20routin\A0045)`20if`20error, V\2604n`20\3906`20immediately.`20`20Else... X;`206)`20Assign`20a`20user`20mode`20channel`20to\6B05temporary`20mailbox`20(mo Vre`20on`20this`20later) X;`207)`20write`20a`20null`20string\4708\3D08to`20set`20off`20\1704executive V\7C06write X;`20`20`20`20attention`20AST. X;`208)`20E\2E0EAST\0904ifies`20prompt\7608(UREW)`20and`20requeues`20\7004 V\6118`20for`20next`20time`20around. X;--------\0808\1010\2020\0E0E X;`20Author:`20/Brian`20Schenkenberger/Ind.`20Consult./TMESIS\1008ing/Jackson, V`20NJ/ X\9D50`20`20`20`20\0404.TITLE`20`20SSHOOK`20`20Demo`20of`20System`20service`20v Vector`20'HOOK'`20technique X\4709IDENT`20`20"VMS`20v5.x%3.070" X\220ALIBRARY`20\1007"SYS$L\1406:LIB"`20\1806;`20check`20this`20library`20too V\490CNK\0D08\4908SYSTEM:SYS.STB\4C05;`20link`20w/`20sy\CC06ymbol`20tabl\B90B V\4E1BDCLDEF\5106\4E08ith`20DCL\4D0E;------\0606\0C0C\1818\1E1E\9D09$DVIDEF V\9D09;`20$GETDVI`20i\D104list`20codes\320AIPLDEF\320BIPL`20definitions\2A0AOP V\290C\2A03VAX`20opcode\3116PRTD\5B0D\3104page`20protections X;-\FF40\0B0B X;`20Mailbox`20fil\690C`20access`20-`20user`20class`20offset\BE0D\8F4ESYSTEM V`20`20=`200`20`20`20`20`20;`20\050315141312`201110`209`208`20`207`206`205`204 V`20`203`202`201`200 XOWNER\2C03=`20\1503\3907,-\5707\0909\1212. XGROUP`20\3A04\5803\3A07`7C`20World`20\0903Group`20\0903Owner`20\0903System`20 V`7C XWORLD\3A0512`20\3A07`60-\5907\0909\1212' X\6905\0505\0606\E705`20L`20P`20W`20R\0909\1212 X;\4408\0808\1010\2020\0C0C X;`20Mailbox`20file`20protection`20access`20-`20privilege`20mask`20definitions X\8C4EREAD`20`20`20`20=`20`5Eb0001 XWRITE\110910 XPHYSICAL=\1104100`20\2F04\0303;`20*`20not`20used`20in`20ma\D406I/O.`20`20Merel Vy`20a`20placeholder. XLOGICAL\5D051000 X\CD4EMBXPRO\BC04<@OWNER>\754E-- X`20`20`20`20\0404.PSECT`20`20$$DATA,PIC,USR,CON,REL,SHR,NOEXE,RD,WRT,NOVEC,PAG VE XSS.PAGE:`20\4B08BLKB\0803512`20\1408\0404;`20System`20Service`20vector`20page V`20storage XVECTOR\4C09`20.QUAD\08030`20\4C0D\4D03address`20rang\38082:\3830BW\BC0D`20.LON VG\3815byte`20offset`20to\CC0F X;--- XSS.HOOK:\3C0F\0F0F\4D04\3E0E`20vector`20'HOOK' XSS.MASK\CC0AWORD\9415.ENTRY`20,`5EM XSS.JMP:\DF0ABYTE\0803OP$_JMP\4B0BVAX`20\1204instruction XSS.OPERAND_SPEC:.\3E07`5EX9F\890EOperand`20specifier,`20Absolute`20addr. XSS.ABSOLUTE_ADR:.LONG\D515'HOOK'`20routine\3F05ess`20goes`20here X;--- XDVI.ITMLST:\DA06WORD\080310,DVI$_DEVNAM\5004GETDVI`20item`20list`20to`20obtain V`20the X`20\810F\991Amailbox`20device`20name`20string\451A,0 X X;------\0606\0C0C\1818\1E1E X;`20The`20'HOOK'`20routine`20assumes`20that\D804`20process`20will`20not`20have V`20CMEXEC`20privilege X;`20to`20modify`20\3704UREW`20page`20where`20\4B07mpt`20\EC06`20is`20stored. V`20\8904refore,`20in X;`20order`20to`20\6D05exec.`20ac\8805\7309,`20an\1B07mode`20AST`20is`20deliver Ved\3F04the X;`20\C308to`20change`20\8E0A\7D05is`20is`20accomplished`20with`20a`20mailbox V`20write X;`20attention`20(executive\7F05)`20\8004which`20is`20enabled`20on`20a`20tempor Vary`20\4F07\7504o X;`20keep\8C05\3C04and`20the`20\7308'alive'`20after`20image`20rundown,\290Dis X;`20created`20\4604a`20channel`20\D604ssigned`20at`20exec.`20mode\F705e`20 V\D705\D50BAST X;`20\3604lso`20queu\3910`20so`20that`20it`20will`20have\8F05elev\8306ccess`20m Vode X;`20necess\FD04to\1404ify`20the`20UREW`20page. X;`20--- X;`20Do\2404\1D04protec\9305schemes`20of`20VMS,`20a`20user\8C06I/O`20request V`20can`20not`20b\7504posted`20to`20a`20channel`20assign\D006a`20more`20privile Vg\B50E.`20`20However,`20a X;`20Us\7008\4B08_can_`20be\540A\B807mailbox.`20`20The`20routin\2608s`20\4D04 V\4308\310E`20and\1004n,`20issues\A203write`20to`20deliver\3005executive X;`20\9305\2606attention`20AST. X;--------\0808\1010\2020\0E0E XSS_HOOK_RTN:`20`20`20\0303\0606\0C0C\0404;`20Start`20of`20'HOOK'`20routine XCHME:\2203.LONG`20`20`200`20\4218we'll`20load`20current`20CMMx`20#<#>`20here X\2C08BLBS\0804R0,10$\4C14check`20system`20service`20return`20status\4D09RET V`20\DB1Esomething's`20wrong...`20tell`20user X;--- X10$\E604`20MOVAL\0803-(SP),R0\4E13tk`20sp.`20for`20chan`20#,`20save`20adr.`20i Vn`20r0 X\2E08$ASSIGN_\EE05\0303DEVNAM=L`5EMBXNAM,-\5609assign`20a\9305`20mode`20channe Vl X\D918CHAN=(R0)`20\A310to`20the`20exec`20\4B05held`20mbx\4C09MOV\E604`20(\E616 V\4403get`20\8207`20number`20from\5905stack X\E509QIOW_S`20EFN=#45,CHAN=R0\DD0Bwrite`20to`20mbx\9D05rigger`20\A508\E311FUNC V=#IO$_WRITEVBLK,\4F04;`20\CF05\5006attention`20AST X\4310P1=#0,P2=#0\DA0Fwhich`20will\4E04ify`20\8804prompt`20string\4E09CALLS`20 V`20`20#1,G`5ESYS$DASSGN`20\4E0Acan`20\4004channel`20and`20clean`20up`20stack X\2D08MOVL\0804#RMS$_NORMAL,R\9F0A;`20tell`20caller`20everything's`20alright V\4B09RET`20\CE07e`20return`20now`20to`20\CD06evious\D604gram\4004eady`20in`20 V\1305ess! X;--- XPMTAST:`20.WORD`20`20`20`5EM;`20save'em`20trashed`20regi Vsters X\E10BAB\0803@#CTL$AG_CLIDATA,R7\AE07get`20base`20of`20\A904CLI`20data`20area V\4809IFNO\8D04#4,PPD$L_PRC(R7),30$\4806is\3F05PPD\3A05`20accessible!?\8F0CL V`20\0803\440E\8C07\8F11proc.`20perm.`20\9316WRT`20#PRC_S_PROMPT,-\1F08\9306pro Vmpt`20string\9906writeable??\4C09\0808PRC_G_\4B06\DF0D==-`20if`20not,`20\A304o Vutta`20here! X\DE0CAB\0803@#PIO$GT_DDSTRING,R8\DE0Athe`20def`20dir`20(ascic)`20\A006\4A0DZBL V`20`20(R8)+,R6`20\A80F\4A0Alength`20of`20\5805ds\4A06\2908CMPL\0804R6,#PRC_S_ V\DD06-1\4908will`20it`20fit`20in\4605prompt? X\4508BLSSU`20`20`2020$`20\8A10\4506branch\2105if\4E07s X\2008SUBL2`20`20`20\820F\D809;`20how`20much`20wont\8B1CADDL\4B04R6,R8\8B15chop V`20that\5106off`20\4904beginning X\2B08MOVL\0804\961Aoutput`20all\5106we`20got. X X20$:`20\4306C3\8E06(R8),PRC_G_\4A06(R7)\960Bopy`20ddstring`20to`20\D906\D80CB3 V\8D044,R6,PRC_B_\4806LEN(\4B0A;`20update\D405\4406`20length X\D80BB`20\4B04`5Ea/`20/,\9410`5BR6`5D\4B07add`20space`20to`20end`20of\9808 X3\E307$QIOW_S`20EFN=#45,CHAN=L`5ECHAN_E,-\7508\4E03read`20mailbox`20data. V\9309\0808FUNC=#IO$_READVBLK!IO$M_NOW,\4B04;`20flushes`20previous`20write V\4911P1=#0,P2=#0\1C09$QIO_S`20\AA25queue`20the\6006`20attention\B31BSETMODE! V\B205WRTATTN,\5709;`20AST`20in`20EXEC`20mode\B514L`5EPMTAST\BB0FMOVL\0804#RMS$ V_NORMAL,R0`20\5D0Atell`20caller`20everything's`20alright\4B09RET`20\7910\0C0C; V`20done\A904executive`20mode X;--- X.ALIGN`20LONG XCHAN_E:`20.LONG\3A03\8F08;`20storage`20for`20the`20\4A0E`20channel`20number XMBXNAM\480A10\4808mbx`20name`20descriptor.`20`20Length`20of\2A04characters. XNAMPTR:\9113filled\D504later.`20.address`20not`20PIC\1B05oaded`20code XNAMBUF:`20.ASCII`20`20/_MBAxxxx:`20/`20\5305buffer\E305\A708\9C03\6907by`20$GE VTDVI X;--- XROUTINE_LEN=.-SS_HOOK_RTN`20\A307\AA09size`20o'`20routine`20to`20be`20P1\9E07 X;------\0606\0C0C\1818\1E1E X`20\7A07.PSECT`20`20$$CODE,PIC,USR,CON,REL,SHR,EXE,RD,NOWRT,NOVEC,PAGE\430AENT VRY`20`20INSTALL$S\E706,0\2209CMPL\0804G`5ESYS$SETDDIR,G`5ERM\0E09\2805;`20Alre +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-