$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : MAILBOX_PEEK $! By : mark.berryman@MVB.SAIC.COM $! Date : 10-JAN-1994 16:18:04.78 $! Using: VMS_SHARE 8.4, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $!+ THIS PACKAGE DISTRIBUTED IN 3 PARTS, TO KEEP EACH PART $! BELOW 100 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. AAAREADME.TXT;2 $! 2. BUILD.COM;1 $! 3. DESCRIP.MMS;8 $! 4. MBOX.MAR;41 $! 5. MBOX_CLD.CLD;5 $! 6. MBOX_HELP.HLP;2 $! 7. MBOX_HELP.RNO;2 $! 8. MBOX_MSG.MSG;3 $! 9. MBX_MSG.MSG;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,P4=size $ 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(b);DELETE(m);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 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");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' XI`20have`20worked`20on`20a`20number`20of`20real`20time`20systems`20under`20VMS V`20and`20I`20have`20always Xmeant`20to`20write`20a`20peek`20into`20mailboxs`20program.`20About`20a`20year V`20ago`20I`20finally`20got Xround`20to`20it.`20The`20program`20knows`20about`20mailbox`20message`20formats V`20for`20V5.4`20thru XV6.0.`20It`20will`20need`20changing`20if/when`20DEC`20ever`20change`20it`20in V`20a`20future`20release. X XTo`20run`20the`20program`20define`20it`20as`20a`20foreign`20command: X Xmbox`20:==`20$fullfilespec:mbox.exe X X*NOTE* X XIf`20you`20do`20make`20any`20changes,`20find`20any`20bugs`20or`20even`20just V`20have`20some`20good`20ideas Xabout`20the`20program`20*PLEASE*`20let`20me`20know`20about`20them.`20If`20you V`20think`20there`20are Xsynchronisation`20problems`20with`20the`20code`20let`20me`20know. X XProblems: X XIt`20does`20not`20see`20the`20first`20few`20mailboxs`20in`20the`20system`20as V`20these`20are`20not`20returned Xby`20sys$device_scan. X XDeassigning`20a`20channel`20to`20a`20mailbox`20seems`20to`20cause`20all`20proc Vesses`20in`20RWMBX`20to Xbecome`20computable.`20So`20in`20order`20to`20see`20processes`20in`20RWMBX`20t Vhe`20program`20does`20an Xarbitrary`20wait`20after`20deassigning`20mailbox`20channels`20to`20full`20mail Vboxes.`20This`20may Xbe`20subject`20to`20timing`20windows X XI`20dont`20like`20the`20output`20format`20that`20much`20but`20I`20just`20dont V`20have`20the`20brains`20to`20come Xup`20with`20anything`20better. X XHave`20fun. X XNeill`20Clift`20(neill@macro.demon.co.uk)`207-Dec-1993 $ call unpack AAAREADME.TXT;2 1782202211 "" 3 1 9 $! $ create 'f' X$`20MACRO`20/NOLIST/OBJECT=MBOX.OBJ`20MBOX.MAR X$`20SET`20COMMAND`20/OBJECT=MBOX_CLD.OBJ`20`20MBOX_CLD.CLD X$`20MESSAGE`20/NOLIST/OBJECT=MBOX_MSG.OBJ`20MBOX_MSG.MSG X$`20link/notrace`20mbox.obj,`20mbox_cld.obj,`20mbox_msg.obj X$`20runoff`20mbox_help.rno/out=mbox_help.hlp X$`20! $ call unpack BUILD.COM;1 654898289 "" 1 2 9 $! $ create 'f' Xobjects`20=`20mbox.obj,`20mbox_cld.obj,`20mbox_msg.obj X Xall`20:`20mbox.exe,`20mbox_help.hlp X`20`20`20! X Xmbox.exe`20:`20$(objects) X`20`20`20link/notrace`20$(objects) X Xmbox_help.hlp`20:`20mbox_help.rno X`20`20`20runoff`20mbox_help.rno/out=mbox_help.hlp $ call unpack DESCRIP.MMS;8 2137605678 "" 1 3 9 $! $ create 'f' X`09.title`09mbox`20get`20contents`20of`20mailbox X; X;`20Copyright`20(C)`201993`20Neill`20Clift`20(neill@macro.demon.co.uk). X; X;`20This`20program`20comes`20without`20any`20warranty.`20The`20author`20does V`20not`20accept`20any X;`20responsibility`20for`20any`20damage`20caused`20by`20the`20use`20of`20this V`20program.`20This X;`20program`20is`20not`20in`20the`20public`20domain`20but`20may`20be`20copied V`20freely`20so`20long`20as`20this X;`20copyright`20notice`20remains. X; X;`20Please`20send`20any`20modifications`20to`20the`20author. X; X;`20This`20program`20allows`20a`20privileged`20user`20to`20view`20the`20conten Vts,`20pending`20I/O`20and X;`20attention`20ASTs`20on`20almost`20any`20mailbox`20in`20the`20system. X; X`09.disable`20global X; X`09.library`20/sys$library:lib.mlb/ X`09.link`20/sys$system:sys.stb//selective_search X; X`09$acbdef`09`09`09`09`09;`20AST`20control`20block`20defs X`09$ccbdef`09`09`09`09`09;`20Channel`20control`20block`20defs X`09$climsgdef`09`09`09`09;`20CLI$...`20routines X`09$dcdef`09`09`09`09`09;`20Device`20classes X`09$devdef`09`09`09`09`09;`20Device`20attributes X`09$dvidef`09`09`09`09`09;`20$GETDVI`20constants X`09$dvsdef`09`09`09`09`09;`20Device`20scan`20definitions X`09$ipldef`09`09`09`09`09;`20Define`20IPL`20values X`09$irpdef`09`09`09`09`09;`20I/O`20request`20packet`20offsets X`09$jpidef`09`09`09`09`09;`20$GETJPI`20constants X`09$lnmstrdef`09`09`09`09;`20Logical`20name`20block`20defs X`09$namdef`09`09`09`09`09;`20Name`20block`20defs X`09$pcbdef`09`09`09`09`09;`20Process`20control`20block`20offsets X`09$phddef`09`09`09`09`09;`20Process`20header`20offsets X`09$rsndef`09`09`09`09`09;`20System`20resource`20definitions X`09$ssdef`09`09`09`09`09;`20System`20service`20definitions X`09$statedef`09`09`09`09;`20Process`20state`20definitions X`09$strdef`09`09`09`09`09;`20String`20return`20codes X`09$stsdef`09`09`09`09`09;`20Completion`20status`20bitfields X`09$ucbdef`09`09`09`09`09;`20Unit`20control`20block`20defs X; X;`20Define`20new`20read`20queue`20for`20V5.5 X; X`09.if`09ndf`20ucb$l_mb_readqfl Xucb$l_mb_readqfl`20=`20ucb$l_mb_rast X`09.if_false X`09assume`09ucb$l_mb_rast`20eq`20ucb$l_mb_readqfl X`09.endc X; X;`20External`20routines. X; X`09.external`20lib$get_foreign,`20-`09`09;`20Get`20command`20line X`09`09lib$scopy_dxdx,`20-`09`09;`20Copy`20string`20descriptor X`09`09lib$signal`09`09`09;`20Signal`20error`20condition X`09.external`20lib$wait X`09.external`20str$match_wild,`20-`09`09;`20Match`20wildcard`20string X`09`09str$upcase`09`09`09;`20Uppercase`20a`20string X`09.external`20cli$get_value,`20-`09`09;`20Get`20value`20from`20command`20line V X`09`09cli$dcl_parse,`20-`09`09;`20Parse`20the`20command`20line X`09`09cli$present`09`09`09;`20Item`20on`20command`20line? X; X;`20External`20JSBs. X; X`09.external`20exe$ipid_to_epid,`20-`09`09;`20Conv`20pid`20from`20intrn`20to V`20extrn X`09`09exe$probew_dsc`09`09`09;`20Probe`20a`20descriptor`20for`20write X`09.external`20ioc$verifychan`09`09;`20Verify`20channel`20number X`09.external`20lnm$lockr,`20-`09`09`09;`20lock`20logical`20name`20tables X`09`09lnm$unlock`09`09`09;`20Unlock`20logical`20name`20tables X; X;`20External`20data. X; X`09.external`20ctl$gl_pcb`09`09`09;`20Address`20of`20current`20PCB X`09.external`20vms$gl_license_version`09;`20Current`20binary`20VMS`20version X`09.external`20sch$gl_maxpix`09`09`09;`20Maximum`20process`20index X`09.external`20sch$gl_pcbvec`09`09`09;`20PCB`20vector`20array X; X;`20Define`20the`20command`20table. X; X`09.external`20mbox_clitable X; X;`20Define`20error`20messages. X; X`09.external`20mbox__errcon,`20-`09`09;`20Error`20connecting`20to`20file X`09`09mbox__errcre,`20-`09`09`09;`20Error`20creating`20file X`09`09mbox__errput`09`09`09;`20Error`20during`20put X; X;`20Define`20mailbox`20structures.`20These`20structures`20are`20linked`20onto V`20the`20ucb$l_fqfl X;`20and`20ucb$l_fqbl`20as`20a`20queue.`20Prior`20to`20version`205.5`20they`20h Vad`20the`20structure`20of X;`20mbx4`20and`20after`20mbx5 X; X;`20Define`20the`20constant`20region X; X`09$defini`09mbx X`09$def`09mbx_l_flink`09.long`09`09;`20Forward`20link X`09$def`09mbx_l_blink`09.long`09`09;`20Backward`20link X`09$def`09mbx_w_size`09.word`09`09;`20Size`20of`20block X`09$def`09mbx_b_type`09.byte`09`09;`20Type`20of`20block X`09$def`09mbx_b_func`09.byte`09`09;`20I/O`20function`20code X`09$equ`09mbx_k_fixed`09.`09`09;`20Size`20of`20fixed`20portion X`09$defend`09mbx X; X;`20Now`20define`20structure`20up`20to`20V5.4-3 X; X`09$defini`09mbx4 X`09$def`09mbx4_r_fixed`09.blkb`09mbx_k_fixed`09;`20Fixed`20portion X`09$def`09mbx4_w_msgsiz`09.word`09`09`09;`20Message`20size X`09$def`09mbx4_l_irpadr`09.long`09`09`09;`20Address`20of`20IRP X`09$def`09mbx4_l_pid`09.long`09`09`09;`20Process`20id`20of`20writer X`09$equ`09mbx4_r_msg`09.`09`09`09;`20Start`20of`20message X`09$defini`09mbx4 X; X;`20Now`20define`20structure`20as`20of`205.5 X; X`09$defini`09mbx5 X`09$def`09mbx5_r_fixed`09.blkb`09mbx_k_fixed`09;`20Fixed`20portion X`09$def`09mbx5_l_irpadr`09.long`09`09`09;`20Address`20of`20IRP X`09$def`09mbx5_l_pid`09.long`09`09`09;`20Process`20id`20of`20writer X`09$def`09mbx5_r_unk1`09.blkl`093`09`09;`20God`20knows`20what! X`09$def`09mbx5_w_msgsiz`09.word`09`09`09;`20Message`20size X`09$def`09mbx5_w_unk2`09.blkw`09`09`09;`20God`20knows`20what! X`09$equ`09mbx5_r_msg`09.`09`09`09;`20Start`20of`20message X`09$defend`09mbx5 X; X;`20Define`20symbols X; Xoffset_size`20=`204`09;`20Size`20of`20offset`20into`20buffer`20in`20bytes Xdefault_line_length`20=`2080`09`09;`20Size`20of`20line`20by`20default X; X`09.psect`09mbox_rdata`20nowrt`20rd`20noexe`20shr X; Xdvilst:`09.word`094,`20dvi$_devbufsiz X`09.address`20mbxdevbufsiz X`09.long`090 X`09.word`094,`20dvi$_devdepend X`09.address`20mbxdevdepend X`09.long`090 X`09.word`09devnam_len,`20dvi$_devnam X`09.address`20devnam_b,`20devnam X`09.word`094,`20dvi$_opcnt X`09.address`20mbxopcnt X`09.long`090 X`09.word`094,`20dvi$_refcnt X`09.address`20mbxrefcnt X`09.long`090 X`09.long`090 X X; X;`20Item`20list`20to`20get`20device`20buffer`20size. X; Xtrmdvilst: X`09.word`094,`20dvi$_devbufsiz X`09.address`20line_length X`09.long`090 X`09.long`090 X; Xjpilst:`09.word`09mbxprocnam_len,`20jpi$_prcnam X`09.address`20mbxprocnam_b,`20mbxprocnam X`09.long`090 X; Xdvslst:`09.word`094,`20dvs$_devclass X`09.address`20devclass X`09.long`090 X`09.word`094,`20dvs$_devtype X`09.address`20devtype X`09.long`090 Xdevclass: X`09.long`09dc$_mailbox Xdevtype: X`09.long`09dt$_mbx X; X;`20Produce`20a`20table`20to`20convert`20a`20radix`20into`20a`20number`20of`20 Vdigits`20to`20represent`20a X;`20given`20data`20size. X; Xradix:`09.long`090`20;`200 X`09.long`090`20;`201 X`09.long`090`20;`202 X`09.long`090`20;`203 X`09.long`090`20;`204 X`09.long`090`20;`205 X`09.long`090`20;`206 X`09.long`090`20;`207 X`09.address`20octsize X`09.long`090`20;`209 X`09.address`20decsize X`09.long`090`20;`2011 X`09.long`090`20;`2012 X`09.long`090`20;`2013 X`09.long`090`20;`2014 X`09.long`090`20;`2015 X`09.address`20hexsize X; Xdecsize: X`09.byte`090,`203,`205,`208,`2010 Xhexsize: X`09.byte`090,`202,`204,`206,`208 Xoctsize: X`09.byte`090,`203,`206,`208,`2011 X; Xhdrctrstr1: X`09.ascid`09`5C!/Device:`20!AS`20(!AS),`20Channels:`20!UL,`20Operations:`20!UL V`5C Xhdrctrstr2: X`09.ascid`09`5C!/`20`20`20Total`20size:`20!UL,`20Remaining:`20!UL,`20`5C- X`09`09`5CMessage`20size:`20!UL,`20Msgs:`20!UW`5C X; Xattnctrstr: X`09.ascid`09`5C!/`20`20`20!AS,`20PID:`20!XL`20(!AF),`20Mode:`20!AF,`20ADR:`20! VXL,`20PRM:`20!XL`5C X; Xrwmbxctrstr: X`09.ascid`09`5C!/`20`20`20RWMBX,`20PID:`20!XL`20(!AF)`5C X; Xmsgctrstr: X`09.ascid`09`5C!/`20`20`20Message`20number:`20!UL,`20!UW`20byte!%S,`20Written V`20by:`20!XL`20`5C- X`09`09`5C(!AF)!AS!/`5C X; Xhextab:`09.ascii`09/0123456789ABCDEF/ X; X;`20Strings`20to`20describe`20if`20the`20current`20mailbox`20message`20being V`20displayed`20has`20a X;`20process`20waiting`20for`20the`20message`20to`20be`20read`20by`20another`20 Vprocess. X; Xwaitchars: X`09.address`20notwaiting,`20- X`09`09waiting`09`09`09;`200`20=`20Not`20waiting,`201`20=`20Wait`20for`20reader V Xnotwaiting: X`09.ascid`09// Xwaiting: X`09.ascid`09/`20Waiting/ X; Xattn:`09.address`20readattn,`20wrtattn,`20readio X; Xreadattn: X`09.ascid`09/READATTN/ Xwrtattn: X`09.ascid`09/WRTATTN/ Xreadio:`09.ascid`09/READIO/ X; Xmodes:`09.ascii`09/KESU/ X; Xunavailable: X`09.ascid`09/Nonexistent/ X; Xnone:`09.ascid`09/None/ X; X;`20To`20start`20the`20ball`20rolling`20we`20prime`20CLI$DCL_PARSE`20with`20ju Vst`20the`20verb X; Xverb:`09.ascid`09/MBOX/`09`09`09`09;`20Verb`20name X; Xoutput_qual: X`09.ascid`09/OUTPUT/`09`09`09;`20/OUTPUT X; Xmailbox_qual: X`09.ascid`09/MAILBOX/`09`09`09;`20P1 X; Xbyte_qual: X`09.ascid`09/BYTE/ X; Xword_qual: X`09.ascid`09/WORD/ X; Xlongword_qual: X`09.ascid`09/LONGWORD/ X; Xdecimal_qual: X`09.ascid`09/DECIMAL/ X; Xhexadecimal_qual: X`09.ascid`09/HEXADECIMAL/ X; Xoctal_qual: X`09.ascid`09/OCTAL/ X; Xrwmbx_qual: X`09.ascid`09/RWMBX/`09`09`09`09;`20Only`20display`20RWMBX`20procs X; Xread_qual: X`09.ascid`09/READ_ATTENTION/`09`09;`20Only`20display`20read`20attentions X; Xwrite_qual: X`09.ascid`09/WRITE_ATTENTION/`09`09;`20Only`20display`20write`20attentions X; Xpending_qual: X`09.ascid`09/PENDING_READS/`09`09`09;`20Only`20display`20pending`20reads X; Xmessages_qual: X`09.ascid`09/MESSAGES/`09`09`09;`20Only`20display`20contents X; Xheaders_qual: X`09.ascid`09/HEADERS/`09`09`09;`20Display`20all`20headers X; X`09.psect`09mbox_wdata`20wrt`20rd`20noexe`20noshr`20quad X; Xoutfab:`09$fab`09dnm`20=`20,`20-`09;`20Default`20file V`20name X`09`09fac`20=`20put,`20-`09`09`09;`20Only`20doing`20puts X`09`09fop`20=`20,`20-`09`09;`20Deferred`20writes,`20sequential X`09`09nam`20=`20outnam,`20-`09`09`09;`20Use`20name`20block X`09`09org`20=`20seq,`20-`09`09`09;`20Sequential`20file X`09`09rat`20=`20cr,`20-`09`09`09;`20Carriage`20control`20=`20return X`09`09rfm`20=`20var,`20-`09`09`09;`20Variable`20length`20records X`09`09shr`20=`20shrget`09`09`09;`20Allow`20other`20readers X; Xoutrab:`09$rab`09fab`20=`20outfab,`20-`09`09`09;`20Use`20with`20this`20fab X`09`09rac`20=`20seq,`20-`09`09`09;`20Sequential`20access X`09`09rbf`20=`20outbuf_b,`20-`09`09;`20Output`20buffer`20address X`09`09rop`20=`20wbh`09`09`09;`20Write`20behind X; Xoutnam:`09$nam`09esa`20=`20ess_b,`20-`09`09`09;`20Expanded`20name`20buffer X`09`09ess`20=`20ess_len,`20-`09`09;`20Expanded`20name`20size X`09`09rsa`20=`20rss_b,`20-`09`09`09;`20Resultant`20name`20buffer X`09`09rss`20=`20rss_len`09`09`09;`20Resultant`20name`20size X; Xmbxprocnam_len`20=`2015`09`09`09`09;`20Size`20of`20a`20process`20name Xmbxprocnam: X`09.word`09mbxprocnam_len,`200 X`09.address`20mbxprocnam_b X; Xmbxlognam_len`20=`2020`09`09`09`09;`20Size`20of`20mailbox`20logical Xmbxlognam: X`09.word`09mbxlognam_len,`200 X`09.address`20mbxlognam_b X; X;`20Large`20buffer`20to`20contain`20any`20message X; Xmbxbuf_len`20=`2065535 Xmbxbuf:`09.word`09mbxbuf_len,`200 X`09.address`20mbxbuf_b X; Xdevnam_len`20=`2064`09`09`09`09`09;`20Name`20of`20mailbox Xdevnam:`09.word`09devnam_len,`200 X`09.address`20devnam_b X; Xwilddev_len`20=`2064`09`09`09`09;`20Wildcard`20mailbox`20name Xwilddev:.word`09wilddev_len,`200 X`09.address`20wilddev_b X; Xoutbuf_len`20=`20255 Xoutbuf:`09.word`09outbuf_len,`200 X`09.address`20outbuf_b X; Xoutput_len`20=`20nam$c_maxrss`09`09`09;`20Size`20of`20output`20filename Xoutput:`09.word`09output_len,`200 X`09.address`20output_b X; X`09.psect`09mbox_dzero`20wrt`20rd`20noexe`20noshr X; Xcontxt:`09.quad`090`09`09`09`09;`20Device`20scan`20context X; Xiosb:`09.quad`090 X; Xmbxctx:`09.long`090`09`09`09`09;`20Context`20for`20looping`20calls X; Xmbxpid:`09.long`090`09`09`09`09;`20Process`20ID`20of`20mailbox`20writer X; Xmbxwait:.long`090`09`09`09`09;`20Process`20is`20waiting`20reader X; Xmbxopcnt: X`09.long`090`09`09`09`09;`20Operations`20completed X; Xmbxrefcnt: X`09.long`090`09`09`09`09;`20References`20to`20mailbox X; Xmbxdevbufsiz: X`09.long`090`09`09`09`09;`20Device`20buffer`20size`20(record) X; Xmbxiniquo: X`09.long`090`09`09`09`09;`20Initial`20device`20quota X; Xmbxbufquo: X`09.long`090`09`09`09`09;`20Device`20buffer`20size X; Xmbxdevdepend: X`09.long`090`09`09`09`09;`20Low`20word`20=`20message`20count X; Xmbxmode: X`09.long`090`09`09`09`09;`20Mode`20of`20attention`20ASTs X; Xmbxastadr: X`09.long`090`09`09`09`09;`20AST`20address`20of`20attention`20ASTs X; Xmbxastprm: X`09.long`090`09`09`09`09;`20AST`20param`20of`20attention`20ASTs X; Xflg_v_headerdone`20=`200`09`09`09`09;`20Printed`20out`20header`20yet? X; Xflags:`09.long`090`09`09`09`09;`20Working`20flags X; Xcfl_v_rwmbx`20`20`20`20=`200 Xcfl_v_read`20`20`20`20`20=`201 Xcfl_v_write`20`20`20`20=`202 Xcfl_v_messages`20=`203 Xcfl_v_headers`20`20=`204 Xcfl_v_pending`20`20=`205 X; Xcliflags: X`09.long`090`09`09`09`09;`20Flags`20for`20qualifiers`20present Xclinegflags: X`09.long`090`09`09`09`09;`20Negated`20version`20of`20the`20above X; Xmbxchan:.word`090`09`09`09`09;`20Channel`20to`20mailbox X; X;`20Byte`20`20`20`20`20=`200 X;`20Word`20`20`20`20`20=`201 X;`20Longword`20=`202 X; Xalignment: X`09.long`090`09`09`09`09;`20Data`20alignment X; Xsize:`09.long`090`09`09`09`09;`20Size`20of`20data X; Xbase:`09.long`090`09`09`09`09;`20Base`20to`20use X; Xbytes_per_line: X`09.long`090`09`09`09`09;`20Bytes`20to`20display`20on`20line X; Xline_length: X`09.long`090`09`09`09`09;`20length`20of`20line`20in`20bytes X; Xfrcpmt:`09.long`090`09`09`09`09;`20Force`20prompting`20flag X; Xdevnam_b: X`09.blkb`09devnam_len`09`09`09;`20Device`20name`20buffer X; Xmbxlognam_b: X`09.blkb`09mbxlognam_len`09`09`09;`20Proc`20name`20of`20mailbox`20writer X; Xmbxprocnam_b: X`09.blkb`09mbxprocnam_len`09`09`09;`20Proc`20name`20of`20mailbox`20writer X; Xwilddev_b: X`09.blkb`09wilddev_len`09`09`09;`20User`20wildcard`20device`20name X; Xoutbuf_b: X`09.blkb`09outbuf_len`09`09`09;`20Output`20buffer X; Xoutput_b: X`09.blkb`09output_len`09`09`09;`20Output`20filename`20buffer X; Xess_len`20=`20nam$c_maxrss Xess_b:`09.blkb`09ess_len`09`09`09`09;`20Expanded`20file`20name X; Xrss_len`20=`20nam$c_maxrss Xrss_b:`09.blkb`09rss_len`09`09`09`09;`20Resultant`20file`20name X; Xmbxbuf_b: X`09.blkb`09mbxbuf_len`09`09`09;`20Mailbox`20contents`20buffer X; X`09.psect`09mbox_code`20nowrt`20rd`20exe`20pic`20shr X; X`09.entry`09mbox`20`5Em X`09bsbw`09get_qualifiers_r1 X`09blbc`09r0,`2099$ X`09bsbw`09open_output_r1 X`09blbc`09r0,`2099$ X`09bsbw`09get_modes_r1 X`09blbc`09r0,`2099$ X`09bsbw`09lock_code_and_data_r2 X`09blbc`09r0,`2099$ X`09bsbw`09get_device_r1 X`09blbc`09r0,`2099$ X1$:`09bsbb`09search_device_r1 X`09blbc`09r0,`20100$ X`09bsbw`09dump_device_r11 X`09blbs`09r0,`201$ X99$:`09ret X100$:`09cmpw`09r0,`20#ss$_nomoredev X`09bneq`0999$ X`09movl`09#ss$_normal,`20r0 X`09ret X; X;`20Searches`20for`20devices`20matching`20the`20specification. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes X;`20`20`20`20R1 X; Xsearch_device_r1: X`09clrl`09flags`09`09`09`09;`20Reset`20flags`20for`20next`20device X1$:`09movzwl`09mbxchan,`20r0`09`09`09;`20We`20already`20have`20a`20channel X`09beql`092$`09`09`09`09;`20Nope X`09$dassgn_s`20-`09`09`09`09;`20Deassign`20old`20one X`09`09chan`20=`20r0 X`09blbc`09r0,`2099$`09`09`09`09;`20Error? X`09clrw`09mbxchan`09`09`09`09;`20Say`20no`20channel`20anymore X2$:`09movw`09#devnam_len,`20devnam`09`09;`20Reset`20descriptor X`09$device_scan_s`20-`09`09`09;`20Sacn`20for`20next`20device X`09`09return_devnam`20=`20devnam,`20- X`09`09retlen`20`20`20`20`20`20`20`20=`20devnam,`20- X`09`09itmlst`20`20`20`20`20`20`20`20=`20dvslst,`20- X`09`09contxt`20`20`20`20`20`20`20`20=`20contxt X`09blbc`09r0,`2099$ X`09bsbb`09get_device_name_r1`09`09;`20get`20the`20device`20name X`09cmpw`09r0,`20#ss$_nosuchdev`09`09;`20Gone`20now? X`09beql`092$`09`09`09`09;`20yep`20so`20continue X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20if`20error X3$:`09bsbw`09match_device_r1`09`09`09;`20match`20the`20device`20name X`09blbs`09r0,`2099$`09`09`09`09;`20All`20is`20ok X`09cmpl`09r0,`20#str$_nomatch`09`09;`20No`20match`20status X`09beql`091$`09`09`09`09;`20next`20device X99$:`09rsb X; X;`20Assigns`20the`20channel`20and`20uses`20$getdviw`20to`20obtain`20the`20devi Vce`20name. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xget_device_name_r1: X`09$assign_s`20-`09`09`09`09;`20Assign`20a`20channel`20to`20it X`09`09devnam`20=`20devnam,`20-`09`09;`20Use`20returned`20device`20name X`09`09chan`20`20`20=`20mbxchan`09`09;`20Save`20chan`20for`20later X`09blbc`09r0,`2099$ X`09$getdviw_s`20-`09`09`09`09;`20Get`20some`20info`20on`20this`20dev X`09`09chan`20`20`20=`20mbxchan,`20-`09`09;`20use`20mailbox`20chan`20rather X`09`09iosb`20`20`20=`20iosb,`20-`09`09;`20`20than`20name`20as`20less`20volatil Ve X`09`09itmlst`20=`20dvilst X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20on`20error X`09movl`09iosb,`20r0`09`09`09;`20Get`20other`20status X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09decl`09mbxrefcnt`09`09`09;`20Dont`20count`20our`20reference X`09pushal`09mbxbufquo`09`09`09;`20Get`20space`20left X`09pushal`09mbxiniquo`09`09`09;`20Get`20initial`20space X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20From`20this`20mailbox X`09calls`09#3,`20get_mailbox_sizes`09`09;`20Get`20the`20mailbox`20sizes X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09pushaq`09devnam`09`09`09`09;`20Strip`20this`20device`20name X`09calls`09#1,`20strip_device`09`09;`20Cut`20off`20_`20:`20and`20space`20etc X99$:`09rsb X X; X;`20Dumps`20out`20the`20contents`20of`20the`20mailbox X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1,R2,R11 X; Xdump_device_r11: X`09movl`09#ss$_normal,`20r0`09`09`09;`20Assume`20all`20is`20ok X`09bbc`09#cfl_v_headers,`20cliflags,`201$`09;`20Need`20to`20print`20all`20head Vers X`09bsbw`09print_header_r1`09`09`09;`20Print`20out`20header`20for`20mailbox X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20on`20error X1$:`09bbc`09#cfl_v_rwmbx,`20cliflags,`202$`09;`20Need`20to`20print`20RWMBX`20p Vrocs? X`09bsbw`09print_rwmbx_r1`09`09`09;`20Print`20out`20waiting`20processes X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20with`20error X2$:`09bsbb`09print_attn_r2`09`09`09;`20Print`20out`20attention`20info X`09blbc`09r0,`2099$ X`09bbc`09#cfl_v_pending,`20cliflags,`203$`09;`20Pending`20reads`20need`20doing V? X`09bsbw`09print_read_r1`09`09`09;`20print`20out`20pending`20I/O X`09blbc`09r0,`2099$ X3$:`09bbc`09#cfl_v_messages,`20cliflags,`2099$`09;`20Need`20to`20print`20out V`20contents X`09bsbw`09print_contents_r11 X99$:`09rsb X; X;`20Print`20the`20attention`20ASTs`20of`20the`20mailbox X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1,R2 X; Xprint_attn_r2: X`09pushal`09mbxastprm`09`09`09;`20Put`20astprm`20here X`09pushal`09mbxastadr`09`09`09;`20Put`20astadr`20here X`09pushal`09mbxpid`09`09`09`09;`20Put`20PID`20here X`09pushal`09mbxmode`09`09`09`09;`20Put`20access`20mode`20here X`09pushal`09mbxctx`09`09`09`09;`20Context`20for`20loop X`09clrl`09-(sp)`09`09`09`09;`20Start`20on`20reads X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20Channel`20to`20mailbox X`09pushl`09#7`09`09`09`09;`20Set`20number`20of`20args X`09bbc`09#cfl_v_read,`20cliflags,`20110$`09;`20Need`20to`20do`20reads? X1$:`09clrl`09mbxctx`09`09`09`09;`20Start`20at`20first`20attn`20AST X2$:`09movl`09sp,`20r2 X`09$cmkrnl_s`20- X`09`09routin`20=`20w`5Eget_attn_list_k,`20-`09;`20Get`20the`20list X`09`09arglst`20=`20(r2) X`09blbc`09r0,`20100$ X`09bsbw`09get_procname_r1`09`09`09;`20Convert`20PID`20to`20PRCNAM X`09blbc`09r0,`2098$`09`09`09`09;`20Quit`20with`20error X`09movl`094+4(sp),`20r0`09`09`09;`20Get`20list X`09bsbb`09print_attn_line_r1`09`09;`20Print`20out`20the`20line X`09blbs`09r0,`202$`09`09`09`09;`20continue X98$:`09addl2`09#8*4,`20sp X99$:`09rsb X100$:`09cmpw`09r0,`20#ss$_endoffile X`09bneq`0998$ X110$:`09bbc`09#cfl_v_write,`20cliflags,`20120$`09;`20Need`20to`20do`20writes? V X`09bbcs`09#0,4+4(sp),`201$`09`09`09;`20Do`20writes`20now X120$:`09movl`09#ss$_normal,`20r0`09`09`09;`20Say`20all`20is`20ok X`09brb`0998$`09`09`09`09;`20Continue X; X;`20Prints`20out`20the`20line`20for`20attention`20ASTs`20and`20outstanding`20I V/O. X; X;`20Inputs: X;`20`20`20`20R0:`20List`20that`20is`20being`20traced.`200`20=`20Read,`201`20= V`20Write`20!`20attn`20only X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xprint_read_line_r1: X`09movl`09#2,`20r0`09`09`09`09;`20Say`20we`20are`20internal Xprint_attn_line_r1: X`09pushl`09r0`09`09`09`09;`20Save`20list X`09bsbw`09print_header_r1`09`09`09;`20Print`20out`20header`20for`20mailbox X`09popl`09r1`09`09`09`09;`20Restore`20list X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20on`20error X`09movzbl`09#outbuf_len,`20outbuf`09`09;`20Reset`20to`20max`20size X`09movl`09attn`5Br1`5D,`20r0`09`09`09;`20Get`20address`20of`20string X`09movl`09mbxmode,`20r1`09`09`09;`20Get`20mode X`09movab`09modes`5Br1`5D,`20r1`09`09`09;`20Get`20address`20of`20char X`09$fao_s`09ctrstr`20=`20attnctrstr,`20- X`09`09outbuf`20=`20outbuf,`20- X`09`09outlen`20=`20outbuf,`20- X`09`09p1`20`20`20`20`20=`20r0,`20-`09`09`09;`20Attn`20list`20name X`09`09p2`20`20`20`20`20=`20mbxpid,`20-`09`09;`20PID X`09`09p3`20`20`20`20`20=`20mbxprocnam,`20-`09`09;`20Process`20name`20length X`09`09p4`20`20`20`20`20=`20mbxprocnam+4,`20-`09;`20Process`20name X`09`09p5`20`20`20`20`20=`20#1,`20-`09`09`09;`20one`20char`20for`20mode X`09`09p6`20`20`20`20`20=`20r1,`20-`09`09`09;`20mode`20char X`09`09p7`20`20`20`20`20=`20mbxastadr,`20-`09`09;`20AST`20address X`09`09p8`20`20`20`20`20=`20mbxastprm`09`09;`20AST`20parameter X`09blbc`09r0,`2099$ X`09bsbw`09write_r1`09`09`09;`20Put`20record`20to`20output X99$:`09rsb X; X;`20Print`20the`20outstanding`20I/O`20of`20the`20mailbox X; Xprint_read_r1: X`09pushal`09mbxastprm`09`09`09;`20Put`20astprm`20here X`09pushal`09mbxastadr`09`09`09;`20Put`20astadr`20here X`09pushal`09mbxpid`09`09`09`09;`20Put`20PID`20here X`09pushal`09mbxmode`09`09`09`09;`20Put`20access`20mode`20here X`09pushal`09mbxctx`09`09`09`09;`20Context`20for`20loop X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20Channel`20to`20mailbox X`09pushl`09#6`09`09`09`09;`20Set`20number`20of`20args X1$:`09clrl`09mbxctx`09`09`09`09;`20Start`20at`20first`20I/O X2$:`09movl`09sp,`20r2 X`09$cmkrnl_s`20- X`09`09routin`20=`20w`5Eget_read_list_k,`20-`09;`20Get`20the`20list X`09`09arglst`20=`20(r2) X`09blbc`09r0,`20100$ X`09bsbw`09get_procname_r1`09`09`09;`20Convert`20PID`20to`20PRCNAM X`09blbc`09r0,`2098$`09`09`09`09;`20Quit`20with`20error X`09bsbw`09print_read_line_r1`09`09;`20Print`20out`20the`20line X`09blbs`09r0,`202$`09`09`09`09;`20continue X98$:`09addl2`09#7*4,`20sp X99$:`09rsb X100$:`09cmpw`09r0,`20#ss$_endoffile X`09bneq`0998$ X`09movl`09#ss$_normal,`20r0`09`09`09;`20Say`20all`20is`20ok X`09brb`0998$`09`09`09`09;`20Continue X; X;`20Print`20out`20processes`20waiting`20for`20space`20in`20this`20mailbox X; Xprint_rwmbx_r1: X`09cmpl`09mbxbufquo,`20mbxdevbufsiz X`09bgequ`091$ X`09pushaf`09#`5EF0.1 X`09calls`09#1,`20g`5Elib$wait X1$:`09pushal`09mbxpid`09`09`09`09;`20Put`20PID`20here X`09pushal`09mbxctx`09`09`09`09;`20Context`20for`20loop X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20Channel`20to`20mailbox X`09pushl`09#3`09`09`09`09;`20Set`20number`20of`20args X`09clrl`09mbxctx`09`09`09`09;`20Start`20at`20first`20process X`09movl`09sp,`20r2 X2$:`09$cmkrnl_s`20- X`09`09routin`20=`20w`5Eget_rwmbx_k,`20-`09;`20Get`20the`20processes X`09`09arglst`20=`20(r2) X`09blbc`09r0,`20100$ X`09bsbw`09get_procname_r1`09`09`09;`20Convert`20PID`20to`20PRCNAM X`09blbc`09r0,`2098$`09`09`09`09;`20Quit`20with`20error X`09bsbb`09print_rwmbx_line_r1`09`09;`20Print`20out`20the`20line X`09blbs`09r0,`202$`09`09`09`09;`20continue X98$:`09addl2`09#4*4,`20sp X99$:`09rsb X100$:`09cmpw`09r0,`20#ss$_endoffile X`09bneq`0998$ X`09movl`09#ss$_normal,`20r0`09`09`09;`20Say`20all`20is`20ok X`09brb`0998$`09`09`09`09;`20Continue X; X;`20Prints`20out`20the`20line`20for`20RWMBX`20processes. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xprint_rwmbx_line_r1: X`09bsbw`09print_header_r1`09`09`09;`20Print`20out`20header`20for`20mailbox X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20on`20error X`09movzbl`09#outbuf_len,`20outbuf`09`09;`20Reset`20to`20max`20size X`09$fao_s`09ctrstr`20=`20rwmbxctrstr,`20- X`09`09outbuf`20=`20outbuf,`20- X`09`09outlen`20=`20outbuf,`20- X`09`09p1`20`20`20`20`20=`20mbxpid,`20-`09`09;`20PID X`09`09p2`20`20`20`20`20=`20mbxprocnam,`20-`09`09;`20Process`20name`20length X`09`09p3`20`20`20`20`20=`20mbxprocnam+4`09`09;`20Process`20name X`09blbc`09r0,`2099$ X`09bsbw`09write_r1`09`09`09;`20Put`20record`20to`20output X99$:`09rsb X; X; X;`20Print`20the`20contents`20of`20the`20mailbox X; Xprint_contents_r11: X`09movl`09#1,`20r11`09`09`09`09;`20Start`20at`20line`20one X`09clrl`09mbxctx`09`09`09`09;`20Start`20at`20first`20message`20again X`09pushal`09mbxwait`09`09`09`09;`20Waiting? X`09pushaw`09mbxbuf`09`09`09`09;`20Build`20argument`20list X`09pushaq`09mbxbuf`09`09`09`09;`20`20on`20the`20stack`20ready`20for X`09pushal`09mbxpid`09`09`09`09;`20`20the`20call`20to`20$cmkrnl X`09pushal`09mbxctx X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20Use`20this`20channel X`09pushl`09#6`09`09`09`09;`20Set`20number`20of`20args X1$:`09movl`09sp,`20r2 X`09movzwl`09#mbxbuf_len,`20mbxbuf`09`09;`20Set`20max`20size`20of`20buffer X`09$cmkrnl_s`20- X`09`09routin`20=`20w`5Embox_contents_k,`20- X`09`09arglst`20=`20(r2) X`09blbc`09r0,`20100$ X`09bsbw`09get_procname_r1`09`09`09;`20Convert`20PID`20to`20PRCNAM X`09blbc`09r0,`2098$`09`09`09`09;`20Quit`20with`20error X`09bsbw`09print_data_r11`09`09`09;`20Print`20out`20this`20chunk`20of`20data X`09incl`09r11`09`09`09`09;`20Say`20next`20message X`09blbs`09r0,`201$ X98$:`09addl2`09#7*4,`20sp X99$:`09rsb X100$:`09cmpw`09r0,`20#ss$_endoffile X`09bneq`0998$ X`09movl`09#ss$_normal,`20r0 X`09brb`0998$ X; X;`20Matches`20the`20device`20name`20against`20the`20users`20input`20to`20see V`20if`20this`20mailbox`20is X;`20one`20that`20is`20wanted X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xmatch_device_r1: X`09bsbb`09get_logical_r2`09`09`09;`20get`20logical`20for`20mailbox X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20with`20error X`09tstw`09wilddev`09`09`09`09;`20Always`20match`20null`20string X`09beql`0999$`09`09`09`09;`20Skip`20match`20tests X; X;`20Try`20to`20match`20logical`20name`20first. X; X`09pushaq`09wilddev`09`09`09`09;`20Match`20against`20wild`20device X`09pushaq`09mbxlognam`09`09`09;`20Match`20logical`20name X`09calls`09#2,`20g`5Estr$match_wild`09`09;`20wildcard`20match X`09blbs`09r0,`2099$`09`09`09`09;`20Matched`20so`20continue X`09pushaq`09wilddev`09`09`09`09;`20match`20against`20wild`20device X`09pushaq`09devnam`09`09`09`09;`20match`20against`20device`20name X`09calls`09#2,`20g`5Estr$match_wild`09`09;`20match`20as`20wildcard X99$:`09rsb X; X;`20Gets`20the`20logical`20name`20for`20the`20mailbox.`20If`20none`20is`20foun Vd`20it`20substitutes`20a X;`20string`20to`20say`20so. X; Xget_logical_r2: X`09movw`09#mbxlognam_len,`20mbxlognam`09;`20Fix`20up`20to`20max`20size X`09pushaw`09mbxlognam`09`09`09;`20Patch`20up`20with`20size X`09pushaq`09mbxlognam`09`09`09;`20Put`20name`20here X`09movzwl`09mbxchan,`20-(sp)`09`09`09;`20Get`20from`20this`20channel X`09pushl`09#3`09`09`09`09;`20Three`20arguments X`09movl`09sp,`20r2`09`09`09`09;`20Get`20pointer`20to`20arglst X`09$cmkrnl_s`20- X`09`09routin`20=`20w`5Eget_logical_k,`20-`09;`20Get`20the`20mailbox`20logical V X`09`09arglst`20=`20(r2) X`09addl2`09#4*4,`20sp`09`09`09;`20Drop`20arguments`20on`20floor X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20with`20error X`09tstw`09mbxlognam`09`09`09;`20Anything`20there? X`09bneq`0999$`09`09`09`09;`20Got`20something X`09movw`09none,`20mbxlognam`09`09`09;`20Set`20size X`09pushaq`09mbxlognam`09`09`09;`20Replace`20logical`20name X`09pushaq`09none`09`09`09`09;`20Copy`20none X`09calls`09#2,`20g`5Elib$scopy_dxdx`09`09;`20Copy`20the`20string X99$:`09rsb X; X;`20Gets`20the`20process`20name`20associated`20with`20a`20writers`20PID X; Xget_procname_r1: X`09tstl`09mbxpid X`09beql`0999$ X`09$getjpiw_s`20- X`09`09pidadr`20=`20mbxpid,`20- X`09`09itmlst`20=`20jpilst,`20- X`09`09iosb`20`20`20=`20iosb X`09blbc`09r0,`2099$ X`09movl`09iosb,`20r0 X`09blbc`09r0,`2099$ X`09rsb X99$:`09movw`09#mbxprocnam_len,`20mbxprocnam`09;`20Rest`20size`20of`20descripto Vr X`09$getmsg_s`20-`09`09`09`09;`20Try`20to`20get`20error`20message`20id X`09`09msgid`20`20=`20r0,`20- X`09`09msglen`20=`20mbxprocnam,`20- X`09`09bufadr`20=`20mbxprocnam,`20- X`09`09flags`20`20=`20#`5EB0010 X`09blbs`09r0,`20100$ X`09movw`09unavailable,`20mbxprocnam X`09pushaq`09mbxprocnam X`09pushaq`09unavailable X`09calls`09#2,`20g`5Elib$scopy_dxdx X100$:`09rsb X; X;`20Dumps`20out`20mailbox`20details. X; X;`20Inputs: X;`20`20`20`20R11:`20Line`20number X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xprint_data_r11: X`09bsbw`09print_header_r1`09`09`09;`20Print`20out`20header`20for`20mailbox X`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20on`20error X`09movzbl`09#outbuf_len,`20outbuf X`09movq`09mbxprocnam,`20r0 X`09movzwl`09r0,`20r0 X`09movl`09mbxwait,`20r2`09`09`09;`20Get`20wait`20flag X`09movl`09waitchars`5Br2`5D,`20r2`09`09;`20Get`20wait`20character X`09$fao_s`09ctrstr`20=`20msgctrstr,`20- X`09`09outlen`20=`20outbuf,`20- X`09`09outbuf`20=`20outbuf,`20- X`09`09p1`20`20`20`20`20=`20r11,`20- X`09`09p2`20`20`20`20`20=`20mbxbuf,`20- X`09`09p3`20`20`20`20`20=`20mbxpid,`20- X`09`09p4`20`20`20`20`20=`20r0,`20- X`09`09p5`20`20`20`20`20=`20r1,`20- X`09`09p6`20`20`20`20`20=`20r2`09`09`09;`20Print`20wait`20string X`09blbc`09r0,`2099$ X`09bsbw`09write_r1`09`09`09;`20Put`20record`20to`20output X`09blbc`09r0,`2099$ X`09bsbw`09dump_message_r7 X99$:`09rsb X; X;`20Prints`20out`20the`20header`20line`20if`20not`20already`20done. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xprint_header_r1: X`09movl`09#ss$_normal,`20r0`09`09`09;`20Assume`20all`20ok X`09bbss`09#flg_v_headerdone,`20flags,`2099$`09;`20Print`20out`20header`20only V`20once X`09bsbb`09dump_header_1_r1 X`09blbc`09r0,`2099$ X`09bsbb`09dump_header_2_r1 X99$:`09rsb X; Xdump_header_1_r1: X`09movaq`09devnam,`20r0 X`09movaq`09mbxlognam,`20r1 X`09movzbl`09#outbuf_len,`20outbuf X`09$fao_s`09ctrstr`20=`20hdrctrstr1,`20- X`09`09outlen`20=`20outbuf,`20- X`09`09outbuf`20=`20outbuf,`20- X`09`09p1`20`20`20`20`20=`20r0,`20- X`09`09p2`20`20`20`20`20=`20r1,`20- X`09`09p3`20`20`20`20`20=`20mbxrefcnt,`20- X`09`09p4`20`20`20`20`20=`20mbxopcnt X`09blbc`09r0,`2099$ X; X;`20Cancel`20CTRL/O`20on`20new`20device`20so`20the`20user`20can`20use`20it`20t Vo`20discard`20all`20output`20for X;`20the`20current`20mailbox. X; X`09bsbw`09write_cco_r1`09`09`09;`20Put`20record`20to`20output X99$:`09rsb X; Xdump_header_2_r1: X`09movzbl`09#outbuf_len,`20outbuf X`09$fao_s`09ctrstr`20=`20hdrctrstr2,`20- X`09`09outlen`20=`20outbuf,`20- X`09`09outbuf`20=`20outbuf,`20- X`09`09p1`20`20`20`20`20=`20mbxiniquo,`20- X`09`09p2`20`20`20`20`20=`20mbxbufquo,`20- X`09`09p3`20`20`20`20`20=`20mbxdevbufsiz,`20- X`09`09p4`20`20`20`20`20=`20mbxdevdepend X`09blbc`09r0,`2099$ X`09bsbw`09write_r1`09`09`09;`20Write`20the`20buffer X99$:`09rsb X; X;`20Dumps`20out`20the`20mailbox`20contents`20in`20ascii`20and`20hex. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1,R2,R4,R5,R6,R7 X; Xdump_message_r7: X`09clrl`09r7`09`09`09`09;`20Say`20at`20offset`20zero X`09movq`09mbxbuf,`20r4`09`09`09;`20Get`20descriptor X1$:`09movzwl`09r4,`20r4`09`09`09`09;`20Get`20real`20length X`09beql`0999$`09`09`09`09;`20Nothing`20to`20do X`09clrw`09outbuf`09`09`09`09;`20Say`20we`20are`20at`20the`20start X`09bsbw`09add_spaces_r2`09`09`09;`20Add`20a`20few`20spaces X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09bsbw`09add_space_r2`09`09`09;`20Add`20a`20few`20spaces X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09subl3`09#1,`20bytes_per_line,`20r6`09`09;`20Set`20size`20of`20line X`09clrq`09r0`09`09`09`09;`20Say`20zero`20value`20and`20digits X2$:`09cmpl`09r4,`20r6`09`09`09`09;`20Beyond`20buffer X`09bleq`093$`09`09`09`09;`20No`20data`20use`20spaces X`09incl`09r1`09`09`09`09;`20Say`20one`20more`20byte X`09ashl`09#8,`20r0,`20r0`09`09`09;`20make`20space`20for`20new`20byte X`09movb`09(r5)`5Br6`5D,`20r0`09`09`09;`20Get`20the`20byte X3$:`09bitl`09alignment,`20r6`09`09`09;`20On`20a`20boundary X`09bneq`094$`09`09`09`09;`20None`20to`20do`20this`20time X`09bsbw`09add_val_r3`09`09`09;`20Add`20value`20to`20buffer X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09bsbw`09add_space_r2`09`09`09;`20Add`20a`20space X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09clrq`09r0`09`09`09`09;`20Say`20zero`20value`20and`20digits X4$:`09sobgeq`09r6,`202$`09`09`09`09;`20Next`20byte X`09bsbb`09add_ascii_r6`09`09`09;`20Add`20ascii`20bit X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09bsbw`09add_space_r2`09`09`09;`20Add`20a`20space X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09movl`09r7,`20r0`09`09`09`09;`20Put`20offset`20long`20on`20end X`09bsbb`09add_val_long_r3`09`09`09;`20Add`20offset`20long X`09blbc`09r0,`2099$`09`09`09`09;`20quit`20with`20error X`09bsbw`09write_r1`09`09`09;`20Put`20record`20to`20output X`09addl2`09bytes_per_line,`20r7`09`09;`20Update`20offset X`09blbs`09r0,`201$`09`09`09`09;`20Repeat`20the`20process X99$:`09rsb X; X;`20Adds`20the`20ascii`20portion`20of`20the`20dump`20message. X; X;`20Inputs: X;`20`20`20`20R4:`20Size`20of`20mailbox`20message X;`20`20`20`20R5:`20Address`20of`20mailbox`20message X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20`20`20`20R4:`20Reduced`20size`20of`20message X;`20`20`20`20R5:`20Address`20of`20next`20portion`20of`20message X; Xadd_ascii_r6: X`09subl3`09#1,`20bytes_per_line,`20r6`09`09;`20Set`20size`20of`20line X1$:`09tstl`09r4`09`09`09`09;`20Anything`20left`20to`20process X`09beql`092$`09`09`09`09;`20Nothing`20add`20a`20dot X`09movzbl`09(r5)+,`20r0`09`09`09;`20get`20next`20byte X`09decl`09r4`09`09`09`09;`20one`20less`20byte X`09cmpb`09r0,`20#`5EA/`20/`09`09`09;`20See`20if`20in`20range X`09blssu`092$`09`09`09`09;`20its`20a`20control`20char X`09cmpb`09r0,`20#`5EA/`7E/`09`09`09;`20Too`20high? X`09bgtru`092$`09`09`09`09;`20its`20out`20of`20range X`09bsbw`09add_byte_r2`09`09`09;`20Add`20the`20byte X`09brb`093$ X2$:`09movzbl`09#`5EA/./,`20r0`09`09`09;`20add`20a`20dot X`09bsbw`09add_byte_r2`09`09`09;`20Add`20the`20byte X3$:`09blbc`09r0,`2099$`09`09`09`09;`20Quit`20if`20error X`09sobgeq`09r6,`201$`09`09`09`09;`20Next`20char X99$:`09rsb X; X;`20Adds`20a`20longword X; Xadd_val_long_r3: X`09movl`09#offset_size,`20r1`09`09;`20Set`20size`20of`20offset X`09bsbb`09add_val_r3`09`09`09;`20Add`20the`20value X`09rsb X; X;`20Adds`20a`20byte,`20word`20or`20long`20as`20a`20string`20followed`20by`20a V`20space X; X;`20Inputs: X;`20`20`20`20R0:`20Value`20to`20add X;`20`20`20`20R1:`20Number`20of`20valid`20bytes X;`20Outputs: X;`20`20`20`20R0:`20Status Xadd_val_r3: X`09pushl`09r4 X`09clrb`09-(sp)`09`09`09`09;`20Set`20end`20of`20buffer X`09movl`09base,`20r2`09`09`09;`20Get`20base X`09movl`09radix`5Br2`5D,`20r2`09`09`09;`20get`20address`20of`20table X`09movzbl`09(r2)`5Br1`5D,`20r1`09`09`09;`20Get`20size`20of`20data X`09movl`09size,`20r4`09`09`09;`20Get`20current`20size X`09movzbl`09(r2)`5Br4`5D,`20r4`09`09`09;`20Get`20size`20of`20current`20data`20 Vtype X`09cmpl`09r1,`20r4`09`09`09`09;`20Compare`20sizes X`09bleq`090$`09`09`09`09;`20No`20use`20as`20specified X`09movl`09r1,`20r4`09`09`09`09;`20Set`20to`20maximum`20of`20size X0$:`09subl3`09r1,`20r4,`20r3`09`09`09;`20Get`20start`20of`20spacing X1$:`09cmpl`09r4,`20r3`09`09`09`09;`20Need`20to`20fake`20data X`09bgtr`092$ X`09movb`09#`5EA/`20/,`20-(sp)`09`09`09;`20Need`20space`20at`20this`20point X`09brb`093$ X2$:`09clrl`09r1`09`09`09`09;`20Upper`20of`20quad`20zero X`09ediv`09base,`20r0,`20r0,`20r1`09`09;`20Get`20digit X`09movb`09hextab`5Br1`5D,`20-(sp)`09`09;`20Get`20hex`20digit X`09cmpl`09base,`20#10`09`09`09;`20Base`20ten? X`09bneq`093$`09`09`09`09;`20nope X`09tstl`09r0`09`09`09`09;`20Quotient`20zero? X`09bneq`093$`09`09`09`09;`20Nope`20some`20left`20to`20do X`09movl`09r4,`20r3`09`09`09`09;`20Make`20rest`20of`20digits`20invalid X3$:`09sobgtr`09r4,`201$`09`09`09`09;`20Next`20digit X4$:`09movzbl`09(sp)+,`20r1`09`09`09;`20Get`20byte`20to`20add X`09beql`095$`09`09`09`09;`20end`20of`20list X`09movl`09r1,`20r0`09`09`09`09;`20Set`20byte`20to`20copy X`09bsbb`09add_byte_r2`09`09`09;`20add`20the`20byte X`09brb`094$`09`09`09`09;`20next`20byte X5$:`09popl`09r4`09`09`09`09;`20Restore`20reg X`09rsb X; X;`20Add`20a`20couple`20of`20spaces`20to`20the`20output`20buffer. X; X;`20Inputs: X;`20`20`20`20None X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X; Xadd_spaces_r2: X`09pushab`09b`5Eadd_space_r2`09`09`09;`20Cheap`20loop Xadd_space_r2: X`09movzbl`09#`5EA/`20/,`20r0`09`09`09;`20Put`20space`20into`20reg X`09bsbb`09add_byte_r2`09`09`09;`20Add`20to`20buffer X99$:`09rsb X; Xadd_byte_r2: X`09movq`09outbuf,`20r1`09`09`09;`20Get`20output`20descriptor X`09movzwl`09r1,`20r1`09`09`09`09;`20Get`20real`20length X`09addl2`09r1,`20r2`09`09`09`09;`20Get`20to`20end`20of`20string X`09subl3`09r1,`20line_length,`20r1`09`09;`20Get`20chars`20left`20in`20buffer X`09bleq`09100$`09`09`09`09;`20Too`20short X`09movb`09r0,`20(r2)+`09`09`09;`20Add`20byte`20to`20end X`09incw`09outbuf`09`09`09`09;`20One`20more`20char`20in`20output X`09movl`09#ss$_normal,`20r0`09`09`09;`20All`20is`20ok X`09rsb X100$:`09movl`09#str$_tru,`20r0`09`09`09;`20Say`20truncated X`09rsb X; X;`20locks`20the`20high`20IPL`20code`20and`20buffers`20into`20the`20working`20s Vet X; X;`20Inputs: X;`20`20`20`20None X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1,`20R2 X; Xlock_code_and_data_r2: X`09pushab`09w`5Elock_start1 X`09pushab`09w`5Elock_end1 X`09movl`09sp,`20r2 X`09$lkwset_s`20- X`09`09inadr`20=`20(r2) X`09blbc`09r0,`2099$ X`09movab`09w`5Elock_start2,`20(sp) X`09movab`09w`5Elock_end2,`204(sp) X`09movl`09sp,`20r2 X`09$lkwset_s`20- X`09`09inadr`20=`20(r2) X`09blbc`09r0,`2099$ X`09movab`09w`5Elock_start3,`20(sp) X`09movab`09w`5Elock_end3,`204(sp) X`09movl`09sp,`20r2 X`09$lkwset_s`20- X`09`09inadr`20=`20(r2) X`09blbc`09r0,`2099$ X`09movab`09w`5Elock_start4,`20(sp) X`09movab`09w`5Elock_end4,`204(sp) X`09movl`09sp,`20r2 X`09$lkwset_s`20- X`09`09inadr`20=`20(r2) X`09blbc`09r0,`2099$ X`09movab`09mbxbuf_b,`20(r2) X`09movab`09mbxbuf_b+mbxbuf_len-1,`204(r2) X`09$lkwset_s`20- X`09`09inadr`20=`20(r2) X99$:`09addl2`09#8,`20sp X`09rsb X; X;`20Gets`20the`20device`20name`20from`20the`20command`20line`20and`20assign`20 Va`20channel`20to`20it X; X;`20Inputs: X;`20`20`20`20None X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xget_device_r1: X`09pushaw`09wilddev`09`09`09`09;`20Put`20length`20here X`09pushaq`09wilddev X`09pushaq`09mailbox_qual`09`09`09;`20Get`20from`20P1 X`09calls`09#3,`20g`5Ecli$get_value`09`09;`20Get`20from`20command`20line X`09blbc`09r0,`2099$ X`09pushaw`09wilddev X`09pushaw`09wilddev X`09calls`09#2,`20g`5Estr$upcase`09`09;`20Uppercase`20the`20sting X`09blbc`09r0,`2099$ X`09pushaq`09wilddev`09`09`09`09;`20Strip`20users`20input X`09calls`09#1,`20strip_device`09`09;`20Strip`20:`20etc X99$:`09rsb X; X;`20Writes`20outbuf`20to`20the`20output`20file. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xwrite_r1: X`09movw`09outbuf,`20outrab+rab$w_rsz X`09moval`09mbox__errput,`20outrab+rab$l_ctx`09;`20Set`20error`20puting`20messa Vge X`09$put`09rab`20=`20outrab,`20-`09`09`09;`20Put`20record`20to`20output X`09`09err`20=`20rmserr`09`09`09;`20Signal`20any`20errors X`09rsb X; Xwrite_cco_r1: X`09bisl2`09#rab$m_cco,`20outrab+rab$l_rop`09;`20Set`20cancel`20control`20o X`09bsbb`09write_r1`09`09`09;`20Write`20the`20buffer X`09bicl2`09#rab$m_cco,`20outrab+rab$l_rop`09;`20Clear`20cancel`20control`20o X`09rsb X; X;`20Initialises`20the`20CLI`20with`20our`20command`20line`20and`20gets`20the V`20values`20supplied`20by`20the X;`20user. X; X;`20Inputs: X;`20Outputs: X;`20`20`20`20R0:`20Status X;`20Trashes: X;`20`20`20`20R1 X; Xget_qualifiers_r1: X`09pushaw`09get_input`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20Input`20 Vand X`09pushaw`09get_input`09`09;`20`20`20`20continuation`20routines X`09pushab`09mbox_clitable`09`09;`20command`20table`20address X`09pushaq`09verb`09`09`09;`20start`20of`20command X`09calls`09#4,`20g`5Ecli$dcl_parse`09;`20parse`20command X`09blbc`09r0,`20100$`09`09;`20quit`20with`20error X`09pushaw`09output`09`09`09;`20put`20length`20here X`09pushaq`09output`09`09`09;`20put`20string`20here X`09pushaq`09output_qual`09`09;`20Getting`20/OUTPUT X`09calls`09#3,`20g`5Ecli$get_value`09;`20Get`20value`20from`20CLI X`09blbc`09r0,`2099$ X`09bsbb`09get_cli_quals_r1`09;`20Get`20other`20qualifiers X99$:`09rsb X100$:`09bbss`09#sts$v_inhib_msg,`20- X`09`09r0,`2099$`09`09`09;`20Already`20signaled`20so`20inhibit`20it X`09rsb X; X;`20Gets`20the`20qualifiers`20that`20control`20the`20output`20of`20various`20i Vnformation. X; X;`20Outputs: X; X;`20R0:`20Status X; Xget_cli_quals_r1: X`09movaq`09rwmbx_qual,`20r0 X`09movl`09#cfl_v_rwmbx,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09movaq`09read_qual,`20r0 X`09movl`09#cfl_v_read,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09movaq`09write_qual,`20r0 X`09movl`09#cfl_v_write,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09movaq`09messages_qual,`20r0 X`09movl`09#cfl_v_messages,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09movaq`09headers_qual,`20r0 X`09movl`09#cfl_v_headers,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09movaq`09pending_qual,`20r0 X`09movl`09#cfl_v_pending,`20r1 X`09bsbb`09get_qual_r1 X`09blbc`09r0,`2099$ X`09tstl`09cliflags`09`09`09;`20If`20no`20quals`20then`20defualt X`09bneq`091$`09`09`09`09;`20At`20least`20one`20specified X`09decl`09cliflags`09`09`09;`20Set`20to`20all`20flags`20set X1$:`09bicl2`09clinegflags,`20cliflags`09`09;`20Remove`20negated`20flags X99$:`09rsb X; X;`20Gets`20a`20single`20qualifier`20and`20sets`20a`20bit`20in`20either`20clifl Vags`20or`20clinegflags. X; Xget_qual_r1: X`09movq`09r0,`20-(sp) X`09calls`09#1,`20g`5Ecli$present X`09popl`09r1 X`09cmpl`09#cli$_absent,`20r0 X`09beql`091$ X`09cmpl`09#cli$_negated,`20r0 X`09bneq`092$ X`09bbss`09r1,`20clinegflags,`2099$ X1$:`09movl`09#ss$_normal,`20r0 X`09rsb X2$:`09cmpl`09#cli$_present,`20r0 X`09beql`093$ X`09cmpl`09#cli$_defaulted,`20r0 X`09bneq`0999$ X3$:`09bbss`09r1,`20cliflags,`2099$ X`09movl`09#ss$_normal,`20r0 X99$:`09rsb X; Xget_modes_r1: X`09bsbw`09get_size_r1 X`09blbc`09r0,`2099$ X`09bsbb`09get_radix_r1 X`09blbc`09r0,`2099$ X`09movl`09base,`20r0`09`09;`20Get`20base X`09movl`09radix`5Br0`5D,`20r0`09`09;`20Get`20table`20address X`09movzbl`09offset_size(r0),`20r1`09;`20get`20size`20of`20offset`20value X`09addl2`09#3+1,`20r1`09`09;`201`20space`20for`20offset`20+`203`20at`20start X`09subl3`09r1,`20line_length,`20-(sp)`09;`20Get`20size`20minus`20display`20end V X`09movl`09size,`20r1`09`09;`20Get`20size`20of`20single`20item X`09mull2`09r1,`20(sp)`09`09;`20Multiple`20top`20of`20fraction X`09pushl`09r1`09`09`09;`20Save`20it`20for`20a`20sec`20or`20two X`09movzbl`09(r0)`5Br1`5D,`20r1`09`09;`20Get`20digits`20size X`09addl2`09(sp)+,`20r1`09`09;`20Add`20them`20up X`09incl`09r1`09`09`09;`20+1 X`09divl3`09r1,`20(sp)+,`20r1`09`09;`20get`20bytes`20per`20page X`09divl2`09size,`20r1`09`09;`20reduce`20to`20multiple`20of`20size X`09mull3`09size,`20r1,`20bytes_per_line;`20Scale`20back`20up`20to`20whole`20nu Vmber X`09movl`09#ss$_normal,`20r0`09`09;`20all`20is`20ok X99$:`09rsb X; Xget_radix_r1: X`09movl`09#10,`20base`09`09;`20Assume`20decimal X`09pushaq`09decimal_qual`09`09;`20Decimal`20qualifier X`09calls`09#1,`20g`5Ecli$present`09;`20is`20it`20there? X`09blbs`09r0,`2099$`09`09`09;`20Yep`20so`20get`20out`20now X`09movl`09#16,`20base`09`09;`20Assume`20hexadecimal X`09pushaq`09hexadecimal_qual`09;`20Hexadecimal`20qualifier X`09calls`09#1,`20g`5Ecli$present`09;`20is`20it`20there? X`09blbs`09r0,`2099$`09`09`09;`20Yep`20so`20get`20out`20now X`09movl`09#8,`20base`09`09;`20Assume`20octal X`09pushaq`09octal_qual`09`09;`20octal`20qualifier X`09calls`09#1,`20g`5Ecli$present`09;`20is`20it`20there? X`09blbs`09r0,`2099$`09`09`09;`20Yep`20so`20get`20out`20now X`09movl`09#16,`20base`09`09;`20Default`20to`20hexadecimal X`09movl`09#ss$_normal,`20r0`09`09;`20Say`20all`20is`20ok X99$:`09rsb X; Xget_size_r1: X`09movl`09#4,`20size`09`09;`20Assume`20longword X`09movl`09#`5EB11,`20alignment`09;`20Assume`20longword X`09pushaq`09longword_qual`09`09;`20Longword X`09calls`09#1,`20g`5Ecli$present`09;`20Is`20it`20there X`09blbs`09r0,`2099$`09`09`09;`20Get`20out`20when`20got`20it X`09movl`09#2,`20size`09`09;`20Assume`20word +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-