$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 12-APR-1993 08:16:30.81 By user GOATHUNTER (@WKUVX1.BITNET) $! $! 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 $! $! 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. FPARSE.MAR;2 $! 2. NAMXAB.DESC;1 $! 3. WHO.MAR;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 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 '`' ['`']: 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' X`09.TITLE`09FPARSE X`09.IDENT`09/01-000/ X;++ X; X;`20`20Facility:`09FPARSE X; X;`20`20Author:`09Hunter`20Goatley,`20goathunter@WKUVX1.BITNET X; X;`20`20Date:`09December`2020,`201992 X; X;`20`20Functional`20Description: X; X;`09Provide`20easy`20access`20to`20the`20$PARSE`20RMS`20routine.`20`20This`20r Voutine`20is X;`09based`20on`20DCL's`20F$PARSE`20routine.`20`20It`20does`20a`20syntax-only V`20parse`20on X;`09the`20name`20(the`20existence`20of`20the`20directory`20is`20not`20checked) V. X; X;`20`20Modified`20by: X; X;`0901-000`09`09Hunter`20Goatley`09`0920-DEC-1992`2015:55 X;`09`09Original`20version. X; X;----------------------------------------------------------------------------- V-- X; X;`20`20Inputs: X; X;`09`204(AP)`09-`20Descriptor`20for`20buffer`20to`20receive`20information X;`09`208(AP)`09-`20Descriptor`20for`20file`20specification`20to`20be`20parsed X;`0912(AP)`09-`20Descriptor`20for`20default`20file`20specification`20(default V`20is X;`09`09`20`20SYS$DISK:`5B`5D.;) X;`0916(AP)`09-`20Address`20of`20bit`20mask`20describing`20information`20to`20b Ve`20returned X;`09`09`20`20(Default`20is`20NODE::DEVICE:`5BDIRECTORY`5DNAME.TYPE;VERSION) X; X;`09`09`09Bit`205`20set`20-`20return`20node`20name`20(usually`20null) X;`09`09`09Bit`204`20set`20-`20return`20device`20name X;`09`09`09Bit`203`20set`20-`20return`20directory`20name X;`09`09`09Bit`202`20set`20-`20return`20file`20name X;`09`09`09Bit`201`20set`20-`20return`20file`20type`20name X;`09`09`09Bit`200`20set`20-`20return`20version`20number X; X;`20`20Output: X; X;`094(AP)`09-`20Descriptor`20for`20parsed`20file`20specification X; X;`20`20Returns: X; X;`09Status`20value`20in`20R0 X; X;`20`20Calling`20sequence: X; X;`09status`20=`20fparse`20(`26result,`20`26filename,`20`26default,`20`26bitmas Vk); X; X;-- X XRESULT`09=`201`20*`204`09`09`09`09`09;`20Descriptor`20for`20resultant`20name XFILE`09=`202`20*`204`09`09`09`09`09;`20File`20specification XDEFAULT`09=`203`20*`204`09`09`09`09`09;`20Default`20file`20spec XOPTIONS`09=`204`20*`204`09`09`09`09`09;`20Bit`20mask`20for`20return`20info XNUMARGS`20=`204 X XFP_V_NODE`09=`205`09`09`09`09;`20Bit`205`20=`20node`20name`20(usually`20"") XFP_V_DEV`09=`204`09`09`09`09;`20Bit`204`20=`20device`20name XFP_V_DIR`09=`203`09`09`09`09;`20Bit`203`20=`20directory`20name XFP_V_NAME`09=`202`09`09`09`09;`20Bit`202`20=`20file`20name XFP_V_TYPE`09=`201`09`09`09`09;`20Bit`201`20=`20file`20type XFP_V_VER`09=`200`09`09`09`09;`20Bit`200`20=`20version`20number X X`09$SSDEF`09`09`09`09`09;`20System`20service`20status`20symbols X`09$LIBDEF`09`09`09`09`09;`20LIB$`20error`20symbols X`09$RMSDEF`09`09`09`09`09;`20RMS`20definitions X`09$FABDEF`09`09`09`09`09;`20File`20Access`20Block`20symbols X`09$RABDEF`09`09`09`09`09;`20Record`20Access`20Block`20symbols X`09$NAMDEF`09`09`09`09`09;`20Name`20block`20symbols X X`09.PSECT`09_FPARSE_DATA,NOEXE,WRT,LONG,SHR X X; X;***`20`20File`20Access`20Block`20for`20input X; XPARSE_FAB:`09$FAB`09FOP=NAM,`20-`09`09;`20Options:`20NAM`20block X`09`09`09NAM=PARSE_NAM`09`09;`20NAM`20block`20address XPARSE_NAM:`09$NAM`09ESA=PARSE_RESULT,`20-`09;`20Resultant`20string`20address X`09`09`09ESS=NAM$C_MAXRSS`09;`20Buffer`20size X XPARSE_RESULT:`09.BLKB`09NAM$C_MAXRSS`09`09;`20Buffer`20for`20resultant`20name X X`09`09.ALIGN`09LONG XWORK_BUFFER:`09.BLKB`09NAM$C_MAXRSS`09`09;`20Work`20buffer`20for`20final`20str Ving X X`09`09.ALIGN`09LONG XDEFAULT_SPEC:`09.ASCII`09/SYS$DISK:`5B`5D.;/`09`09;`20Default`20default`20file V XDEFAULT_SPEC_L`20=`20.`20-`20DEFAULT_SPEC`09`09;`20...`20specification`20and V`20length X X`09.PSECT`09_FPARSE_CODE,EXE,NOWRT,LONG,PIC,SHR X`09.ENTRY`09FPARSE,`5EM X X`09CMPW`09#NUMARGS,(AP)`09`09`09;`20Were`20X`20arguments`20given? X`09BEQLU`0910$`09`09`09`09;`20Branch`20if`20yes`20-`20we're`20OK X`09MOVL`09#LIB$_WRONUMARG,R0`09`09;`20Return`20error`20code X`09RET`09`09`09`09`09;`20Return`20to`20caller X X`2010$:`09MOVAL`09PARSE_FAB,R6`09`09`09;`20Point`20R3`20to`20FAB X`09MOVAL`09PARSE_NAM,R7`09`09`09;`20Point`20R4`20to`20resultant`20NAM X; X;`20`20Initialize`20structures X; X`09CLRB`09FAB$B_FNS(R6)`09`09`09;`20Clear`20file`20spec`20size X`09CLRL`09FAB$L_FNA(R6)`09`09`09;`20Clear`20file`20spec`20address X`09MOVB`09#DEFAULT_SPEC_L,FAB$B_DNS(R6)`09;`20Set`20default`20file`20spec`20si Vze X`09MOVAB`09DEFAULT_SPEC,FAB$L_DNA(R6)`09;`20Set`20default`20file`20spec`20addr V X X`09MOVL`09DEFAULT(AP),R0`09`09`09;`20Get`20related`20file`20spec`20address X`09BEQLU`0920$`09`09`09`09;`20Branch`20if`20not`20given X`09JSB`09G`5ELIB$ANALYZE_SDESC_R2`09`09;`20Analyze`20for`20length`20and`20addr Vess X`09MOVB`09R1,FAB$B_DNS(R6)`09`09;`20Move`20length`20to`20FAB X`09MOVL`09R2,FAB$L_DNA(R6)`09`09;`20... X`2020$:`09MOVL`09FILE(AP),R0`09`09`09;`20Get`20file`20spec`20address X`09BEQLU`0930$`09`09`09`09;`20Branch`20if`20not`20given X`09JSB`09G`5ELIB$ANALYZE_SDESC_R2`09`09;`20Analyze`20for`20length`20and`20addr Vess X`09MOVB`09R1,FAB$B_FNS(R6)`09`09;`20Move`20length`20to`20FAB X`09MOVL`09R2,FAB$L_FNA(R6)`09`09;`20... X`2030$: X`09$PARSE`09FAB=(R6)`09`09`09;`20Go`20parse`20it X`09BLBS`09R0,40$`09`09`09`09;`20Branch`20if`20successful X`09BRW`09130$`09`09`09`09;`20Branch`20to`20return`20on`20error X`2040$:`09MOVL`09OPTIONS(AP),R9`09`09`09;`20Get`20options`20address X`09BEQLU`0950$`09`09`09`09;`20Branch`20if`20not`20given X`09MOVL`09(R9),R9`09`09`09`09;`20Get`20the`20options X`09BRB`0960$`09`09`09`09;`20Skip`20over`20default`20options X`2050$:`09MOVZBL`09#`5EXFF,R9`09`09`09;`20Set`20all`20options X`2060$:`09MOVAL`09WORK_BUFFER,R3`09`09`09;`20Get`20address`20of`20work`20buffe Vr X`09`09`09`09`09`09; X`09BBC`09#FP_V_NODE,R9,70$`09`09;`20Branch`20if`20node`20is`20not`20returned X`09MOVZBL`09NAM$B_NODE(R7),R0`09`09;`20Get`20length`20of`20node`20name X`09MOVC3`09R0,@NAM$L_NODE(R7),(R3)`09`09;`20Copy`20node`20to`20work`20buffer X`09`09`09`09`09`09; X`2070$:`09BBC`09#FP_V_DEV,R9,80$`09`09;`20Branch`20if`20dev`20is`20not`20retur Vned X`09MOVZBL`09NAM$B_DEV(R7),R0`09`09;`20Get`20length`20of`20device`20name X`09MOVC3`09R0,@NAM$L_DEV(R7),(R3)`09`09;`20Copy`20device`20to`20work`20buffer X`09`09`09`09`09`09; X`2080$:`09BBC`09#FP_V_DIR,R9,90$`09`09;`20Branch`20if`20dir`20is`20not`20retur Vned X`09MOVZBL`09NAM$B_DIR(R7),R0`09`09;`20Get`20length`20of`20directory`20spec X`09MOVC3`09R0,@NAM$L_DIR(R7),(R3)`09`09;`20Copy`20directory`20to`20work`20buff Ver X`09`09`09`09`09`09; X`2090$:`09BBC`09#FP_V_NAME,R9,100$`09`09;`20Branch`20if`20name`20is`20not`20re Vturned X`09MOVZBL`09NAM$B_NAME(R7),R0`09`09;`20Get`20length`20of`20filename X`09MOVC3`09R0,@NAM$L_NAME(R7),(R3)`09`09;`20Copy`20name`20to`20work`20buffer X`09`09`09`09`09`09; X`20100$:`09BBC`09#FP_V_TYPE,R9,110$`09`09;`20Branch`20if`20type`20is`20not`20r Veturned X`09MOVZBL`09NAM$B_TYPE(R7),R0`09`09;`20Get`20length`20of`20type X`09MOVC3`09R0,@NAM$L_TYPE(R7),(R3)`09`09;`20Copy`20type`20to`20work`20buffer X`09`09`09`09`09`09; X`20110$:`09BBC`09#FP_V_VER,R9,120$`09`09;`20Branch`20if`20ver`20is`20not`20ret Vurned X`09MOVZBL`09NAM$B_VER(R7),R0`09`09;`20Get`20length`20of`20version X`09MOVC3`09R0,@NAM$L_VER(R7),(R3)`09`09;`20Copy`20version`20to`20work`20buffer V X`09`09`09`09`09`09; X`20120$:`09MOVAL`09WORK_BUFFER,R0`09`09`09;`20Get`20address`20of`20work`20buff Ver X`09PUSHL`09R0`09`09`09`09;`20Build`20descriptor`20for`20it X`09SUBL3`09R0,R3,-(SP)`09`09`09;`20Get`20length`20on`20stack X`09PUSHAL`09(SP)`09`09`09`09;`20Copy`20work`20buffer`20to`20user's X`09PUSHAQ`09@RESULT(AP)`09`09`09;`20...`20result`20buffer X`09CALLS`09#2,G`5ESTR$COPY_DX`09`09;`20... X X`20130$:`09RET`09`09`09`09`09;`20Return`20to`20caller X X`09.END $ call unpack FPARSE.MAR;2 159253302 "" $! $ create 'f' XThis`20file`20contains`20code`20previously`20published`20in`20the`20March/Apri Vl`201993`20issue`20 Xof`20Digital`20Systems`20Journal.`20It`20was`20first`20run`20as`20part`20of V`20Hunter`20Goatley's`20 Xarticle`20"MACRO`20Made`20Easy:`20Readin',`20Writin',`20and`20MACRO,"`20which V`20ran`20on`20page`20 X35.`20The`20article`20takes`20a`20look`20at`20the`20NAM`20blocks`20and`20eXten Vded`20Attribute`20 XBlocks`20(XAB).`20The`20NAM`20blocks`20are`20used`20in`20processing`20file`20n Vames,`20while`20the`20 XXABs`20are`20used`20for`20additional`20file`20information. $ call unpack NAMXAB.DESC;1 1830963560 "" $! $ create 'f' X`09.TITLE`09WHO X`09.IDENT`09/01-000/ X;++ X; X;`20`20Program:`09WHO.MAR X; X;`20`20Author:`09Hunter`20Goatley,`20goathunter@WKUVX1.BITNET X; X;`20`20Date:`09December`2020,`201992 X; X;`20`20Abstract:`09Sample`20program`20to`20read`20a`20record`20from`20SYSUAF. X; X;`20`20Modified`20by: X; X;`0901-000`09`09Hunter`20Goatley`09`0920-DEC-1992`2014:32 X; X;-- X`09.LIBRARY`09/SYS$LIBRARY:LIB.MLB/`09;`20For`20$UAFDEF X`09$UAFDEF`09`09`09`09`09;`20Include`20SYSUAF`20symbols X X; X;`20`20Define`20a`20macro`20to`20check`20for`20errors. X; X`09.MACRO`09ON_ERR`09DEST,?HERE X`09BLBS`09R0,HERE X`09BRW`09DEST XHERE:`09.ENDM`09ON_ERR X X; X;`20`20The`20data`20psect X; X`09.PSECT`09WHO_DATA,NOEXE,WRT,LONG X; X;`20`20The`20FAB`20for`20the`20SYSUAF`20file.`20`20Note`20that`20SHR`20is`20gi Vven`20so`20we`20don't`20lock X;`20`20others`20out`20of`20the`20SYSUAF`20file`20while`20we`20have`20it`20open V!! X; XSYSFAB:`09`09$FAB`09FNM=,`20-`09;`20The`20file`20name X`09`09`09FAC=GET,`20-`09`09`09;`20Want`20to`20GET`20from`20it X`09`09`09SHR=`09;`20Allow`20other`20access X X; X;`20`20The`20RAB`20to`20read`20a`20record`20based`20on`20the`20username`20key. V X; XSYSRAB:`09`09$RAB`09FAB=SYSFAB,`20-`09`09;`20The`20File`20Access`20Block X`09`09`09RAC=KEY,`20-`09`09;`20Record`20ACcess`20is`20keyed X`09`09`09KRF=0,`20-`09`09;`20Key`20of`20ReFerence`20=`20position`200 X`09`09`09KSZ=12,`20-`20`09`09;`20The`20default`20Key`20SiZe X`09`09`09KBF=FOR_BUFF,`20-`09`09;`20Key`20is`20found`20in`20FOR_BUFF X`09`09`09USZ=UAF$K_LENGTH,`20-`09;`20Buffer`20is`201420`20chars`20long X`09`09`09UBF=SYSREC`09`09;`20Addr`20of`20SYSUAF`20record`20buffer X; XSYSREC:`09`09.BLKB`09UAF$K_LENGTH X; XFAO_STR:`09.ASCID`09/Username:`20`20!AD`20`20`20Owner:`20`20!AC/ X`09`09.ALIGN`09LONG XFAO_OUT_D:`09.WORD`09256`09`09`09;`20Descriptor`20for`20$FAO`20output X`09`09.BYTE`09DSC$K_DTYPE_T`09`09;`20...`20buffer X`09`09.BYTE`09DSC$K_CLASS_S`09`09;`20... X`09`09.ADDRESS`20.+4`09`09`09;`20... X`09`09.BLKB`09256`09`09`09;`20... X XFOR_BUFF_D:`09.WORD`09256`09`09`09;`20LIB$GET_FOREIGN`20buffer X`09`09.BYTE`09DSC$K_DTYPE_T`09`09;`20...`20descriptor X`09`09.BYTE`09DSC$K_CLASS_S`09`09;`20... X`09`09.ADDRESS`20FOR_BUFF`09`09;`20... XFOR_BUFF:`09.BLKB`09256 X XPROMPT_D:`09.ASCID`09/Username:`20/ X`09`09.ALIGN`09LONG XMSG1:`09`09.ASCID`09/Username`20not`20found./ X`09`09.ALIGN`09LONG X XGET_FOREIGN_ARGLST: X`09`09.LONG`093`09`09`09;`203`20parameters X`09`09.ADDRESS`20FOR_BUFF_D`09`09;`20Input`20buffer X`09`09.ADDRESS`20PROMPT_D`09`09;`20Prompt`20descriptor`20address X`09`09.ADDRESS`20FOR_BUFF_D`09`09;`20Length`20of`20username`20given X X;============================================================================= V== X; X`09.PSECT`09WHO,EXE,NOWRT,LONG X`09.ENTRY`09WHO,`5EM<> X; X;`20`20Get`20the`20username`20from`20the`20command`20line,`20prompting`20the V`20user`20if`20it's`20absent. X; X`09CALLG`09GET_FOREIGN_ARGLST,-`09`09;`20Get`20the`20username`20off`20the X`09`09G`5ELIB$GET_FOREIGN`09`09;`20...`20command`20line X`09`09`09`09`09`09; X`09MOVZWL`09FOR_BUFF_D,R1`09`09`09;`20Get`20its`20length X`09BNEQU`0910$`09`09`09`09;`20Branch`20if`20something`20given X`09BRW`0940$`09`09`09`09;`20Exit`20if`20nothing`20or`20error X; X;`20`20Use`20the`20length`20of`20the`20username`20given`20as`20the`20size`20of V`20the`20key`20for`20the`20$GET. X;`20`20Note`20that`20a`20better`20way`20to`20do`20this`20would`20be`20to`20bla Vnk-pad`20the`20key`20to`20the X;`20`20size`20of`20the`20SYSUAF`20key`20(UAF$S_USERNAME),`20but`20using`20the V`20size`20specified X;`20`20will`20cause`20RMS`20to`20retrieve`20the`20first`20record`20that`20matc Vhes`20the`20partial X;`20`20username. X; X`2010$:`09MOVB`09R1,SYSRAB+RAB$B_KSZ`09`09;`20Set`20the`20key`20size`20in`20th Ve`20RAB X`09$OPEN`09FAB=SYSFAB`09`09`09;`20Open`20the`20SYSUAF`20file X`09ON_ERR`0940$`09`09`09`09;`20Branch`20on`20error X`09$CONNECT`20-`09`09`09`09;`20Connect`20the`20RAB X`09`09RAB=SYSRAB`09`09`09;`20... X`09ON_ERR`0920$`09`09`09`09;`20Branch`20on`20any`20error X; X;`20`20Now`20try`20to`20$GET`20the`20record. X; X`09$GET`09RAB=SYSRAB`09`09`09;`20... X`09ON_ERR`0920$`09`09`09`09;`20Branch`20on`20error X`09MOVAL`09SYSREC+UAF$T_USERNAME,R0`09;`20Point`20to`20username X`09MOVAL`09SYSREC+UAF$T_OWNER,R1`09`09;`20Point`20to`20owner`20name X; X;`20`20Now`20use`20the`20$FAO`20system`20service`20to`20Format`20the`20ASCII V`20Output. X; X`09$FAO_S`09CTRSTR=FAO_STR,`20-`09`09;`20Format`20the`20output`20string X`09`09OUTLEN=FAO_OUT_D,`20-`09`09;`20...`20The`20length`20returned X`09`09OUTBUF=FAO_OUT_D,`20-`09`09;`20... X`09`09P1=#12,-`09`09`09;`20...`20Only`20use`2012`20bytes X`09`09P2=R0,-`09`09`09`09;`20... X`09`09P3=R1`09`09`09`09;`20... X`09PUSHAQ`09FAO_OUT_D`09`09`09;`20Print`20it X`09CALLS`09#1,G`5ELIB$PUT_OUTPUT`09`09;`20... X`09`09`09`09`09`09; X`2020$:`09CMPL`09#RMS$_RNF,R0`09`09`09;`20Valid`20user? X`09BNEQU`0930$`09`09`09`09;`20Yes`20-`20continue X`09PUSHAQ`09MSG1`09`09`09`09;`20Print`20"Username`20not`20found." X`09CALLS`09#1,G`5ELIB$PUT_OUTPUT`09`09;`20... X X`2030$:`09PUSHL`09SYSRAB+RAB$L_STV`09`09;`20Push`20the`20RAB`20STV`20value X`09CLRL`09-(SP)`09`09`09`09;`20No`20FAO`20args`20for`20STS X`09PUSHL`09SYSRAB+RAB$L_STS`09`09;`20Push`20the`20RAB`20STS`20value X`09CALLS`09#3,G`5ELIB$SIGNAL`09`09`09;`20Signal`20it X`09$CLOSE`09FAB=SYSFAB`09`09`09;`20Close`20SYSUAF X`09BRB`0950$`09`09`09`09;`20Branch`20to`20exit X X`2040$:`09PUSHL`09SYSFAB+FAB$L_STV`09`09;`20Push`20the`20STV`20value X`09CLRL`09-(SP)`09`09`09`09;`20No`20FAO`20args`20for`20STS X`09PUSHL`09SYSFAB+FAB$L_STS`09`09;`20Push`20the`20STS`20value X`09CALLS`09#3,G`5ELIB$SIGNAL`09`09`09;`20Signal`20the`20error X`2050$:`09RET`09`09`09`09`09;`20Return`20to`20caller`20(VMS) X X`09.END`09WHO $ call unpack WHO.MAR;1 924751036 "" $ v=f$verify(v) $ exit