IMD 1.17: 11/11/2014 11:49:21 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 22 OF 30  SR22q82VKXSVRDOS 0420k-*g4gRj fX g,f-` ,g` BX,Aaf|$#JF`$* |a :FFNuHAp@|a$8>&68@FHC(HD4<  g 4<8***HB g2Hz,* m6a `NqL8`Lp&*HC64*AaNqLR`X?5|$* *g |a ` |$#J"*0<@jF&jN84gaH`*_a N _N`L\|JxfNsj?_f aJ8fNs?_'f/,x H?L NiH8`@8 4ga HNi/ /9d oF,hHV?</(@@?"h 0P*n6`  fnP,_( !TCBga bJ@gF @f AaC`6 @f.Jf&HC4<HBAaNq`HBHA(&64< HB4`&T(T,_" !TCBga C=C^AaBJ@g$< HCHD6`-@L NiH8Aa .x|M|"N ) g,@.,f#n -! /.D/.@Q1HFp.-fh|*n6a n, ,"0<2 gB@2g<,*.,(>,H@0,H@"@Jf -@g4&@4+HC6+HCAa JgH@(Aa`L ra ,sf`0L,s Rr  ,Nu1G*)!|EXEC!| <(,1F.g$F- g1F,|& fa Nu1F,X`9Ra aaaaaaaaaa a aaaaNq?/_'g/ gar//N,y H?8 4g @a~TK`hLa*8]Nh, n6a`Nq`"(F CN`&8UC _8߿f/?,/<<`B m n _-_-_/.)g".g a nbJf\ nC 1pfa`rJFf:Aa Hz` P` `x~$.ffffNL?,_`z,. n6a`Nq`&~ F&(.f Ȯg-C`"RȮggRn .nb~aN`./,x g0/ f(.)g .8g,_"PNs,_"/86Nua$< 4.&.(.8L<Aa `)Lt-@&Nu ,X` .`p|Jxf L?,_NsjatJ8g`tBL NiH8`vp`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p`=@=|G` H@0<.H@ xQY.H|`V@H0x "x,JAkj fah|&)fFT``J$C#RFB%@ %H%BBjgIA5A$|aF`a`H8E&J|$S f"f&(R(,ٸNٸJJF0`:&J&g2$C f f&(Rg(*٬F0` `&J&``$#JLNuL FNu&i"Nl!NӸJJD'A$#J`&(Sm &L(S`%lӪD)A$&Nu/)fa`a&Nu#R$#J$i *ѸNѸJJNu&$#J *$SѪNu#R&i +ѸNѸJJNuH @ ! Ni! H! L"x:3|3|3|3||`- 8g @|!d*x@@aFNu- 8g|!d*x@@aNs-)f8 8tg2 @ !ASNgaVA0<~JWgTNu! D m6@ Nu 8tg* @ !ASNga"l6B@) g @maHBNu/ ax*_J- gR"x<@))1g()&- f2) uPmuPn|1!R fC@BoNuHJg xdJ( gz,/Na`Nq`a6( 0P@|L(J. G),1g(g"F1R  fI@Bo(HRKfιf"_Bx^NsH xB(B@r@|xqXnR@xXNFJNn"x,AC %bЀ0;2N./ %bҁ2;Af @gT"NuT2\ ` T TTTTTTT3T TTT.TTP?_'fD|/,x H?.)g.@k. @,b,(H$;,j g*@ !TCBg`*NN `@`:``zx:,@@ *(x @ @.2 @ 0 ,,R@ **#L22j#B. '@1Z@$2J@82Z/$f`2t62&,xx@ 8@ (@ (@ @ 2xxxx@'V!<pxxx@ r*3 @x! ! % " #`xx@@(@"84ga.)g".g~a@kN @,bDG$3g2*HE, n6a`Nq`(FgAa``*HN `$x($ g@D@jnS@ EJg4*f"f-W8BnH??<Hz @$jN0.Hf0g: @fAa|`R"( PaJ` TNu !TCBf*H(m@ g g@|2,$0{N0000>>>>000088888T8ZFTNuFaaZ`` %FaNu l` l 9A$Fa"HA faAaNua``9A$FaaNua``~9A$Fa^aNu9A$F l aV"HA fa8axNu9A$F l a*"HA fa aLNug"2HA)A`6g "2HA)A`)l`gY@4&(*,. "JHN`|NqNqNq `~NqNq /`hNqH `lNqH /`VH`\NqH/`FH<`LNqHKIB$I"xfFJQk$1@f&i OJgg`HSAaaC QfBJg| g4o  g($,a)a- K gTL88Nu g@-|&A-H@|0H@S@l0abFAa@a`RR` g*$@ g**mnm` o(J*K fNuլ *,GXf*, $T ,g"@۩ "g%INu*gBNuanw&Nu"_ g @Aa:`N gJQk il`lmf@JQk*iHUAaF g&J(@n ,Ќn f`gzn g$`f&g"T#K('L'l B '@`H $nL0TNu$H"x g *ilmJQkҊb` C Qf`CAah&g Cl"H&f g )Љm%B f -%@ $%If*`$" #@ f *ѩ#j "$IJg$"C#JJ f )Ѫ%i $g"R#J- "xf(i,g Aa``C QfAaLL0NuT`H@&x0|*SfKI&F+@+H+N (o:T;o+o Ub+o a*+A;@L8NuBB"x gbE0)gPJj f f$&J` fgB* g f4 f& S@fJf"0) Kf Ji mRTNu JNu CNuB*g B:(0P$f `P g Q E l*TNuBBB"x$( gd4)i gRB(pJq fJf:& g04)`*gf$lf$lg"Jq k"SDfTJfBBNu Nu qNu gJg` N".Nu g"(g.(f".fg xgfg* h`Jf @Hz?)gB,,Jm g.f* Jm f0-@ fB2- m a:`a,SGfNu>, fz,, n6ax`Nq`$F,g z,, m6aX` ` JEgJ0f`., m6a``B00P, f:pP%@B$P 5pP$00P%@B00P%@ `-@ `g-,f `T`<`<., m6a\`Jg0, 2,A'g f  g B,,g  gB ff-)f f.8xΆެ޸xθ|"FffArfR-(fTHG>G?HG Ga:`(TSg`j`j2f"Aaz`al`\&H.*g, "F m6a``J0Pf! P 0, @O g1P$1Pg1P 1PЇS1P 1PP&P$R(-K g-G$f *n6a*NT`Z., 8,(Mg ,,f `Nh)H<*l6Aa``~J@g ,g "E$L.* k6aH`Jf``* ,**fB<5P* g uPB05PuP$R@*af` `Jfa`J0Pf"( A1P1Pu@DAu@1P!@ P 1@&P&65@$*g* g1P$1Pg1PBu@EazDB@ B@$B@Bu@S-R(20PpP-A  g$$.g pP "(Ka`a,&L$+ `,,`&"-6g*,,, Aaz`` JgJ0Pf`..)g , g @ !TCBg` A a`` N.(f ((g`"(6g*,,, Aa`` JgJ0Pf`Hz?,--gGg-g- ,gSs-f ,Ss3g gAagl A g+l  g+l  g- ,fAaJ` g ,` g ,`J@f&B,gf6B, g*,, m6a`Nq`f B&, $0l&HC8pHC Ca`` !ASQ!l!F G,!K!K!K 1G(ԈX!BB,481B&;01B$Bh*+H@` $L(m@ gb.)g@"j B cPr fY fP@R@l(b0@|4,$6{ (N$z,* n6a`Nq`"F``` 0000<<<<000066666\6bF`Faaa`F`%Fa`8 l` l B9B$FaAa^`aa``9B$Faar`9B$F l aaT`a>az``v9B$Fa &\e&\RH`j&L- ,gԾzJa(FC0<"Q+mt+m +\B0-+\--@A--g+l;l+l`Aa2` ,gHAa0`&L- ,g2za(F--f@`+l+l+l +lBm-8-JgF--f@`.-g&z,- m6a6`Nq`(Ff+T ,0-,@fAap`$@$, 6,|Bg (,nF`|B g *,faCg*B6, gglJgԄ`&\`6,$Ԅ"x,E|&J$S gλf*fJkf& Rf (ѸNѸJJ` *ѨFJf2%M%D %lBj%E5C|aF`RFCf* g0BH~|aӴFL~JkF`@|$#JFJk0`*Jf| )g $@#RF``F`SFnF`F`Ѥ&Lz`a(FC0<(Q(B8@ -((,0-@8((((--gP)m9m)m`:*N"(n@ g<,'f8Nj~,'f<.)f&*, n6a`Nq>&F`&J oL}H}L|H| .0@/g?@/[Nb@|4,$4{ N<dd<||0606060600000000FaF`TFgJ)l"lJ)j)ia`^g B9B$F`g B9B$F`Fg l aan`>,.(fJgz, n6a`Nq`(J@g,EJ2 f E% % 5 B % Br 5 2`  `d.(f -(fϮ,-%cB m%#`Ϛ@$@&`.BG`><&,"x$0Hi lF(0f>Jq0 g8 10f 10g.0Jq0 j&10JGg A0a`A0aԮ```",*H"x0 g i*$ n6a`Nq`$F&S$Q$F(M"x0&Q$$`z.(f`@2<taNqL.<&\bR`|!>&8JNR׸RRaR 8>"8JNR( xB a~| a@@dH@@|FF`"8RJҸN&\"ABtAab`aNu@|R>&\RRaFNs`"B0<@AaŘ"i f,)gaNqal,)ga~CE" 1pf2g/a"., ,gaR oaa߈JgH4<HB4,&,8,HD8,*,<,HF<<.,*>,,)g<<$LAaPNq(JC )gg"@`#la̚B rAa`L NiH8a˪`b-mp =m("--g `|I6<a&NuTNu&LLpHF>,6.(Ba ``~`Aa"``pTNuB8qH@0< @a`pTNu*H4<BQ+S +fgJf `<.p .;Fp+@afD;D(+El+EB;|FHD0HgfJg.%c.%D%c@$@&*!TCB|,;|:;|0$M`+J6$!TST|5|$5|D x -"-g"fg h`rAaHNqpTNua`pTNu+x!Nufg2 .".` ", , g.(g Jg` .".+@+ANu.(g*<,, n6a4`Nq`Ǵ,gǶ&Fp&Q`4@, gzR` ,gz,. n6a`NqF`FJf6".*yg,f-(f-,g-.fB*m`Aa` B F`*Hg-(g.(fF`-,f F`-m -.fX>,a+mlB<-(Fg@z,-B m6a<`NqF`ƺ+FB:(0P$g00PpPpPBpPQ E lBm., gGLHLH |,0-,@fFAa2F`@Jf8".*xg0f-(fg--f,gJ*m`Aa` B F`*H--fg-(g.(fF`,gF`Ų;m,.-m |-gC I"h g f!i F`(|-f,|`6|AaL0.^gBn^`ł-n H)`-n L)` Ma`@|,f -FNu (Xg"Hp$@"x,G g&S`aƞBXLF0(^g1|1@|ABh^aʴNu*N(n@ g(,'f$@|.-f 4,$4{ NF`8`|`ĄN6z6N6z60606060600000000Faj , 9B$F` 9B$F)l"lJ)j)ia<`9B$F l ara`..)f,fz n6a\`Nq`ô F$H"*f`AAaȌG"SJggG` f.)f, n6B*Ea`Nq`B* e c @dpar j A fp ar"xhJ1gj*f *g J fpaH *b *dpa4GB*g0 opaS2*sPdpa sPd pa``\Qlp jf" * @fRHyZ\? *(SJfp aGf*,Ig,(gp a g(l`"SJgG` j p(R@ @H8a` LpaJL"HBSn*g)I&"!CCB*giHL?H?))3@B@3@@GIp)+g((S`B*#@D&j #K )f#|` *gI*gH`R*fbB*&xhJ3g:(iD &TG*` &lJg +*n(K`g #K)I`#K&iD3|NJ#|`LIJ&B* xh i*I/N,_``jp ap apa gFo opa n6BS&@B f )e: )c )e* )b".)f;g,a` Nq`GN  *af HfV")D(A&TG `&lJfa*g(K`f$Jg&(k9|NJ)|`LIJ&kD&` )k`B)(&iDHz&&xhB3I &TJfaʰgI`(Aa Iraδ`@apaz&Ia"Kfpal)Hgpa`)IgpaT)Ig .(g)Igp a6 )c )c )e )c*g< * d pa`j :#j ` )ADJg"PgA `FNuXBAa `Aa`,m4B-9f NpN@`F|q|ptAp!< g pX 8 T-:cm:pL<paNuH`CpB m"-+g|00J)fF)fCS`0))gJ0`(0-&ЈfS$J0U@lB0 UBl@@F-Hg H:a L\L|NuL|NuH m4pN@`Lx`LxNu84g @apFH*oK"m/ N*_e -g*@`L#X|JxfNs`85ga(H 8g*@ m ( g / @NF*_ -`L#|JxfNs`Hp`Hp:<J-g prA` Fg+Kd+mPhprAXWfpNr(mdAA |p1AA p%N@`"m"(mvA p%N@`,+z:"mha"F(mvN<m|ml3mn0-p3@AtCp2Qr`xAl(j!l!l0<2< aA$p%N@r`J(jAzB@BAal mp(g8(Vg,,(*z"mhapg~C`Z+FHz!_*!M.1mB2 mp/ (mvN<(_ACp2Qr`,+z:"mha "F+Ip~ifif~0a-f -a+mB+|8p`-f0+mJ-g-ugp\a -af`+| 8p`pcpat`D+HRJ-g bp^aTRr@aF-tgc +H``nJ-g J-gp>a -aBmHA "mNLNuH瀀 -c+@ /bB@HA "mNL`z ?b2Q0@-f-uga\HA"mNL`BB md|!mQQ mhS('A |p1|agp N@LNu@FB;|;|BmBmFJ-gaTNuJ-f -ڐ+@NuK"m"(mv -zgn -ffJ-k`f(A |1|N<@ | `$ mda!@p@A |p1@aN0agp N@NuK"m"(mvN,fNu0-N`pNq```:`T`J-g0B-;|;|Bm -R+@J-gB-`B-`N( g fmg a6NuJ-gQHA"mNL` JmfaNuHQ-ugaHA "mNL` FBNDF LNu mڱc adBm``+H` mڱb g+H cR`Bma& -B2-vgng -aNu`JgS < aNuBm` mڱfBm`+HR bR@H@^aNu`x-f2-f,-f2-f8-f2-fBm`Nu-`d-`VNuJ-f`pS-`Jmf`2-5oSmf;|Sm`g"a@BfaRHA "mNLNuaa4HA "mNLNu2-oSmf;|RmNuJ-f m|NuK"m"(mvJ-gaNuK"m"(mvQHA "mNLNuK"m"(mvP-ugaHA "mNL` FBN@F NuJmf"@;m mfRm mcBmNu -fJ-g -ΐ` -ڐNuH@a;|;|BmBmB-BmJ-c B"mhS)'QQQQQB-LNuK"m"(mvH?|FBNHF aA"|,r$ p"N@`p N@L>Nu/ *AJ-g&@@@F"m"/ (mvNL(_F mN `HA`"mNL*_NsK"m"(mvg$FBNLF |pHA "mNLNuPAa Qgp N@NuHX2(&-l( pf -fad`aV`: qf -fa`a` f8( -fa`a``LNu||NuJ-c8A"mda*#@p@ |p1@a./ (mvN0(_aLNuJ-g mNNuHA "mNLNuJ-g - mNNu-fJ-gJ-g-tfNu`f-fHA$"mNLNu-fJ-ff J-fNu-fPHA0"mNLNu-f J-fF-Nu mfpaNu2-Smf;|Rm mfHAH"mNLHA"mNLNuHA<"mNLNuJ-g mNNuHA$"mNLNuHH"m"(mvN(LpNuH~@@@F"m"(mvNHFA2"|,r$ p"N@`p N@L~pNu`wawdetuj k l Tp Tr s nf g h vWwW x(022585 4A+H| m"g:|fgVtNu2<AQ2<(fQ`VtNuApZBQNu T@ +Op,*z:*a(F&j|+*rJ-tf6CpV0Ar4g XfzN E a p0Qra.mppNu,,z.av FJ) WzRgzRNuNuE2< `E #k#k2< zHa04v@Bf\vA2<@fRJfptPF@ZP(WİX`"ZJBk QRA;HlvC(SfvD0(gTr@1AނHA@AfHAvEp(4cHvFz(fvGa"fvFR(gRE`(gf b\(gcN BBHB1B41Bp# QJg3A00,fP XjB) PPaL`Jgrv` Fr`fzSx&,rJ) gRx0) gfgg0) r@gR` EV mP5,jA/ pN@``"_,, g *,Ra\(؆S" t4f )cBrcr40)0x؃e*S@b0) Xd(Xe$p)dDb Ԁd r`j؀ep@* )Rf8tx) f 8)$`8)SD)SBJJB4)& Bo4<H.5 )Rfj iTfbr0) g )rc0)0vrֆeS@b#C<#C@ a3@A aBBif)f<`R('@FBA0!XPJ@fA:+H| m"a F`| mPHDeJg h6pN@`Nqr`VLNup`pHAtpv xNP"HB!# -8*-<ZWf(EgX gP6<G(20LNu m"pPfNufhHp8"m&m|N G|)QB)3f )4"<c 4')8[)S #ѩ8)RHf$iz iTg( iTg  iTfp`pB)ko+I4)Tf|`|a2) J)3gIIAa&i@)Rfj )Rf^ iTfV0)))<aQzafJ-f8iza Gvaa`<@< aQz``jgL c Joa@`Jm`vH&H&H&H&H&H&H&H&Q`^vHHHHHHHHQNuv        Q#K@S-fRvS-zbfh` a`flJ-fB)3J4f)PL<)BEgf)CaS)'LHYmbaPt`+_|LJ-zg<NuBB))€"$NuH<<Bo EC|||R[F`8L   l|CD@ARR[F`YFfLNu/"-v+i<vvv"NuS-0<I -(gQJf,&i@ B---GvJ-zf`R-zSvJ-g(<- fB2) J)3gI@Gv`B- )Rf  fL f<`N Dc<`@; HI<g2f$-v) f) gv)m⋔`&`шXPtr`rf[QNub013085 4@0>f@^` ` o+O\-ArWg||NuBQpaaf `||Nu+O\+jh,*B:*"mPaD&F-g+K``><J-g p rAf` Fg+K`+mPdpr A2XWfpNr(m`AA |p1AFB`t,+z:"mda"FBm||3|0if0<if0)iF@hi0)// A C EBgHe SAQ``"_ _~A0<i @gh~@)( b)fJgN` rf@) g )(c)(g )g jB`Bm||PPNur`aHpaFB+g;|4p`;|8p`ZPPQBQ+f -qWNua`HpFB+gQP+g;|p`;|p"mdR)'"m"PHz/`8QF p.m\Nu;k+gApN@`r`(+HdB,+ *+RE"mdaNuagr`(چSNuH?<fJg i6pN@BWNqNq0L?NuaHp,+*+"mdaHpaFB+g|`|+g|4`|8|p` FB`/a jJ-g mN``(fh"|Nu`J-g- mN`-f J-gJ-g-pgd`R-f `-fJ-fpf J-ff`8-fP`-fJ-fF-` mfp`82-Smf;|Rm mfa`X`NJmf"@;m mfRm mcBm` -fJ-g -̐` -ؐNuJfxF@ffhffDffff\fBfBFBJmfQ"|NuJmgJmg m cP`2-mf8 m`"-̒!AmA |pB(m aDa`5Smf;|SmJ-g mba0-N`^`Nq` m̱c aDgpa`6+HJ-ga --pgc+@``a` -ggB`--f -̐+@BmNu maf b`JJg c pa`g ffc\ +HSJ-gL-qg&Jfpa-f -ar+mB+|8p`-f0+mJ-g-qgp\aN -a4`+| 8p`pcpa,`D+HRJ-g bp^a Rr@a-pgc +H``J-g J-gp>a -aBm`N0-N`xNq`F`v``` J-g0B-;|;|Bm -R+@J-gB-`B-`a g fmg aj`J-g Q`Jmfa`H瀀 -c+@ /bB@`h ?b&Q0@-f-qgaJ`'@at1|F@ |qa&_`/ aP mlACppFB2QF@a"_`|J-g a`hQ`TH@a6;|;|BmBmB-BmJ-c B"mdS)'QQQQQB-LNuHAh((rAfp@p( gp@LNuAa`ala`J4gPH?m8!mhB(|$-? 0123456789ABCDEF,.H@ e br`a>rLNuHzg@-ggjBA; AJNxxxxxxxttt~xxxxxxxxxxxxxxxxxxLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxttxxxxxxxxxxxnnxxxxxttxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp!9#H!9#ЀNu : gap @pP`Lpaa f`&a`p aTpaN` apgpa8p a2pa,P2`,P2aadpfpa`P2aLNua4 :p^f 7`7p ap a`P`HP3C~Pa  H@H J92g.Q2R6 z0:rXQ0:r !VRA"#DRI3HLNua 8a`.H(zSyHk Hz/`xJ-g#DPJ`(J9Kg H?4 z":pN@`p N@QKL,LNuPNuQJ9JgaNuPOpOppD3P3By3By3OByH瀀B3D09#B09Ґy3R@H#B09ȐyS@H3B09֐y3 9yyp# 9yypT#B!9#H!9#H @pHH@yH#TH#LNuHa CE,9*9(9ꘈLSDB69tJ9fJyZf J97g4J96gQ6` f P6` :Q7&zVN0@0;N  ">fF  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,   "FZ4Tx BBbr|4 >r & H j  4 T t P `  1NuP` gf yU` &HT`0Jkf yf` U` pΰyf` `QD y` ha `a f 3`3PX` `QX` V y##ݪ` śl y#杒#RDL`ے۪m y##ݪRDL`Tf y`a8ar yeybp: yeybpAҀ Ar29AҀ#҆#`,aVHAI Aj 3H#Daf`(3QZ0<` ByQZ`PZBy0<` a yb3a`za ydye3`a yb3`a yd~yet3`HJ@fB pHNu>OD`BCBGJPk@PX Q89o yQ8Q` a: f3`a*8a r ydp: yb#<pAҀ Ar29AҀ#҆#P7G #@`^ fD :"pB@H@09@Ҁ#ҹ# zj3`P7 e dJ9bf|Pb`J9bgTQb09py0°b``a8a9a:a;p |N@``PK#L#D$H#P3H0:@ ad"H0:@ aX"҅f RyH҅J(f RyH (fT`(TRyHfRyHaL`/B<@ynynHp F,Nup rPPX0Q`0(@XPQP `Q3`P3`a4yԖ@a`BC` yܱc"H/091!Q _`09  <DQ` y"H09d/0Q _`D Q y`H69E,9 y89a` yfJXkPXDQ89QNu&Hf y0 Jkf`jB\`"T\ :°e B ga``ha69SC  f&J\fAp:9XQ`0 znp  g gQ`Q`t (f`d|`| (f`,` (f`L|`| (f`D`t`d`T (f`T|`| (f`,` (f`|`| (f`D`> (f`|`| (f`D`HE,9`3daJAp4f##Pf y##ݹPf` QD ya >` a 6`Na * f 3`3PQQZ` Q` y##ݪa ` |śl$  y#杒# yA`&ے۪m  y##ݪa f` &HT`JXkJ(f`LU` 9f` f y##ݹf##f` a \a r ye yb p: ye yb pAҀ Ar29AҀ#҆# 9Zfa ~` a JHAI A4 3H#Da` 3QZ`JByQZ y##ݪ` PZBy`a  yb 3az`a  yd ye 3`a  yb ~3`a  yd dye Z3`HJ@fB pHNua f f3a V\a Lr yd p: yb#^pAҀ Ar29AҀ#҆#P[G #b` f@ :"pB@H@09@Ҁ#ҹ# zl2`DP[ e dJ9f|P`J9gTQ09py0°b``N"HfNu)gNug )f)``U`<D"Hg!f `Nu.*( 52383 4Nup N@/ m"B@((;fk *m"mN pJ-g-` |(g*mf*m"mN(;kJ(*m*m"mN "NutP102384 4`F`H`J```````NqNqNqNqNeLg kp N@`NuAp%N@Nu -2f mhNfNu`.Nq``@Nq`B`Nq``,Nq`.`|```\A"m"(8Nu<`A"m")8J-f Nu``vJ-fn- fQHA$"mNL`JF-fa(`a4PF@AP"|r$ p"N@`Q`/@FBQp@`/@FBPp-?-F Nu/ *AQ*_NsA"m"-A8rgHA"mNL-gNvb`A"m"08rPg pNs `h`r g pNs `V`TAHA|"mNL`<A-f `|pJkHA|"mNL`Nq"pU@Nu@NuNuH@ -2f,|t<-tg"m-f@`@LNuH@Al"m"$mGp@J-gp( f` ( g( gFB@Fp!( g@`FBFp(g( g ``FB@F -2f(&r-fr** -:f"(&r-gr9qqLNuB/r-gJ-g -2f--fJj"Nu-Nu-NuHp-LNuNu@FBI+LvA|+HA&+H+m"-gU -2fh mC(gR| (fv| fP"m"$mGQQNsVafFNuNtFNuK"m"(mv -pf4 m-f`|tHA$"mNL` Ntgp N@NuKx"m"(mv-tgHA$"mNLp-g-tgNsVaaPNu8121784 4@0fFBaF@Nu"m"|| -Rf|`||J|J)|<|< -Rf|NuB,*:*"mPa`<`&F Sg-qg<`;k+j+Kv(j+mPzpA,<XWf\0N<`:aqB"m"aJ mzR(' m-fJ,QfPQ< a``aFF ` aa1|1|7p2Q<`Bm||Nua(j<)f!l`ax j(Hz4<0 q mzS('6< g6<p<p$-C'mI~a4Nu--f< aJf < a JgJHzNuBB)$ f8J-gB2< )Vf2@+_U+_FBNu aB-JP`JP)F@Nu"m") g) g|Nu-If-Hg-qf"m"aRF@|NuH:a@B-J m-$m&mv(mR-Hz/-NS-L\|Nu,~|)m<g XXp8pX-:c-:)p9p g9p gp B4p LaNuH m4pJ-fpN@` L8+Wr`L8BrNu``bFHSD120384 4,HApNAga0$H <nBSf%J$O&aa&A$p3NAg gH瀀0|0<NA,RA,p&NAgaBj,IZ, f,$ ff a AaJgA2, aJg a ja ` VJ,g ,g KrJk BJgJgJf :Jg 4 PNRJ g $` ,(m HBa LJmf AC4gg `B-aJgk Ug 6hg`aJf2Af BA,rAB4gFgJg>` JSk ~` P5B*NJga ` h*,g B4**g RrAr`a Xa ` >B2A@f$ -&gBa g g |` *a ` B-aFJk f :`.B-a0Jk f $J-f ,g a JgZ6hhR6x 2-Ahafa (` /6hhS6x B6ha   g ` a a fJg a a ` 2-A f 6X$f|26X$g f Ra rJf Ba Jf &"6X g ga f,`"a Jf -h6hhR6x a Xa P` B-a Jk g 6hf fafa ` /` *6ha 6ha2-Aa RJCgvX!JDgvX a Jf ta Jf Xa Jgvha Jga^` Rha a ` B-a PJk (g D6hf Hf 6hf afa f`/`TJl f a Jf Ara Jf a Jg a *6h-Xa "a `B-a Jk g 6hf f 6hf aVfa `N/`*6hJl f Ra Jf `a = Xa a `B-a VJk .g J6hg,g*6h$6Xg JvXo` 2a6aa ``a(ha fa H`6hh/`*6hgha 0<NAa`fhNua*6h6haaZaNua B6Xf6XgBXb` vXbJCfJDgSfJCgjB`DCvX"JDgjB`DDvX =X"=X NuJX f."6XfJ6XPg0-@fa` ga 6Nu6h$g vhBZB^hBhBvhB6hS6x Nua f Ba`/`B-a Jkg6hfa Zfa`R/`a`D ,(mBarA x4Bg JBf.Jg*`JSk"` PNJgaZ`6hg`aa>`JmfB-a Jgk6hfa fa@`/`.*6h6ha"6XJCfJDf;A ,E;n"+n$vX$+vXA!M!l1|(A0<NAga~a`BJmfPB-atJoL6hf46haJCg>a fa`/`~Ja2- Ag Ag2 Ag,ra.`Ba g` fa&`aa `B&A1| G2!K!mB"R"i$4-* gZ"6X Bf gDRj(`  g8Rj( d.Rj&&XvX% A0<NAg ra`DC  "vX`M&!N!l 1|A0<NAf`Jf+l+l `H,J f+l ` , gf&gfAD"m - a 0f+HAA0<NAf%H.B-a2-AfJgk6hfB2-Ag6ha8JDkzJCkt"*.g ,gD&(Aa@Jg"*.HAAafB-aFJkf:J-f"*.g-8h-8hR6x B2-AfFGaFG`JkfJ-f,g,g&(AaJg"*.HAAaf|B-aJg~kz6hfnfff^HB2-Ag6ha JDkPJCkJL-h8-h8R6H B2-Afa FG6hg62-Ag$aJ*6h6haJCgRvX"JDgRvX aFa>`h2-Aga` FGaFGfa`/2-Af-h8-h8R6H a`J` ,mBa grA4BgJBfDJg> PNJSk2`BaagraV` ,m>,gBa6 g$rA^4BgJBfJg PNJSk`Ba4ag6 fa`aa`AaJg`~aCx, J6x g*6hfP6x Cx¼m` aan`a R*($gXRfBXR*6XfaaBBaga`a`BNuA<| !ll 1|hB ,fmgrA AMAD"|.IOSpaga%HZ%I^AD"|.FMSpakga%Hb%IfNu%|b`AD|;pL@ !@ MZ!NpNAgaLNu @ $(,048M*, JvXgBvXX%fB6X5$.6X6x caGxºgaGagar`|JvXf =Xa-XLaJf `r ,m 2-Ag",g f ,$m Jmf |agk v` a g `Jf Za 8Jgk \` JA`6hg 6X$g Ug &"- m "- f  Uf"-o f Jo 6hfa @6Xg`a &26X$g f Jf Ugf JvXft=Xh-XX+-XLaa RgaHJg BvXBXB6X+6hha ` ha @gJf2-Aga `^Jf b2-Af Ja taL/a f 6h6hga p`a p`AD!vX&!l!l !E!lBhlap6Xg66XgB6XQ,E%n( U@g Uf ,E%n(J(ga >B(Nu`/ AN"vX pa(ga%H%I"_Nu|%EaA p#NAg g f |d0<NA`pNuHB*, kr,E0SfL`Nu6hfa &`` ,mJmfaRgk`a Jgk`AN fAdB4BgJBftJgn PNJR g^`aAa fB-a JkgBNupNupNu6hfa`dar26X$ 6X$gg&JvXf*JXf"0 @fBX,`> @f 0-@` @ gX @`f"-k,E .βn-X,`6 @@f"6X,Sk-X,` @f"6X,R,E .βn-X,a`6hga`J6hgz6hfa`aJvXfa`XCX0 ia`a"6hg6hg &laf aga`a`AD/ "J$KGfBB 1|`!l!l Bhl!vX&!E!J$I"_pr`Favr`@r`>r`8ahr`2r`0r`*r`$r` r`r`6hfaJ`a>r`r`ra2a,a4`r`p)` p(`p*`p+"jJg0<NA`Nup)` p(`p*`p+ jB0NuBB6ha Ug. Ug. U@g( Ug" Ug U g UfJCgJDgNuJCgNuJDg Nu fNupNuBBA46hB2XgJk`JkVgH`kgB`A 2-&JXgƁf`ƁgJk`d`Bkg`JjJ`pNupNu"j.)g"xf "(xg.6xfpNuB6x bCx, )fNupNup*6hNuA B(Pf 6(8(Nu d` .IOSX f XNu6Xf, ga\R6XQava4`aH26X$, g`g46X$gf `g=X$a gBa`:a"j"i$* g",X&f X$X$"Q`a lgJ$fa`%_$"j"i$* f /*$B$NuX&g"Q`a:!AX%=X`6Xg6@B`6Bpga"d(Nu") ,yKngMvKrc`a)a$a)$yKvf EVKzc`L_gPa'Z$h f $h!J `JJgF&Rg$K`&J8e B(*Hz#MvAKKKp `&BB)g%i %i` %i %i %i$i)iAB*%|LZ h LZf gJkJg P`#LZ`b*(n&&H"(Jg A`" (g!A`2Jj"%A#LZ`" Jj'A%H yM$B(*`4LTBLVEKGK0</6S@fCKKL )f -g )4)eJfX -&f0@gU-ga(̝CKA<-2<fJXSAj`$B0 @NAL0JPa(XgJX`BAKKL $(&(x"h$-a'AL!B !CBG gJf`4GV!K gG$`G!K!|A0<NAg&K!|K!IX!|A0<NA f<,g4AL !CBh,g !l,1|#MA0<#NA`a$a$| f Jf B(+`pa%zB(+`DL_JLZgELZ`pAKaB Uf-fa`$Jf -gah`-g "h `p`p`p`p `p`p`p`p`p`p`p `p`p `p`p`p`p`p`p&p @0  v @  l a#f4a%4-B -@f)g BfX` Bg BbF2-"f>B-% Bg Bg B` e dbfJAgEd`"-'f 0<@'` e-&f 0<@&` bB6-"fTB-'eB-&e`J$gafX#LV5m 0-@25m"4m&8m'9m%7%m$ -@g -&fa a<ag`LTBa)g* f -@g -&f a a`"a; `a;f-gBLVa#LV`a` - gafTafNa#A 0< X fS@f`anf0a4e * g&`af#LVa$ - g a'g` aT2-Aa#fafLT2)a2JjJBg JAgnfaf`a fHBa fHB gadfa/-gBa&gal`ALd !i-g+lt(!lt`!m(!ll 1|1| ,|tR!@A0<NAg" fa` g a$a`+yLp0 9LxSЭ(+@,)m(pa"9mlB9LTlJEjl-g )j(8)j,4)i)i)i )iJk*.Mf"AL0<JNA5h< JBg5h:a,g!|2a"pga4`LTBLVa`"i #J3|_Jj2,AB()`afha!~ad`anfV#LV5m 0a<af<LTaf0a-Ba+>fa8zfaa`D"a8` az`aa!B* gz`$aba88* *&fpa*g*a8 g*)fB,g:AL !lA0<NAf AL!ll A0<NAf4A0< NAf*2,A , @aaaa!JfRJRfL:Bma / AMl"|.SPLpaE#MD#MH"_JfAMD0<#NA  g ga`JRf * faafa fp`aa i fafP* f - gf * g& -&g -@ga*faf0- j g 2)af"JaXf#LVa&J$Ia)fa`Va(a0 * f* f* f& m ga@f^a%lF5lJ%lL5lP2)a')jF9jJ)jL9jPJg"A 2< 0 SAfBj Bj0Jg`8aF!m$!J !|<agp`g")aeBB(yK~$)&)ff $T,R`4anIKcxB$)&)`paaaaf@/ AMl"|.SPLpaC#MD#MH"_JfAMD0<#NAgJ ga\`"i ;i a$aFJBf!HBJBf!a8a2g`ax`/ -f"_+i+i `"@ - AMlaBf+H+I "_,-.- f Jf,)`$ yM$ hgVfg P`,B-ކ-f$G ) `$i $j(yK~ gIKca\,f-gD *&gL&Laf. L0<H0S@fBlBla(2,A,Raga`-f -"- fJf`,).) )"))@)A)F)G "G`C0<ajeS@f gB0- @f"`>JkSg4 fJk Ff<` g ge `)A4 ra g f lf`T)l\8"lt",4B0*4g ``($,`gB0gRxbR`0gB lg lg lg lfJj4fdT *@gZ,fR,fJB*7D n@MkDb"Sf`bAgDb  SAf`t"n@  g,fB*7dBd ta2!@(g !I!l A0<NAg ga ` t` f2,A fvfh`H" n@a g gRaa &fhgR,gRgb(a \f R`a LfB`p  IJj4fT`8 g( n@a fJfr g a d`a b f ,|xgBJj4fUe6"lxRR4 fa f6|dBi)Ixpa a `\a:fd)l\8"ltS)Ix`(pa    Jj4fTa.f^` l|Ra f&Ha( lg$)l\8)A4 f(B0*4gz`| g~ f g g`)A4)l\8 I Jj4fTa(fa fV lfpa BJgSf a' f`tBSgpa%f`a Df fR4B0*4f 0gR`|apa&Ff0a `NqBaj$,&,x"l0,,gz``pB`p`p`p`p`p`p`p`a1`p`p`p`FUTY031584 4/ yKJf"H`f <"_NuPKc I<`H@ -g f\ - g> -&f "e8S@f`  f,S@f0<a8`  gaeS@fB"_Nu  fS@f`p`  g 0e 9c Ae ZbJ<Nu<NuH@"|?? f J_p LNugJJ`J$/gJ_`<>B * gz6jJgDC8jJgDD2fJFg jTgJFjJjTf`jTJGg jRgJGj JjRf|`jRJCg nJghJCj JnJf\`nJJDg nHgHJDj JnHf<`nHJFg5FTJGg5GRJCg=CJJDg=DHB`JFgjBjT` JjTgSjTJGgjBjR` JjRgSjRJCgjBnJ` JnJgSnJJDgjBnH` JnHgSnH`$yKvJgEVKzcHz#Mvp Nu$BNu?0<+BZS@f0Nu(yK~JgIKcHz#Mvp Nu(BNuHa0<HB\S@fLNuH$yKvf"G I Kf0< KfS@f<LNuEVKzc<`H 9LTkaLT$yLVg a@BLVLNuH瀀AK$h $j(yK~ f,RLNuIKca\H yL"yL/ab _S(  yM$B()LNuH F"G` l (gAM 0<NAaNuH@B * g2*2@ f;|""*$R+A$`"+j6$;j4"`"V+i$;i"i$aC!I"yLC!I!|&LNuHpgfXALJ gBhA0<NAB AL|RLBA*8f BB*9RBB!AA0<NAg gap LNuf&)HtBB*9S)H|)Hx)H@BB*8S)HD)yLlAL!yL 1|1| g1| A0<NAg g a, g`ja ` Hz#Mv`ZHz#Mv`LH瀀AL ,lga1|BlA0<NAB LNuH瀀AL ,lgD g>BhJ gA0<NA!ll 1| ,g1| 1| A0<NAaLNuH瀀AM,`:< * g*2 gEJENuH0,@` @ f(,f,f,f <LNu<` @f ,f҂` @@fJg gS`", lf f,f"*,`H`aL&lLB+gӪ(Ӭd+ a(LJ@NuѪ,Ѭh/ &lLk&_ a(Nu",xtRHA0BAHAJ@gRNuB#LaB*7g!B!l A0<NA hJNu/ JgJj4fTfSBfB"_Nu/a!D!l !I *@f 2UTA0<NAfS _NuH Jj4f2*Ifafa' fRBBLNuG.Mg"n@af n@"MpaF`p)@8)@4D)@4* .$ff*n aB$cJ"Kae8c axf&ae `"a|f,MSgaX`$B` gJf aDg fpL,|Nu*@ "@a8B"KaFecafa:e`Jfxag`pRJf$J c / "Ka"_Nut,BNuS` f Jg f6B`4ւBR<Nu f JFg Fg` f Jg gg<NuH"0$Vep`&IbJgaxgL DNuMSgaNf`$B`/$ga4f B$-|`Na f-I$B _Nu-@V-nZ-n^aNu/B.Mg .$fa `-|`NafMJ _NuH@pra`BJfN EXORfJ MACSf@ g< g4 yKng($Vg AvKrcAp 0S@fBLNup`/M n@"nDHA2<`-ANHV"Ha _NuH@prafBC n@p 0S@f n@"nDBh>pH@H@c n@@>H@@?praLNuH%KF5BJa ` /0ga4f -|`NB0a f-I0B _Nu-@V-n(Z-n,^aRNu/B.Mg .0fa`-|`NafMJ _Nu/ f j g&C p *gS@fBFBjJBLBjPp`4*P *L`"K JgApa|fpAK anf&HC Cm3 g Cg|Ef5BJ%IFG pA0S@fDg JAg|0"n40*PCpG 6S@fBL+NuHB[S@f`H@@",Hfp`"Aa LNuH|$,Hfa`F l@C )IP((p&a8f.af(Jf %D$ Jf %C  aBHL >JNuH`T$ g>raf6K gJj&lPHg:S@fUg`Sg#D raL*NugBSBf`H@@ graf" ra` %C  JLNuHTA? ma`h&(BA6I00"@&l@*lD",H lLBBN::=*>>>)HLgabfBL*NuJfa`pBLJ`$*,,<`X~h`$*(,<\T.<d fpgRgSbJgZg< ,\(Jk ,`:(ڀbd,fr`BaftBLBJgg`ab`ag`.gaNf$+ AP ",H`e pca`ag`( 4`a BBHFHG(KPgDda`(2(JGgЄ`Ёb$٬\Ӭ` M*lDWea~`Jfat`)HL gB &lt(S  ڋ)Ex" H#V-|`Najg @"yK~g$)g"f")HHf ")L@gCKc`L/".Za,g A"it ٱc`$a:!it!A R!@A0<NAaaz _`$,f-lj-lnP/a" _fV0*4gS)Kxag`:,g|g"ERBQBBxb0ggRRA`Whgp`Jfa`J*7fa `JfJ gaVg`\gj"B*7 ltJj4fTa2eJf4aLf.A CP LgACPDea`ag` A^aca0f `J\gBahfBLA ac lPabBE+ GP a`,+۬\:+۬`BE^fa2`AdJgA)KLanb`& *$Hga`ЗQ+\:+`BE K`JTga` JgxagJ`"p`/ af~H(VBHag:"yK~g fHgCKc`a: K"i@ ٱcaL`af.)AHB+ A Dea\`pJgB"_NuHTB",Hg6"g2adfF ,dR)@T)@\",hR)AX)A`a jSSHd`L`RHTB",Hg"+gaf2 ,T&S",X(SHdBBa "HTH\`HT * g",Hg"p)@d)@h`^B@+ A J\gBaXf&a`HTB",Hg"l@JgX"*$gVafBa&fBBC+ A0 a L(HdR*R,B%0%J MHxT`@",Lga g6`HpBg|L @ fp`nHVB&HB+ C Jf BHBL`.CCDUdJf*8 H@J@gRBa &fg Jg&paL Nu *FfaPNuH"@adf$0*J"n(Ap2S@fM BLNufBNuSafaNuHXLt R@g2<@RIBYSAfS&lL HV*2 g\B*72*4 B6f6fa `:g RCfa `*G8& JAfTxbabfag<` K`L Nua fB`HLtR&lL fa 8`f*2BBBB*7:*4f$6g*HgRRbf`gJXf`( v*IHDJDfHDarB@*9@ca `p,grJg. fH MKB& aL!eg Jfaf6B0+h,7D٬h٪,agJCg a lBL+Nup`,g+fPkfJ& 8gAagd8"l@BA C g) ICDea `aXbazg`Nqp`/B* ga"Bag"ag"ag"a g"af LNu/B`B@/ *CJgegfS@fB*_Nup`H|"lL fa r`B*7gGBfa X`ga X`4 l@Bv ֈ( A Dea :`g&^(A fa "`p C& (adbehagJ\f\AP$,DWdRJgN^Ba:e b>aXgJg6BaNfHfSEfL( gSEfa JgBL+>Nup` l@t grafA `*2 NuH>J*7fa h`^ raNfT,,`B*7"ltB:*4"Jfa >`4xd>JEf2fa *` gR K0& argep"JEfJaL|NuR`p`z`H?BBB,gR(fa `B" ga `2&lx.,|Bcr&a^fv)Mxa|gaBaB$& IB"_* ga("_* gaxg("_* gajg(""H f L(Nu @*HbRRg1#`BNu lt R$& R*,Lfa `db af춂d~" Jg*KJgBҀaga` ltafB"HK8&AKggb0SCf`" K1#f&EB@+GDea` r azg`aTf FKH&Er a`fafrB` a fa,f)Ix&EB a:faf؆KH"H`)IxSxp`)FtBa4a)HtJNuH. BB"lLfa`Jfa`"l@&()) C *,DKC,Sb$ dJf*7KbgBPBf C)IP` !fѬPLgB"lL)Ѭ\0)Ѭ`B*7)KL"WJ"f J"faV`Nu&lD&,@"lL$B)d(WB)KdJg X2ݻf`BBL"Bal/ CB( A a fJfaV`afa^B`J*7g.B:*4fB0fa$`*HgRf`*Aag&SCT\ &SCT^ &BCTS S &EETRxS VP&EETP.STT&EET[(VERSAdos Version 4.4 8503011623 BBAA>SYS:0.& CN00LOG OFmLOGOFmOFFmBYEmLOADnSTARn"STOPp CONTn4TERMo^fDATErTIMErUSEpfDEFq$ARGsNOARGsBSTOqBTERqOPTqNEWStHELPtASSIv   CLOSuCHAI}END}RETRPROCR?~BATCCANCQUER ELIMPASSwSWORDx,SECUREz`1n` `#EET 121084 4GPO'OOI/< O :f&LVPLV`@H@@B9VP#S>'A'B'C'D'E7F.ASaASaAS0aASJNBgpNA`ASBSka9W g"0|aAx'HpAW 'PzAfp#NAaL0Һc8g4<ja4'J` fa&`4@L$*aDg4`R'Da `PSkES NuL$+AdHNAfNuJ` `A`H~NANu <B$+&<aR` |p!` |`&SCT\&SCTP&EETV&SCT .SCT&SCT .ARG&SCTa (g (g`LAS'C̱S g."ggPH`f"H`'A'hp#ANA`gf f Jfa`a'@'@ A!@aAaxAap'HAad'H +g'@ALA& k,*+aa `a*B+f/+ <a '_/Gp% |NAp"ApNANug.7hg/,k.g,_2(k7Aj"+f$+ԴfBB (g (g < AJ(f <a `h &SCT f\J+gTS+`LaV'h `:aD/h /hf"`USM 121084 4-M&NOB-;| PapCa~a a a yViMVa ZB,k=|@MgdJfMg>9W gaA/ a,&_,KC L?< ga ga,SW`CLa |`*A` !|C!I C!INBT`TAI  fA`afajg/,k,_ +'@JgnyViajg$aga<`fatfga&`L_֋'| `af*Mga `jMga Nu gaS+f,KG_va <a n`REJECT NW <` V&EETQB kP'HLHBLa`ajpJANAB <a,Kf Gatva 9Vrg( 0001f/+BBMaa'W'_faA/ a*&_CaLa CLa fCLa xCa 6Mpa(`, d. |`$ yVtR+f" <&<a p0|NAAH!k <`JL'A'BB+:'FgNug$A < 0000d <a~NuAH!B 0!A'A,+gVgX(+B Jg`R gE f fB(E1|J(g f1|NCga0&HC` @|5H`|6HAH <` pJANAgkpAHp af*,+(+̄'Ffp$NAJggJNuA\ <` <>` CHAIN ABORTED(CHAIN)=  =ENTER DEFAULT SYSTEM VOLUME:USER NO.=ENTER USER NO.=LA`H~NAf8NuIg$L8ha"<$<g.A `(*k-gS<KaL~ha* ang fJg&a^  f/,(AC`  A,R!QKB ae {d/,k.f ,_ =f /f \g>c  f'M, A'F JNu+,H (g<4fZ kEP Ng  g =g gJf` =gF` (Rf (Xfz ()frX0+gf` a(J@g"$knP2EPJgc0`/ $k*$_ a H@a`ұc0Nu   <`H Nf S`~ \g =g !g &g4k`ff g fa`JJNu/,k.g,_`,,_f$f fgHUaL?Nufr`jKBatA("<$<* +fBA`H~NBg8 fJk fJkg` fJNuKBaA(` M/fnS Nu  oNuBaaa`  oNu$< aaa`'kNLa.f&(+'DJNuLaf(+'D(+`ANHpBhNCNu +LB k(g69Vjg69Vn` g69Vl*+A8H7|`>8pABhJNDNuHpA!|+fBNDLJNuaH@a < aNuXXNu  fSB`4k`  g,+'F'HNuR  gNu$/".AH,H<@<<,B^$< ,PRIV,,,*(Aڈ"<$<A`H~NBfR+kfMlag7|HBkJ7_LNCNuJffJNug g'kNNuLj&\SNuԩ &\e&\Rґ""Nuڋ؋֋Nu"+a f60`.AS Sj gP`JNuSYSCNTRL121084 4&<a+g vB2<a6Jf,KGnvagf Mga, <apNAACCOUNT OW`^alJf <`aZf <`vBp a PgNu < J+Lf < aJggp`n'HHAH`aJ" g( ALL g. .g( @c Zc <X``"+f <`Ba2g &g.$<0000a 0000f $+f$+gJgX`/a"t"$g`/JgAHHpagPNu  f _Nu <=a`AHHNAg$AH fV 0000d J+g@`R+JNuBB`>af| <&<Jf,Jg g"<&SCTpaf <aB`BBa0<arf.Jgg <J+Lf <a`R+a~JgavNuB$+`anpa*gNu < J+Lf < aBJgNuKMH-]J]=] -] -UNua/ a&_/,k-@j ,_ <4`,_fpf <5a~`HJf `kdK*J]: * *Lq aRf6Jf4<aBf&'k/,k.f",_a&/,k .,_Nu <6a 0g6`JfB$ // ,kCO"_,_µe`JgR`Sf`B|  /,kRS@,_JfNu <`(,_x$kn6K\ aXX:B@2@MP/Baa(R`g <``CMDOPT1 121084 4,KGtv`nNEWS NWMua<,KGWKJgDf| Z&@ / I(_" HAJAg R`/ IkP(_S/ &NaR,K&_Jf&NMuBaAN < BX HELP 0LOaf"+`TNu(_`fSESSION CONTROL COMMANDS:(ENTRY OF LOWER CASE LETTERS OPTIONAL)agJ bD g fgg`2<BBafNuang c <9`  f <:`/,k-C,_a/ a&_j <4`gg0f'kN`" <)`/,k,_gg ;g\Ba$a aaMwnrg HBgQB/,k&.,_ gD fJ gD g> <;`0$H/ a&_k Ofg4 k&(`& g f4g k(g@2<@afg ,+'FNuEREWERPWPREWPRPWEWPWERPRSECURE121084 4 -:]_f +̰JNuJf <ayViafDJgaL8z֋a ga`&H|L?yBap  H?HL>AHNBga AH0Bh1|NCNuJfyViL8z֋aga.Nu KG/&/&L_ֈ!|`/ &Ha,_--fNu KGH"K(Ey*'"f#h&HAHNCNuag f8 |pNAa`'kLy*aAdHNBg f <1a.`C Nu@ PRIV ACCOUNT PW+++EJf 0001f gEfHa*f aJgjL8z֋a`f AagRC Mg@ga`Jg(L8zt֋a&fAagCgab`ֱf+fNuLzHA\H|NBLzP(|*چA\H|NBf$C*(B2PRdBNu0 f H~aL~S+g*Nuzzzz zz zzENTER SECURITY WORDENTER NEW SECURITY WORDENTER EXISTING PASSWORDENTER NEW PASSWORDJfM{a"L{܋aM{aM{aL|֋'|``>+@Ba>g+0@Ka+ 4d 0e 2d+@a`Nua/ax g gJav`HLEVELS ARE: 0/NONE,1/SWORD,2/PWORD,3/BOTHUSER=0:USER NOT 0:&EETQ&EETQ,K2<afT'kL|֋؋AdHNBf6ApJNAEaCaCR0L|֋؋AdHNBNuCHAINBAT121084 4faagNu9Vpbtvag f ` 'E ,k+BfBf'Na>a,=|CF/ a &_ @gaj <az`lHCaaLH@CaaLJfH/,k,_  gaa2f BkBkBkNuCaaH,k"kPgDX'N<aga`*+ 'E f+gfZfCaa/,k,_Bkg\M`,+*+ x f fNuR  eDDNu"HAH1| f1|0CDB(BB NC INu,k]B/,k.Ў,_eNuX <`8faatgNu9Vpb^vag f 'E ` 'E ,kg+a&aZ=f7CaJ='NndNu <`f^f~,k+.f6ncFRn.f7nCaaX.<AHa Nu,kZ'N2<*+ 'E aNu/,k,_gNu <@a`f <2`JBav *gl @gz &gza^ BENg BIFgP BELg6gNu BRXg BRAg BRDg BR?ga ABTg" FORg6`\g6Nu*k`` gNuafMg;a`(`a^<!<&B< Bae f`a`NutBdgg ~gr`NuagJNuaag+Nu+Nu < `Ha> Qfaa"Ha  f "gNճgN  g "fNuaaBfN +gR+g+K|a Cgj Sg EgaL Rft,Kal (g =gt >gJ g* (=gaJf Rn&N` aJf RlNaJffRfN (=gaJfRmNaJfضRoNaJfʶRgNafkfgNfNa SEf\+g "S+gNuk++gNuNua DIFg DFORgp`+S+k` <!`,KG`,KG`,KG$Ka" (fak6g`6&NNu =f ak>Jf6&NNuR Xg Ag DgJ`E` E`EaNu Rfa +g@ -g* &g !g`ajJf0C`a\Jfv0C` aPJfj0C6&NNua@JfZ0C`a  )f$aP =f Cja@8 0fNu 1fJNu6a('y^7kbL:9VnafLZafLZa|fK'MLZadf'HLZaJf ka=|CF/ a&_"HakdLaafTafH8<af< I(  b&$aLap*<'k`a@ AgA <*` <-a <&<a <.A`P k<(HE8:< afa`Nu/AZ.HG6.HD8HD.Nua6fLa*<FafafNuf <'`T  g$<0000ax 0000f$+g" 0ALLfB'B`B<+/,k-F,_Nu  gJ <&`*aLaP*<Na$fafNu k!A <,f <+f <* f <,HAa/,k  ,.,_BBFJNuJfרa./ a&_kgB'F`<+R k!F`V <(`rv,+g RC Cf6<NuLAN0H"<tag /rBa Nu#&EETZ &BCT&EET@p AjNA&Hp AzNA'HOaтLLH'B'B BBkBkBk.<,k=k'|`aLq afӆ`ր&BCT .SCT&BCT .ARGaӒa,L?/aR _$(aк`҄alL "k,o"<` ""³SkCS 'I,'B`L?/a _`B$(/ af&_`gp/ &o&_fC6`aL Jg|`L/ a&_`/ ag4JAk0&</" &o/Bpag"<&BCTpa&_"A6&_Ap`ZGS SjgP`JAg kgBBNuB2Nu0( GS GSjJAg kgP`Jg S RH@0"$+Nu#&SCTZ]#&SCTZ] H8 .gJ4k`6<` g 'c` =C ` `4<aX6< G at4<aD n& f| 6< GaR4<a" (g6<Ga84<a (fBBBC4kJ )gg> Pn8AKAB`4Bg Bn Bc=C `HB Bc`,R6<Ga4<a|$< G &&&&6Bn $B|g$f f f f f4B|gg :fJL<NuJjX`QBgQB`BgNu4HBg64k.f(f @`< *fSCn`$HBCf`< (*f<*`SCnNuNqHBBIr ,g4k6 -f`g0g` =fRa`  f@`L NuB:< &J $gN4g`&4k&g/֟ցSEn4j  f"+Nu:<4kfg_郆SEn`Nq`"B0gAv0<6NA=|~af.gaafG:ELg,af|ւS<arflaPfdGAeaxafNNuBnl.>g-|@N|SANNCg.-@NunAT-|N|SHVANNCg-@Nu2.PA Ag -|NuDNu-|NANNCNuBA -HA -HANBfR-@Nu. f-n&=n<n6n0.>f-n "f-n&f=n*f LH,fn4fn52.JngB.(.@c.@JgH-nJ-n"-n&-n$-@A0<NAgV-@Nu.gJngB &SCTg-nA0<NAE"C0<)4Q=n<-n&A -HJ ><?BB|a> .g nfPR"SGf`F-n"-n&A0< NAf.=|~0<NAAv0<6NAg A0<5NA |0<%NAA0< NA~#taZACajACa` .Ia BA-HA-HANBJgA-HA"-HANBANC`nC-n-YkANCfNu2< c {c< SAfNu0 :m^SBfNuHK I0BBBB  g aa:afI`L8NuL Ѕc)@ , DЬ (,*Nu Їbc٭be٭Nu$&և"Gp gRSbke  f[[`G`NuSRV4: UNABLE TO LOAD TASKDUMP.SY $ $  FROM ** EMH ERROR # $ USR SVC IOS FHS LDR :TJ22@vhX&ABCIKLTWXYZDB@'d @ ERRORMSGSYADIAVAILABLEUNABLE TO OBTAIN USERS LOGICAL UNIT NUMBERUNABLE TO ASSIGN ERRORMSG.SYNO ERROR MESSAGE AVAILABLEUNABLE TO READ SENTINEL CODE \K BINARY VALUEAVAILABLEUNABLE TO WRITE TO USERS OUTPUT DEVICENESTED \K SENTINEL ARE ILLEGALMESSAGE BEING BUILT EXCEEDED BUFFER SPACEUNABLE TO RECEIVE LOGICAL UNIT NUMBER FOR DEVICE CODEUNABLE TO RETURN LOGICAL UNIT BACK TO USERUNABLE TO MOVE CALLERS PARAMETER BLOCK OR PLUG POOLPLUG POOL SIZE EXCEEDS MAXIMUM SIZE OF 96INSUFFICIENT NUMBER OF PLUG POOL DELIMITERS *$@Z, &)54*^3)+BBBy#/../-|n+##H#tCta&C-_JfA0@1|NCf ."#A!| NBf&(ajaA:HB BGI`.:gLBBd: \fb+J&f(azgp Cg Kf`4aRTaCr 1WK C"qNSn`lA!zF S!LH0$h  g4cS!JNBf*d&T  fR gJ"d !J `U`L JftA0Bh,:.:-||NC|NC ." n&`#` 5PaY`J05Pax`5Paf`K&$ 5Pa6T`$ 5Pa&`B@$5Pa`g0|4BKN(af @aRSna]`AKVf2A:!n. .2.R `bN!@!MpNAfDA: h ` d$JjSfk daj`S` 0."@ EH@05P( G!AL/(!KGa(!_Jf"(a&Sf (a&D`&D`UpB 9c 鍊Q]oH֋R&C`G af&( \f Sg Kg|Sf&h &(  g  f ."fA01|n|NCf4A0|NC#A1|NCf`#....`A!K &NBNu4<`4<0 :m^SBfNuAH`AH`AJj-Dr `4eRB`ИJjBJf JkB NuJkB`tB 9n 0lRJfg ڀSBfNuR9R9R9R9R9R9R9R9R9R9R9R9R9#Ia :FH@I~aaaB:b/I\aCXADraA|0!|  TnI<4(t  SFf  S!I?(hNB1_B9`#taZfB`b."x cBC# Nu ."Ia* ."H@IaNu/ $ fBSf(_Nu , m ,~c J,g|.NuC.JkfNuf::f2*KA:!n&G !K!|0p&MNAg*_`BNuNu!TCB&LDR`!TST$D&LDRHGHoppHD00.IOSWIN1 223FD02.IOSWIN1OPP(tCN00.IOS3#CN00wP  (CN01.IOS3#CMP1P   CN02.IOS3#CMP2P  PR .IOS2 _CPR 3B NULL:0WIN1!xD^CN00oB0SPR1E0 CMP1dSPR1E0 CMP2eSPR1E0CPR RA DIOI,|`jApNAf&H <BSfOT |'M2f'H2,k2a"|JgLAN/ 1i!iL? H?&_ (g (f(p !UDR] 1BB0$:Fg2 BpN@`a!0aE QԊ!B14!arJfBG`C <pN@`ad4+;B,g +x !EpBJjgREQG(m6AI p(Q !TCBga,.x2<aD/:>NuHVM ,@|MH?-_8-O<2<a`,,FB-nNu0<`0<F虀2<"x:C2A022@02Nua&afaafa|C!aazNuBAܰPga^BE E Rf#*(B(:^c*BK" B*AM,B.f` (<B*DBbaNu h g2a8 faX`"aJga.`aFfC`aa`3| Nu~A C ((B*(B*DBbaNuBBBIKhHz"?H"z2!BgHz?`!NJBR!>1dV| )|F\Nu! BNu;Zx0Nm<[y1OnH@a8BAH06AL@H`"BAHAA$mЂVAIЁLNuMf&f "BAHAdHAJAf f fMzNuHyŜ?.VERSAPT.CF is built from VERSAPT.BEGIN.CF at sysgen time.F=/* It will contain patches to be applied to VERSADOS after the sysgenA=/*process.The.VERSAPT.CFfileisbuiltdynamicallyatC=/* sysgen time depending on the configuration of your system whichC=/*isdefinedby.CNFGDRVR.CIand&.CNFGTASK.CIfiles.TheE=/* other VERSAPT.*.CF files are copy appended to this file to createB=/*thefinal.VERSAPT.CFfile.TheSUBScommandisrunonE=/* .VERSAPT.CF to create the .XVERSAPT.CF file whichB=/* is run after the sysgen has completed, to apply any patches to%=/* .VERSADOS.SY as required.=/*=/*=/* VERSAPT.RWINDRV.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$7800*StartofRWINDRVH*<----------------------------------------------------------------------QUIT=/*9=/*VERSAPT.DRVS10.CF-TERMDRVdriverpatchesforVME/10=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$8300*StartofTERMDRVH*<----------------------------------------------------------------------QUIT=/*=/* VERSAPT.MPSCSPR.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$BB00*StartofMPSCSPRH*<----------------------------------------------------------------------QUIT=/*=/* VERSAPT.MPSCDRV.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$BD00*StartofMPSCDRVH*<----------------------------------------------------------------------QUIT=/*=/* VERSAPT.PIADRV.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$C400*StartofPIADRVH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.FHS.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------87O$CA00*StartofFHSH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.IOS.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$E000*StartofIOSH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.FMS.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$FC00*StartofFMSH*<------------------------ ----------------------------------------------QUIT=/*=/*VERSAPT.EET.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$15000*StartofEETH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.LDR.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$19600*StartofLDRH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.IOI.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$1AD00*StartofIOCH*<----------------------------------------------------------------------QUIT=/*=/*VERSAPT.SYSINIT.CF=/*=PATCH VERSADOS.SYH*>----------------------------------------------------------------------O$1C100*StartofINTH*<----------------------------------------------------------------------QUIT=/*8=/* SYSTEM MUST BE RE-BOOTED FOR PATCHES TO TAKE EFFECT.=/*=END6' ACCT AFrrACCT LFrrACCT SA  ^ErrANALCCBSAImm@rrANALDATAAIvvCrrANALGST AI WrrANALIO AIrrANALMACRAI rrANALMAINAIrrANALMAP AIrrANALNET AI]PrrANALPDMPAI]]rrANALSYSPAIvvrrANALTABLSA3rrANALTASKAI?ErrANALTRAPAI\rrANALUST AI QrrANALUTILAI)rrBACKUP AF,,rrBACKUP LF55rr=/* =/*ACCT.AF=/*'=/* Chain file to assemble ACCT utility=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to ACCT.LS=/*=/IFC \1 =ARGACCT.LS=/ENDIF=/*=ASM ACCT.SA,ACCT.RO,\1;RZ=106=/*{ Included files are:=/*9995.&.USM.EQ=/*9995.&.TR1.EQ=/*9995.&.IOE.EQ=/*9995.&.EXE.EQ=/*}=/*=END =/* =/*ACCT.LF=/*%=/* Link chain file to create ACCT.LO=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to ACCT.LL=/*=/IFC \1 =ARGACCT.LL=/ENDIF=/*=/*=LINK ,ACCT.LO,\1;AHMIXATTRIBUTES D PSEG SEG0:0,14 $0000 INPUT ACCT.ROLIB 0.&.UTILIB.ROEND=/*=END,ACCTIDNT4,008211150830ACCOUNTINGUTILITYO*********************************************************************************ACCOUNTUSERUTILITY*F*ESTABLISHESANDUPDATESPRIV.ACCOUNT.OWFILEUSINGTHEPASSWORDFILE *ASABASE**HBR8**REVISIONHISTORY12/20/84*8*THECODEWASMADEPOSITIONINDEPENDENTBYREVISINGALL9*BYLEAINSTRUCTIONSTOLOADOFFTHEPC,ANDBYREVISING4*MEMORYLABELSREFERENCEDTOBEREFERENCEDOFFPBA.*O*******************************************************************************PAGENOLISTINCLUDE9995.&.USM.EQINCLUDE9995.&.TR1.EQINCLUDE9995.&.IOE.EQINCLUDE9995.&.EXE.EQLIST SECTION0 PBAEQU**PBA=PROGRAMBASEADDRESS"MAXERREQU3MAXINPUTERRORCOUNTDC.B'1220844'DS.B32STACK STACKEQU*CMDBUFCOMLINEOWRECLPASSKEYDS.BPWRECLBUFFDS.BOWRECLDEPARTDS.BOWDEPTCCUMTIMEDC.L0,0"ASSIPARDC.WFHASGN,FOPPR+FOPISK,1PASSNAME DC.L PWVOL DC.WPWUSR!DC.LPWCAT1,PWCAT2,PWFIL1,PWFIL2 )DC.WPWEXT,0,PWPROT,PWRECL,PWKSIZ,PWFBLK%ASSIPARA DC.W FHASGN,FOPPRPW+FOPISK,2ACCTNAME DC.L PWVOL DC.WPWUSR!DC.LPWCAT1,PWCAT2,PWFIL1,PWFIL2)DC.WOWEXT,0,PWPROT,OWRECL,OWKSIZ,PWFBLKCLOS2DC.WFHCLOS,0,2-READ1PAR DC.W IOREAD,IOPBIN+IOPIMG+IOPRTK,1,0*DC.L0,PASSKEY-PBA,PASSKEY+PWRECL-1-PBA,04READCPAR DC.W IOREAD,IOPBIN+IOPIMG+IOPRRN+IOPRTK,1,0*DC.L0,PASSKEY-PBA,PASSKEY+PWRECL-1-PBA,04READIPAR DC.W IOREAD,IOPBIN+IOPIMG+IOPRRN+IOPRTK,2,0$DC.L0,BUFF-PBA,BUFF+OWRECL-1-PBA,0-READ2PAR DC.W IOREAD,IOPBIN+IOPIMG+IOPRTK,2,0$DC.L0,BUFF-PBA,BUFF+OWRECL-1-PBA,0-WRITEPAR DC.W IOWRIT,IOPBIN+IOPIMG+IOPRRN,2,0$DC.L0,BUFF-PBA,BUFF+OWRECL-1-PBA,0-UPDATPAR DC.W IOUPDR,IOPBIN+IOPIMG+IOPRRN,2,0$DC.L0,BUFF-PBA,BUFF+OWRECL-1-PBA,0-DELETPAR DC.W IODELR,IOPBIN+IOPIMG+IOPRRN,2,0$DC.L0,BUFF-PBA,BUFF+OWRECL-1-PBA,0ERRORPAR DC.W IOWRIT,IOPASC,6,0 DC.L0,0,0,0ERRPARDC.L2,ERRORPAR-PBA*** PAGE****TABLEOFOPERATIONS* OPERATE EQU *H EPN%D-B5<=HE?MGUB]I DC.B 'A',0 DISPLAY ALL RECORDS DC.L DSPLYALL-PBA! DC.B 'B',0 DISPLAY SINGLE RECORD DC.L DISPLAY-PBA) DC.B 'C',0 ENTER OWNER DATA FOR USER NO. DC.L ENTERNEW-PBA, DC.B 'D',0 DISPLAY RECORDS FOR A DEPARTMENT DC.L DPLYDEPT-PBA+ DC.B 'N',0 BUILD NEW RECORD FOR ACCOUNTING DC.L BUILDNEW-PBA DC.B 'P',0 DISPLAY PASSWORD DC.L DPLYPASS-PBA3 DC.B 'R',0 RESET ACCUMULATION FOR RECORD SPECIFIED DC.L RESET1-PBA7 DC.B 'U',0 UPDATE/CREATE OWNER FILE FROM PASSWORD FILE DC.L UPDATE-PBA DC.B 'X',0 DELETE RECORD DC.L DELENTRY-PBA. DC.B 'Z',0 RESET ACCUMULATION FOR ALL RECORDS DC.L RESETALL-PBA DC.L 0 END OF TABLE**0HEADERDC.B'USER-DEPT-----OWNERNAME----------'1DC.B'LASTLOGOFF------USAGE--------#S-RESET',0DS0PAGE XDEFACCT.XREFASCVAL,CLASCODE,BDCONV,ODATCONV,TIMECONV****INITIALIZE* ACCT EQU *LEAPBA(PC),A6(*A6=PROGRAMBASEADDRESSREGISTER(PBA)LEAPASSKEY(PC),A7"MOVE.LA7,READ1PAR-PBA+IOSSAD(A6)"MOVE.LA7,READCPAR-PBA+IOSSAD(A6)1*ESTABLISHSTARTADDRESSINI/OPARAMETERBLOCKSLEAPASSKEY+PWRECL-1(PC),A7"MOVE.LA7,READ1PAR-PBA+IOSEAD(A6)"MOVE.LA7,READCPAR-PBA+IOSEAD(A6)1*ESTABLISHENDADDRESSESINI/OPARAMETERBLOCKSLEABUFF(PC),A7"MOVE.LA7,READIPAR-PBA+IOSSAD(A6)"MOVE.LA7,READ2PAR-PBA+IOSSAD(A6)"MOVE.LA7,WRITEPAR-PBA+IOSSAD(A6)"MOVE.LA7,UPDATPAR-PBA+IOSSAD(A6)"MOVE.LA7,DELETPAR-PBA+IOSSAD(A6)1*ESTABLISHSTARTADDRESSINI/OPARAMETERBLOCKSLEABUFF+OWRECL-1(PC),A7"MOVE.LA7,READIPAR-PBA+IOSEAD(A6)"MOVE.LA7,READ2PAR-PBA+IOSEAD(A6)"MOVE.LA7,WRITEPAR-PBA+IOSEAD(A6)"MOVE.LA7,UPDATPAR-PBA+IOSEAD(A6)"MOVE.LA7,DELETPAR-PBA+IOSEAD(A6)/*ESTABLISHENDADDRESSINI/OPARAMETERBLOCKSLEAERRORPAR(PC),A7MOVE.LA7,ERRPAR-PBA+4(A6) *ESTABLISHADDRESSINWORKAREA* LEA STACK(PC),A7 INITIALIZE STACK POINTER CMP.L #0,A2 CHECK USER NUMBER BEQ.S ACCT10 BRANCH USER =0+ MOVE.L #EM_PRIV,D0 PRIVILEGE ERROR MESSAGE BRA ERROROUT ERROR EXIT****DECODEINPUTCOMMAND* ACCT10 EQU */ LEA CLASCODE(PC),A4 CHARACTER VALIDATION TABLE! LEA CMDBUF(PC),A0 POINT TO INPUT ACCT15 EQU * CMP.B #$D,(A0) END OF LINE?' BEQ DISPLAY YES, ASSUME DISPLAY RECORD CMP.B #';',(A0)+ OPTION PREFIX? BNE ACCT15 NO, CONTINUE# MOVE.B (A0),D1 FETCH OPTION LETTER ACCT20 EQU *' LEA OPERATE(PC),A1 TABLE OF OPERATIONS ACCT30 EQU * TST.W (A1) END OF LIST? BNE.S ACCT35 NO, CONTINEUE MOVE.L #EM_CMDER,D0 NOT FOUND BRA ERROROUT ERROR EXIT ACCT35 EQU * CMP.B (A1),D1 COMPARE ENTRY BEQ.S ACCT40 FOUND ADD.L #6,A1 GO TO NEXT ENTRY BRA ACCT30 TRY NEXT ONE ACCT40 EQU * MOVE.L 2(A1),A1 GET ADDRESS ADD.LA6,A1&*ESTABLISHADDRESSTOJUMPTOFORTHE*SPECIFIEDPROCESSING JMP (A1) GO TO PROCEDURE* PAGE****ASSIGN/ALLOCATEF ILE* ASGN EQU *- MOVE.L A0,-(A7) SAVE PARAMETER BLOCK POINTER TRAP #3# BEQ.S ASGNX BRANCH ASSIGNMENT GOOD8 CMP.B #FSTAAP,D0 FILE IN USE (ACCESS PERMISSION ERROR)? BEQ.S ASGN20 OK CMP.B #FSTANNM,D0 NOT FOUND? BNE ERROROUT BRANCH OTHER ERROR, BSET #7,ASSIPARA-PBA+1(A6) SET ALLOCATE BIT TRAP #3 ALLOCATE+ASSIGN BNE ERROROUT ERROR EXIT ASGNX EQU * MOVE.L (A7)+,A0 RESTORE POINTER,CLR.LCUMTIME-PBA(A6)RESETCUMULATIVETIME$CLR.LCUMTIME-PBA+4(A6)SECONDPART RTS ASGN20 EQU * MOVE.L #DELAY,D0 DELAY COMMAND MOVE.L #233,A0 233 MILLISECONDS TRAP #1 MOVE.L (A7)+,A0 RESTORE POINTER BRA ASGN TRY AGAIN* PAGE GETFLD EQU * MOVE.B (A0)+,D1 GET CHARACTER CMP.B #'.',D1 FIELD TERMINATOR? BEQ.S GETFLD1 YES& CMP.B #';',D1 OTHER FIELD TERMINATOR? BEQ.S GETFLD1 YES MOVE.B D1,(A3)+ PUT CHAR" SUB.L #1,D6 DECREMENT FIELD COUNT BPL GETFLD CONTINUE- MOVE.L #EM_FLDSZ,D0 FIELD SIZE ERROR MESSAGE BRA ERROROUT ERROR EXIT GETFLD1 EQU * MOVE.B #' ',D2 GET A SPACE CHAR GETFLD2 EQU * TST.L D6 TEST DONE BLE.S GETFLDX BRANCH DONE MOVE.B D2,(A3)+ SPACE FILL SUB.L #1,D6 DECREMENT COUNT BRA GETFLD2 CONTINUE GETFLDX EQU * RTS* MOVEFLD EQU * TST.L D6 DONE? BLE.S MOVEFLDX YES" MOVE.B (A0)+,(A5)+ MOVE CHARACTER SUB.L #1,D6 BRA MOVEFLD CONTINUEMOVEFLDX EQU * MOVE.B #' ',(A5)+ ADD SEPARATOR RTS,PUTREGLZ OR.L #$30000000,D0 FORCE ASCII ZERO7PUTREGLS OR.L #$20000000,D0 FORCE ASCII SPACE (OR ZERO) ROL.L #8,D0 POSTION FOR MOVING MOVE.B D0,(A5)+ MOVE CHAR RTSPUTREG4 BSR PUTREGLSPUTREG3 BSR PUTREGLSPUTREG2 BSR PUTREGLZ BSR PUTREGLZ MOVE.B D5,(A5)+ PUT SEPARATOR RTS PUTMSW EQU * ROL.W #8,D0 MS WORD -> LS OR.B #'0',D0 FORCE DIGIT MOVE.B D0,(A5)+ PUT IN BUFFER RTS PUTD0 EQU * BSR PUTMSW BSR PUTMSW SWAP D0 BSR PUTMSW BSR PUTMSW RTS PAGEO*********************************************************************************ADD/CUMULATEELAPSEDTIME*B*ADDSTHEELAPSEDTIMEINREGSD1ANDD2TOTHEADDRESSSPECIFIED *INREGA1.*O*******************************************************************************ADDLAPSE EQU * ADD.L 4(A1),D2 ADD TIME& CMP.L #1000*60*60*24,D2 TEST ROLLOVER BCS.S ADDLAPS1 NO ROLLOVER' SUB.L #1000*60*60*24,D2 SUBTRACT 1 DAY ADD.L #1,D1 INCREMENT DAY COUNTADDLAPS1 EQU * ADD.L (A1),D1 ADD DAYS MOVE.L D1,(A1)+ PUT DAYS BACK MOVE.L D2,(A1) PUT TIME BACK RTSO***********************************************************************************CUMULATETIME*O******************************************************************************* ACCUM EQU *3 MOVEM.L BUFF-PBA+OWCTIMS(A6),D1-D2 GET TIME TO ADD. LEA CUMTIME(PC),A1 POINT TO PLACE TO CUMULATE BRA ADDLAPSE ADD IT AND RETURN* PAGEO********************************************************************************4*COMPUTEELAPSEDHOURS,MINUTES,SECONDS,MILLISECONDS**MOVE.L,D0*MOVE.L,D1*BSRELAPTIME**RETURNSHOURSD0 *MINUTESD1 *SECONDSD2*O*******************************************************************************ELAPTIME EQU *. DIVU #60000,D1 REMAINDER MILLISECONDS,MINUTES MOVE.L D1,D3 SAVE CLR.L D2 CLEAR UPPER MOVE.W D3,D2 MINUTES DIVU #60,D2 MINUTES,HOURS CLR.L D1 CLEAR UPPER MOVE.W D2,D1 HOURS MULU #24,D0 DAYS TO HOURS ADD.L D1,D0 TOTAL HOURS CLR.W D2 RESET HOURS MOVE.L D2,D1 FETCH MINUTES SWAP D1 POSITION MINUTES CLR.W D3 CLEAR MINUTES SWAP D3 POSITION MILLISECONDS# DIVU #1000,D3 MILLISECONDS,SECONDS CLR.L D2 CLEAR UPPER MOVE.W D3,D2 SECONDS RTS*LAPSEPUT EQU * MOVE.B #':',D5 SEPARATOR" BSR BDCONV CONVERT HOURS TO ASCII BSR PUTREG4 TRANSFER TO BUFFER MOVE.L D1,D0 FETCH MINUTES$ BSR BDCONV CONVERT MINUTES TO ASCII SWAP D0 2 CHAR MAX BSR PUTREG2 TRANSFER TO BUFFER MOVE.L D2,D0 FETCH SECONDS$ BSR BDCONV CONVERT SECONDS TO ASCII SWAP D0 2 CHAR MAX MOVE.B #' ',D5 SPACE TERMINATOR BSR PUTREG2 TRANSFER TO BUFFER RTS  PAGEH************************************************************************5***SUPPORTSUBROUTINETOPUTDATE/TIMEINREGISTERS*TOMESSAGEBUFFER;*REQUIRESPUTADDRESSINA0WHICHISINCREMENTEDONRETURN#*REQUIRESSEPARATORCHARATERIND5 *PUTSSPACEFOLLOWING3RDGROUP*H************************************************************************PUTDTIM BSR.S PUT HH OR MM SWAP D0 GET OTHER HALF BSR.S PUT MM OR DD MOVE.B #' ',D5 SPACE TERMINATOR MOVE.L D1,D0 GET 3RD PART BSR.S PUT SS OR YY RTSPUT ROL.W #8,D0 GET MS CHAR MOVE.B D0,(A5)+ TO BUFFER ROL.W #8,D0 GET LS CHAR MOVE.B D0,(A5)+ TO BUFFER$ MOVE.B D5,(A5)+ SEPARATOR TO BUFFER RTSO***********************************************************************************DISPLAYCUMULTIVETIMESUM*O******************************************************************************* DPLYSUM EQU *# LEA CMDBUF(PC),A5 START OF MESSAGE& MOVE.L #'USAG',(A5)+ START OF MESSAGE! MOVE.L #'E = ',(A5)+ SECOND PART) MOVEM.L CUMTIME-PBA(A6),D0-D1 FETCH TIME BSR ELAPTIME CONVERT TO ASCII BSR LAPSEPUT PUT IN BUFFER MOVE.B #$C,(A5)+ FORM FEED CLR.B (A5) PUT TERMINATOR# LEA CMDBUF(PC),A5 START OF MESSAGE BRA OUTMSG OUTPUT IT AND RETURN PAGEO******************************************************************************** ***READSPECIFIEDOWNERRECORD*O*******************************************************************************REDOWNER EQU *& LEA ASSIPARA(PC),A0 ASSIGN OWNER FILE BSR ASGN ASSIGN IT BSR USERNUM GET USER NUMBER MOVE.L A0,-(A7) SAVE POINTER(MOVE.LD3,BUFF-PBA(A6)PUTUSERNO./KEY LEA READIPAR(PC),A0 READ RANDOM TRAP #2 BNE ERROROUT ERROR EXIT' MOVE.L (A7)+,A0 RESTORE CMDBUF POINTER RTSO***********************************************************************************READNEXTOWNERRECORD*O******************************************************************************* REDNEXT EQU *4 LEA READ2PAR(PC),A0 READ SEQUENTIAL PARAMETER BLOCK TRAP #2 BEQ.S REDNEXTX OK CMP.B #ISTAEOF,D0 END OF FILE? BEQ.S REDNEXTX OK, RETURN BRA ERROROUT ERROR EXITREDNEXTX EQU * RTSO***********************************************************************************WRITEUPDATEDRECORDBACK*O*******************************************************************************UPRECORD EQU ** LEA UPDATPAR(PC),A0 UPDATE PARMETER BLOCK TRAP #2 BNE ERROROUT ERROR EXIT RTS* PAGEO********************************************************************************,***RESETCUMULATIVETIMEANDSESSIONCOUNT*O******************************************************************************* RESETIT EQU *2 LEA BUFF+OWCTIMS(PC),A1 ADDRESS TO START CLEARINGMOVE.L#BUFF-PBA+OWRECL,D7 ADD.LA6,D7*D7=ADDRESSTOCOMPAREAGAINSTRESETIT1 EQU *CMP.LD7,A1TESTDONE BEQ.S RESETITX DONE CLR.B (A1)+ ZERO BRA RESETIT1 CONTINUERESETITX EQU ** MOVE.L #GTDTIM,D0 GET RESET TIME AND DATE$ LEA BUFF+OWRESTS(PC),A0 PUT ADDRESS TRAP #1 GET IT RTS PAGEO*******************************************************************************#***FORMATOWNERRECORDANDOUTPUTO*******************************************************************************FMTOWNER EQU *+ LEA BUFF(PC),A0 START OF OWNER RECORD READ$ LEA CMDBUF(PC),A5 BUFFER FOR OUTPUT' MOVE.L (A0),D0 FETCH KEY (USER NUMBER) BSR BDCONV CONVERT TO ASCII% OR.L #'0000',D0 FORCE LEADING ZEROES BSR PUTREG4 TO OUTPUT BUFFER/ LEA BUFF+OWDEPTS(PC),A0 GET DEPARTMENT ADDRESS* MOVE.L #OWDEPTC,D6 DEPARTMENT FIELD COUNT" BSR MOVEFLD MOVE DEPARTMENT FIELD) LEA BUFF+OWNAMES(PC),A0 GET NAME ADDRESS$ MOVE.L #OWNAMEC,D6 NAME FIELD COUNT BSR MOVEFLD MOVE NAME FIELD SUB.L #1,A5 NO SPACE$ CLR.L D1 CLEAR IN CASE DATE IS ZERO7 MOVE.L BUFF-PBA+OWLLOFFS(A6),D0 FETCH LAST LOGOFF DATE BEQ.S FMTOWN1 NONE TO CONVERT BSR ODATCONV CONVERT DATE FMTOWN1 EQU * OR.W #'00',D1 FORCE ZEROES OR.L #'0000',D0 FORCE ZEROES MOVE.B #'/',D5 SEPARA TOR BSR PUTDTIM MOVE DATE4 MOVE.L BUFF-PBA+OWLLOFFS+4(A6),D0 FETCH LOGOFF TIME BSR TIMECONV CONVERT TIME OR.W #'00',D1 FORCE ZEROES OR.L #'0000',D0 FORCE ZEROES MOVE.B #':',D5 TIME SEPARATOR BSR PUTDTIM TRANSFER TIME6 MOVEM.L BUFF-PBA+OWCTIMS(A6),D0-D1 FETCH ELAPSED TIME" BSR ELAPTIME COMPUTE ELAPSED TIME( BSR LAPSEPUT PUT ELAPSED TIME IN BUFFER1 MOVE.L BUFF-PBA+OWSCNTS(A6),D0 GET SESSION COUNT* BSR BDCONV CONVERT SESSION COUNT TO ASCII# BSR PUTREG4 TRANSFER SESSION COUNT$ CLR.L D1 CLEAR IN CASE DATE IS ZERO* MOVE.L BUFF-PBA+OWRESTS(A6),D0 RESET DATE BEQ.S FMTOWN2 NONE TO CONVERT BSR ODATCONV CONVERT DATE FMTOWN2 EQU * ROL.W #8,D1 POSITION YR OR.B #'0',D1 FORCE DIGIT MOVE.B D1,(A5)+ ROL.W #8,D1 POSITION 2ND DIGIT OR.B #'0',D1 FORCE DIGIT MOVE.B D1,(A5)+ BSR PUTD0 PUT MO/DAY0 MOVE.L BUFF-PBA+OWRESTS+4(A6),D0 GET RESET TIME BSR TIMECONV CONVERT TIME BSR PUTD0 HOURS/MINUTES CLR.B (A5) OUTPUT TERMINATOR LEA CMDBUF(PC),A5 START OF LINE BRA OUTMSG OUTPUT LINE PAGEO********************************************************************************&***FORMATPASSWORDRECORDANDOUTPUT*O******************************************************************************* FMTPASS EQU *" LEA PASSKEY(PC),A0 ADDRESS OF KEY LEA CMDBUF(PC),A5 PUT ADDRESS MOVE.L (A0)+,D0 GET KEY BSR BDCONV CONVERT TO ASCII OR.L #'0000',D0 FORCE DIGITS MOVE.B #'=',D5 SEPARATOR BSR PUTREG4 PUT IN BUFFER# MOVE.L #PWRECL-PWKSIZ,D6 GET COUNT BSR MOVEFLD MOVE PASSWORD CLR.B (A5) PUT TERMINATOR# LEA CMDBUF(PC),A5 START OF MESSAGE$ BRA OUTMSG OUTMSG OUTPUT AND RETURN PAGEO********************************************************************************)***CREATEOWNERFILEFROMPASSWORDFILE*O********************************************************************************-***READSEQUENTIALENTRIESINPASSWORDFILE* UPDATE EQU *( LEA ASSIPAR(PC),A0 ASSIGN PASSWORD FILE BSR ASGN ASSIGN IT& LEA ASSIPARA(PC),A0 ASSIGN OWNER FILE BSR ASGN ASSIGN IT UPDATE5 EQU *3 LEA READ1PAR(PC),A0 READ NEXT PASSWORD FILE RECORD TRAP #2 READ BEQ.S UPDAT10 OK CMP.B #ISTAEOF,D0 END OF FILE?) BEQ.S UPDAT100 YES, END OF PASSWORD FILE> BRA ERROROUT OUTPUT ERROR MESSAGE AND RETURN TO COMMAND INPUT*"***USEKEY,PREPAREBLANKRECORD* UPDAT10 EQU * LEA PASSKEY(PC),A1 PASSWORD KEY LEA BUFF(PC),A2 WRITE BUFFER MOVE.L (A1),(A2)+ TRANSFER KEYMOVE.L#BUFF-PBA+OWLLOFFS,D7 ADD.LA6,D7&*ESTABLISHADDRESSTOCOMPAREAGAINST UPDAT15 EQU *CMP.LD7,A2ENDOFOWNERINFO? BEQ.S UPDAT20 YES+ MOVE.B #' ',(A2)+ PUT SPACES IN OWNER INFO BRA UPDAT15 CONTINUE UPDAT20 EQU *MOVE.L#BUFF-PBA+OWRECL,D7 ADD.LA6,D7&*ESTABLISHADDRESSTOCOMPAREAGAINST UPDAT20X:CMP.LD7,A2ENDOFBUFFER? BEQ.S UPDAT30 YES CLR.L (A2)+ CLEAR BUFFER BRA UPDAT20X CONTINUE*"***ATTEMPTWRITEOFBLANKRECORD* UPDAT30 EQU *3 LEA WRITEPAR(PC),A0 PARAMTER BLOCK TO WRITE RECORD TRAP #2 BEQ UPDATE5 CONTINUE( CMP.B #ISTARE,D0 RECORD ALREADY EXISTS? BEQ UPDATE5 CONTINUE BRA ERROROUT ERROR EXIT*!***READOWNERFILESEQUENTIALLY*UPDAT100 EQU *2CLR.LBUFF-PBA(A6)READFIRSTACCOUNTFILERECORD0 LEA READIPAR(PC),A0 READ INITIAL ACCOUNT RECORD TRAP #2 BEQ.S UPDAT110 OK CLR.LBUFF-PBA(A6)KEY=USER0> BRA ERROROUT OUTPUT ERROR MESSAGE AND RETURN TO COMMAND INPUT*'***READCORRESPONDINGPASSWORDRECORD*UPDAT110 EQU *9MOVE.LBUFF-PBA(A6),PASSKEY-PBA(A6)TRANSERUSERNO./KEY; LEA READCPAR(PC),A0 READ PASSWORD FILE FOR USER IN ACCOUNT TRAP #2 BEQ.S UPDAT150 OK1 CMP.B #ISTARN,D0 TEST FOR ABSENT PASSWORD RECORD BNE ERROROUT OTHER ERROR*3***DELETEOWNERRECORDFORABSENTPASSWORDRECORD*= LEA DELETPAR(PC),A0 PARAMETER BLOCK TO REMOVE ACCOUNT RECORD TRAP #2 BEQ.S UPDAT150 OK> BRA ERROROUT OUTPUT ERROR MESSAGE AND RETURN TO COMMAND INPUTUPDAT150 EQU *- LEA READ2PAR(PC),A0 READ NEXT ACCOUNT RECORD TRAP  #2 BEQ UPDAT110 CONTINUE' CMP.B #ISTAEOF,D0 END OF ACCOUNT FILE? BEQ ACCTEXIT DONE8 BRA ERROROUT OUTPUT MESSAGE AND RETURN TO COMMAND INPUT PAGEO******************************************************************************** ***BUILDNEWACCOUNTINGRECORD*O*******************************************************************************BUILDNEW EQU *9 LEA ASSIPARA(PC),A0 PARAMETER BLOCK TO ASSIGN OWNER FILE BSR ASGN BSR USERNUM GET USER NUMBER7MOVE.LD3,BUFF-PBA(A6)PUTUSERNUMBERINKEYPOSITIONBUILDNEX EQU *2 MOVE.L #OWDEPTC,D6 CHARACTER COUNT FOR DEPARTMENT$ LEA BUFF+OWDEPTS(PC),A3 PUT ADDRESS BSR GETFLD GET DEPARTMENT FIELD2 MOVE.L #OWNAMEC,D6 CHARACTER COUNT FOR NAME FIELD$ LEA BUFF+OWNAMES(PC),A3 PUT ADDRESS BSR GETFLD GET NAME FIELD& BSR RESETIT RESET ACCUMULATION FIELDS4 LEA WRITEPAR(PC),A0 PARAMETER BLOCK TO WRITE RECORD TRAP #2 BEQ ACCTEXIT BRANCH GOOD WRITE! CMP.B #ISTARE,D0 ALREADY EXISTS? BEQ.S ENTER60 OK, MODIFY IT BRA ERROROUT ERROR EXIT* PAGEO********************************************************************************$***ENTEROWNERDEPARTMENTANDNAME*O*******************************************************************************ENTERNEW EQU * BSR REDOWNER' BNE BUILDNEX DOES NOT EXIST, BUILD NEW ENTER20 EQU *" MOVE.L #OWDEPTC,D6 EXPECTED COUNT$ LEA BUFF+OWDEPTS(PC),A3 PUT ADDRESS BSR GETFLD GET DEPARTMENT FIELD ENTER40 EQU *" MOVE.L #OWNAMEC,D6 EXPECTED COUNT$ LEA BUFF+OWNAMES(PC),A3 PUT ADDRESS BSR GETFLD GET NAME ENTER60 EQU *+ LEA UPDATPAR(PC),A0 UPDATE PARAMETER BLOCK TRAP #2% BEQ.S DISPLAY1 DISPLAY RESULTS, EXIT BRA ERROROUT ERROR EXIT PAGEO***********************************************************************************DELETEENTIREOWNERRECORD*O*******************************************************************************DELENTRY EQU *9 LEA ASSIPARA(PC),A0 PARAMETER BLOCK TO ASSIGN OWNER FILE BSR ASGN ASSIGN IT BSR USERNUM GET USER NUMBERMOVE.LD3,BUFF-PBA(A6)PUTKEY2 LEA DELETPAR(PC),A0 DELETE RECORD PARAMETER BLOCK TRAP #2 BEQ ACCTEXIT BRANCH OK BRA ERROROUT ERROR EXIT* PAGEO********************************************************************************$***DISPLAYSINGLESPECIFIEDRECORD*O******************************************************************************* DISPLAY EQU * BSR REDOWNER BNE ERROROUT ERROR EXIT MOVE.L A0,-(A7) SAVE POINTER' LEA CLOS2(PC),A0 CLOSE PARAMETER BLOCK TRAP #3& LEA HEADER(PC),A5 HEADER LINE MESSAGE BSR OUTMSG OUTPUT MOVE.L (A7)+,A0 RESTORE POINTERDISPLAY1 EQU * BSR FMTOWNER BRA ACCTEXIT* PAGEO***********************************************************************************DISPLAYALLRECORDS*O*******************************************************************************DSPLYALL EQU *$ LEA ASSIPARA(PC),A0 OPEN OWNER FILE BSR ASGN LEA HEADER(PC),A5 HEADER LINE BSR OUTMSG OUTPUTDSPLYA10 EQU * BSR REDNEXT READ NEXT RECORD TST.B D0 TEST STATUS' BMI USETIME RETURN MINUS => EOF (DONE)& BSR FMTOWNER FORMAT AND OUTPUT RECORD BSR ACCUM CUMULATE USAGE BRA DSPLYA10 CONTINUE* PAGEO********************************************************************************-***DISPLAYRECORDSFORDEPARTMENTSPECIFIED*O*******************************************************************************DPLYDEPT EQU *+ LEA ASSIPARA(PC),A0 ASSIGN PARAMETER BLOCK BSR ASGN LEA CMDBUF(PC),A0 GET ADDRESS LEA DEPART(PC),A3 PUT ADDRESS MOVE.L #8,D6 FETCH COUNT BSR GETFLD GET DEPARTMENT FIELD LEA HEADER(PC),A5 HEADER LINE BSR OUTMSG OUTPUTDPLYDEP1 EQU * BSR REDNEXT READ NEXT RECORD TST.B D0 TEST DONEBMI.SUSETIMEDONE. MOVEM.L DEPART-PBA(A6),D1-D2 FETCH DEPARTMENT8 LEA BUFF+OWDEPTS(PC),A3 CORRESPONDING ADDRESS IN RECORD' CMP.L (A3)+,D1 COMPARE DEPARTMENT NAME BNE DPLYDEP1 SKIP THIS ONE" CMP.L (A3),D2 COMPARE SECOND HALF BNE DPLYDEP1 SKIP THIS ONE' BSR FMTOWNER FORMAT AND DISPLAY RECORD B SR ACCUM CUMULATE TIME BRA DPLYDEP1 CONTINUE* PAGEO***********************************************************************************RESETONERECORD*O******************************************************************************* RESET1 EQU * BSR REDOWNER READ RECORD, MOVE.L BUFF-PBA+OWCTIMS(A6),CUMTIME-PBA(A6)0 MOVE.L BUFF-PBA+OWCTIMS+4(A6),CUMTIME-PBA+4(A6)& BSR DPLYSUM DISPLAY USAGE BEING RESET BSR RESETIT RESET BSR UPRECORD UPDATE WRITE BRA.S ACCTEXIT* PAGEO***********************************************************************************RESETALLRECORDS*O*******************************************************************************RESETALL EQU *$ LEA ASSIPARA(PC),A0 OPEN OWNER FILE BSR ASGN ASSIGN ITRESETA10 EQU * BSR REDNEXT READ NEXT RECORD TST.B D0 TEST STATUS) BMI.S USETIME MINUS RETURN => EOF (DONE) BSR ACCUM CUMULATE USAGE BSR RESETIT RESET BSR UPRECORD UPDATE WRITE BRA RESETA10 CONTINUEO***********************************************************************************DISPLAYPASWWORD*O*******************************************************************************DPLYPASS EQU *3 LEA ASSIPAR(PC),A0 ASSIGN PASSWORD PARAMETER BLOCK BSR ASGN BSR.S USERNUM GET USER NUMBER"MOVE.LD3,PASSKEY-PBA(A6)PUTKEY LEA READCPAR(PC),A0 READ RANDOM TRAP #2 BEQ.S DPLYPAS1 BRANCH GOOD BRA.S ERROROUT ERROR EXITDPLYPAS1 EQU * BSR FMTPASS BRA.S ACCTEXIT PAGE****DISPLAYUSAGETIME* USETIME EQU * BSR DPLYSUM DISPLAY USAGE TIME****UTILITYEXIT*ACCTEXIT EQU * CLR.L D0 RESET UPPER HALF" MOVE.L #0,A0 CLEAR ABORT REGISTER ACCTBYE EQU *" MOVE.W #TERM,D0 TERMINATE COMMAND TRAP #1 DONE!!!****USERNUMSUBROUTINE* USERNUM EQU *( LEA CMDBUF(PC),A0 START OF INPUT BUFFER0 BSR ASCVAL CONVERT ASCII STRING TO BINARY VALUE TST.L D1 NUMBER FOUND? BPL.S USERNUM1 YES, MOVE.L #EM_NONUM,D0 NO NUMBER ERROR MESSAGE BRA.S ERROROUT ERROR EXITUSERNUM1 EQU * CMP.L #9999,D3 TEST SIZE BLS.S USERNUMX BRANCH OK ADD.L #4,A7 POP RETURN' MOVE.L #EM_VSIZE,D0 SIZE ERROR MESSAGE BRA.S ERROROUT ERROR EXITUSERNUMX EQU * RTS****OUTPUTMESSAGE* OUTMSG EQU * MOVE.L D0,-(A7) SAVE ERROR CODE2 LEA ERRORPAR(PC),A0 ERROR MESSAGE PARAMETER BLOCK* MOVE.L A5,12(A0) START ADDRESS OF MESSAGE OUTMSG1 EQU *& TST.B (A5)+ SEARCH FOR END OF MESSAGE BNE OUTMSG1 CONTINUE SUB.L #1,A5 ADJUST BACK! MOVE.L A5,16(A0) PUT END ADDRESS TRAP #2 OUTPUT MESSAGE# MOVE.L (A7)+,D0 REFETCH ERROR CODE RTS****ERRORTERMINATION*ERROROUT EQU */MOVEM.LD0/A0,ERRORPAR-PBA(A6)SAVEPARAMETERS- MOVEM.L ERRPAR-PBA(A6),D0/A0 INITIALIZE REGS4 MOVE.L #(LDFLUN<<16+CDFLUN),8(A0) PUT LOGICAL UNITS CLR.L 12(A0) NO PLUG POOL CLR.L 16(A0) NO PLUG POOL TRAP #4, MOVE.L ERRORPAR-PBA(A6),D0 FETCH ERROR CODE! SWAP D0 ERROR CODE TO UPPER HALF MOVE.W #8000,A0 BRA ACCTBYE TERMINATE* END ACCT;TTLANALCCBS.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALCCBS.AI*9********************************************************* SECTION0**CHANNELCONTROLBLOCKHEADER**PCCBHDAENDLINEDC.B'CHANNELCONTROLBLOCKS'ENDLINEDC.B'----------------------'ENDLINEPCCBHDAEEQU*-1DS.W0PCCBHDDC.B''(DC.B'CHANNELCONTROLBLOCK--LEVEL'PCCBHDLDC.B0DC.B'--VECTOR#'PCCBHDVDC.B''PCCBHDEEQU*-1DS.W0**EQUATEFIELDSWITHINCCB* CCBALLEQU$4CCBVECTEQU$24CCBPPRIOEQU$25PAGE SECTION8**PRINTCHANNELCONTROLBLOCKS*XREF.SCCBHD,NEWPAGE XREF.SADROFST2,ADRBGND,CNTBYTEX REF.SPMDUMP,CONVDEC3,RDBUF XDEFCRCCBS*/CRCCBSMOVE.LCCBHD(A3),D4ADDRESSOFFIRSTCCBBEQCRCCB4BRANCHIFNONE BSRNEWPAGEPRINTPCCBHDA*$CRCCBAWANT#18,#2TESTFORNEWPAGE,MOVE.LD4,ADROFST2-MBD(A6)STARTINGADDRESS#CLR.LADRBGND-MBD(A6)COUNTFROM0MOVE.L#$100,CNTBYTE-MBD(A6) BSRPMDUMP PRINTFSPACE#LEARDBUF(PC),A5WHERECCBLOCATED$MOVE.BCCBPPRIO(A5),D0LEVELNUMBERADD.B#$30,D0CONVTOASCIILEAPCCBHDL(PC),A0MOVE.BD0,(A0)MOVE.BCCBVECT(A5),D0$LEAPCCBHDV(PC),A1WHEREINMESSAGE BSRCONVDEC3PRINTFPCCBHD*CRCCBA1PRINTFSPACE1MOVE.LRDBUF+CCBALL-MBD(A6),D4NEXTCCBINCHAIN BNECRCCBA CRCCB4RTSeA;TTLANALDATA.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALDATA.AI*9********************************************************* SECTION.S0 BEGDATAEQU* XDEFMBD MBDEQU*+VERSIONDC.B'021585'DATEOFLASTREVISION(DC.B''BLANKINDICATESCLEANASSEMBLY!DC.B'4'MAJORVERSA-DOSRELEASE DS.B$80 STACKEQU*INITDREGEQU*.MONITORDC.L0,0MONITORTASKNAMEANDSESSION"VOLNAMEDC.L0DEFAULTVOLUMENAME"USERNUMDC.L0DEFAULTUSERNUMBER CATALOGDC.L0,0DEFAULTCATALOG!CMDLNGDC.L0COMMANDLINELENGTH%LOGUNTSDC.L0LOGICALUNITSASSIGNEDTASKNAMDC.L0THISTASK'SNAME"TASKSESDC.L0THISTASK'SSESSION"USERNUMLDC.L0LOGONUSERNUMBER*(CLINECOMLINE80BUFFERFORCOMMANDLINE*PARSAREGEQU*XDEFOUTPSRT,SYSPAROF#OUTPSRTDC.L0OUTPUTFIELDADDRESS"OPTSRTDC.L0OPTIONFIELDADDRESS6SYSPAROFDC.L$900SYSPARoffset(DefaulttoEXORmacs)*2FATLCNTDC.W5NUMBEROFTIMESTOTRYBEFOREABORT*"ASQPBDC.L0,0TASK,SESSION=SELFDC.B7,30STATUS,MAXMSGDC.L200SIZEOFQDC.L0,0ASRADDRESS**FHSANDIOSPARAMETERBLOCKS*0BRKIOSDC.WIOBRKSCLAIMBREAKSFORTHISSESSION DC.WIOPCAD DC.W5,0)DC.L0,0,0,0,0ADDRESSTOGOTOONBREAKPAGE*4*ERRORMESSAGEUSEDBYMANYTABLEPRINTINGROUTINES*XDEFERMSG1,ERMSG1EERMSG1ENDLINEEDC.B'*****ERROR-BADSTART/END/COUNT-PRINTOUTTERMINATED*****'ENDLINEERMSG1EEQU*-1DS.W0 XDEFERRPBLK*'* Error message handler parameter block*4ERRPBLKDC.L0UserregD0containsERRMSGkeyvalue/DC.L0UserregA0pointsatI/Ocontrolblock0DC.B0Erroroptions[bit0-->queryresponse](DC.BLDFLUNLogginglogicalunitnumberDC.B0Queryreturncharacter.DC.BCDFLUNCommandinputlogicalunitnumber(DC.L0Beginningofusertextplugpool"DC.L0EndofusertextplugpoolnD:TTLANALGST.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALGST.AI*9********************************************************* SECTION0*%*GLOBALSEG MENTTABLE*GSTBHDENDLNLFDC.B'GLOBALSEGMENTTABLE'ENDLINEDC.B'--------------------'ENDLINE:DC.B'SESSION---NAME---ATTRCNTSRTADRENDADRBYTES'ENDLINEGSTBHDEEQU*-1DS.W0**GSTDETAILLINE* GSTBDC.B''FLDGSHDSS,<''>,6,CSESSION FLDGSHDNM,<''>,8,CNAME(HEX)"FLDGSHNMA,<''>,4,CNAME(ASCII) FLDGSHDAT,<''>,4,CATTRIBUTESFLDGSHDCT,<''>,4,CUSECOUNT!FLDGSHDPA,<''>,4,CPHYADDRESS.FLDGSHDNB,<'00TOXXXXFF'>,4,CNUMBERBYTES2FLDGSHDSZ1,<'00'>,4,CSIZEIN1024BYTES012585FLDGSHDSZ2,<'.'>,2,C DC.B'K' GSTBEEQU*-1DS.W0PAGE SECTION8*,****PRINTTHEGLOBALSEGMENTTABLE**** XDEFGSTBLXREF.SRDBUF,GSTBEG,PDSKERR*GSTBLTST.LGSTBEG(A3)-BEQGSTBLRBranchifnoglobalsegmenttable+WANT#12,#2CHECKFORENOUGHLINESONPAGEPRINTGSTBHDPRINTTHEHEADING!LEARDBUF(PC),A4STARTOFBUFFER*RD#20,GSTBEG(A3),(A4),PDSKERRGETHEADER CLR.LD2CLR.LD40125850MOVE.WGSTNPAGE(A4),D2SIZEOFTABLE(INPAGES)LSL.L#8,D2CONVERTTOBYTES#CMP.L#MAXBUF,D2GREATERTHANMAX?BLE.SGSTBL2BRANCHIFNO#MOVE.L#MAXBUF,D2IFYES-USEMAXGSTBL2MOVE.LA4,D6$ADD.LD2,D6D6=ENDOFTABLEADDRESS,RDD2,GSTBEG(A3),(A4),PDSKERRREADANENTRY&MOVE.WGSTLENT(A4),D7MAXENTRYCOUNTBEQGSTBLRBRANCHIFNONE LEAGSTENTRY(A4),A5FIRSTENTRY*&GSTBL4TST.WGSTCNT(A5)TESTUSECOUNT"BEQGSTBL6SKIPENTRYIFNOTUSED2TST.WGSTSESSN(A5)ISSESSIONINBINARY?<<012585BNE.SGSTBL5NO:OR.W#$30,GSTSESSN+2(A5)SETLASTDIGITTOASCII012585>>.GSTBL5MVASC4,GSTSESSN(A5),GSHDSS(PC)SESSION*MVHEX4,GSTNAME(A5),GSHDNM(PC)NAME(HEX),MVASC4,GSTNAME(A5),GSHNMA(PC)NAME(ASCII)wF*MVHEX2,GSTATTR(A5),GSHDAT(PC)ATTRIBUTES(MVHEX2,GSTCNT(A5),GSHDCT(PC)USECOUNTMOVE.WGSTNP(A5),D4#PAGES%MOVE.LGSTPA(A5),D3STARTINGADDRESSLSR.L#8,D3CONVERTTOPAGE#ADD.WD3,D4ENDADDRESS+1SUB.W#1,D4ENDADDRESS-LEAGSHDPA(PC),A1WHERETOPUTSTARTADDRESS'LEAGSHDNB(PC),A2WHERETOPUT#BYTES#LEAGSHDSZ1(PC),A0WHERETOPUT#K BSRPSEGSIZ PRINTGSTB-GSTBL6LEAGSTEL(A5),A5ADDRESSOFNEXTENTRYSUB.W#1,D7DECREMENTCOUNTBEQ.SGSTBLRBRANCHIFDONECMP.LA5,D6TOOFAR?BGTGSTBL4NO,COUNTINUE GSTBLRRTS 9TTLANALIO.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALIO.AI*9********************************************************* SECTION0/PRINTERDC.W0NON-ZEROIFOUTPUTISTOPRINTER#PAGESIZDC.W0SIZEOFPRINTERPAGE XDEFCNTLIN(CNTLINDC.W0COUNTOFLINELEFTONPAGE0PAGEONEDC.W0FLAG1STLINE-NOSLEWONHEADERPAGE**FHSANDIOSPARAMETERBLOCKS* XDEFLISTFHS(LISTFHSDC.WFHASGNASSIGNOUTPUTDEVICE DC.WFOPEWDC.W3 DC.B''DC.W0 DC.B'' DC.L$FF DC.W0,0,0* XDEFMSGIOS+MSGIOSDC.WIOWRITSENDMESSAGETOOPERATORDC.WIOPFOR+IOPCNP DC.WLDFLUNDC.W0DC.L0,0,0,0,0* XDEFMSGIIOS.MSGIIOSDC.WIOREADREADCOMMANDFROMOPERATORDC.WIOPFOR+IOPCNP DC.WCDFLUN DC.W0,0,0DC.L0DC.L0 DC.L0,80*,LSTIOSDC.WIOWRITFORMATTEDWRITETOOUTPUT DC.WIOPFORDC.WLDFLUN,0DC.L0,0,0,0,0,0*XDEFINPTBUF,PRTLININPTBUFDS.B80DS.B2PRTLINDS.B80PAGE SECTION8**INPUT/OUTPUTSUBROUTINES*L******************************************************************************SETUPNEWOUTPUTDEVICE+*OUTPSRTHASPOINTERTOOUTPUTDESCRIPTION*XREFEDITFILE*)NEWOUTLEALISTFHS(PC),A0FHSPARAMBLOCK/MOVE.W#FHCLOS,(A0)CLOSEWHATEVERISNOWOPENTRAP#36MOVE.LOUTPSRT-MBD(A6),A0ADDRESSOFFILEORDEVNAMECMP.L#0,A0SYNTAXERRORIF0BEQ.SNEWOUT2*3NEWOUT1MOVEM.LA3/A6,-(A7)SAVERESERVEDREGISTERS)MOVE.LA6,A3SAVEA6FORUSEINDEFAULTSLEALISTFHS(PC),A6)BSRDEFAULTSSETDEFAULTSINPARAMBLOCK.BSREDITFILEFILLINPARAMBLOCKFROMREQUEST/MOVEM.L(A7)+,A3/A6RESTORERESERVEDREGISTERS&TST.LD0SYNTAXERRORINDESCRIPTION?BPL.SNEWOUT4BRANCHIFNO>BLO.SPRTLXI0BranchifnoENDSUB*%PRTLXI2BSR.SPRTLASKASKABOUTRETRY BRAPRTLXI6**DOFORMATTEDWRITETOOUTPUT**PRTLXX-PRINTONELINE&*PRTL80-PRINTONE75CHARACTERLINE*XDEFPRTL80,PRTLXX$PRTL80LEA74(A1),A2SETENDADDRESS PRTLXXBEGSUB,TST.WPRINTER-MBD(A6)ISOUTPUTTOPRINTER?BEQ.SPRTLXX2BRANCHIFNO-SUB.W#1,CNTLIN-MBD(A6)DECREMENTLINECOUNT,BPL.SPRTLXX2BRANCHIFNEWPAGENOTNEEDED BSRNEWPAGE8PRTLXX2MOVE.LA1,LSTIOS+IOSSAD-MBD(A6)STARTINGADDRESS/MOVE.LA2,LSTIOS+IOSEAD-MBD(A6)ENDINGADDRESSPRTLXX4LEALSTIOS(PC),A0TRAP#2OUTPUTONELINEBEQ.SPRTLXX5OK<<012585CMP.B#$C6,D0BREAKENTERED?BNE.SPRTLXX6NO,ERROR(BRAANSMSGYES,TELLUSERBREAKENTEREDPRTLXX5ENDSUB012585>>*%PRTLXX6BSR.SPRTLASKASKABOUTRETRY BRAPRTLXX4*%*PRINTERERROR-ASKUSERWHATTODO*5PRTLASKLEAOUTERRD0(PC),A1CONVERTERRORCODETOHEX BSRCONVHEX4,<\2>,XMOVE.W#IOPCNP,IOSOPT(A0)LEAMSGIIOS(PC),A0TRAP#2 BSRSBARG IFNC'\3','' IFC'\0','' BNECMDPABRTENDC IFNC'\0',''BNE.\0CMDPABRTENDCENDCENDM**(*****************************************FIELDFORMATTINGMACRO*(*****************************************'*FLDASM-LABEL,TEXT,DATA-SIZE,CONTINUE* FLDMACRODC.B\2\1DCB.B\3,$20IFNC'C','\4'ENDLINEENDCENDM** End of line MACRO* ENDLINEMACRODS0Insureevenbyteboundary-DC.B0ForcecarriagereturntooddboundaryDC.BCRCarriagereturnENDM*:* End of line MACRO with extra line feed after end of line* ENDLNLFMACROENDLINE5DC.B0,CRExtracarriagereturnwillforcelinefeedENDM**SUBROUTINESTARTANDEND* BEGSUBMACROMOVE.LA6,-(A7)LEABEGDATA(PC),A6ENDM* ENDSUBMACROMOVE.L(A7)+,A6RTSENDM*)******************************************UTILITYMACROS*)******************************************+*RDBYTE-COUNT,FILE-ADDR,MEMORY-ADDR,ERROR*RDMACROIFNC'D2','\1' MOVE.L\1,D2ENDCIFNC'D1','\2' MOVE.L\2,D1ENDC LEA\3,A1 IFC'\5',''XREF.SMOVEMEMENDC BSRMOVEMEM IFC'\0',''BNE\4ENDC IFNC'\0','' BNE.\0\4ENDCENDM**MOVETIMETOPRINTLINE* ATIMEMACRO MOVE.L\1,D0LEA\2(PC),A1XREF.SCONVTIME BSRCONVTIMEENDM*.*MOVE-HEXBYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS*wI MVHEXMACRO IFEQ\1-1 MOVE.B\2,D0ENDC IFEQ\1-2 MOVE.W\2,D0ENDC IFEQ\1-3 MOVE.L\2,D0ENDC IFEQ\1-4 MOVE.L\2,D0ENDC LEA\3,A1XREF.SCONVHEX\1BSRCONVHEX\1ENDM*0*MOVE-ASCIIBYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS* MVASCMACROMOVE.L#\1,D1 LEA\2,A0 LEA\3,A1XREF.SMOVEASC BSRMOVEASCENDM**WANT-CONDITIONALPAGESKIP* WANTMACRO IFC'\3',''XREF.SCNTLINENDCLEACNTLIN(PC),A0CMP.W\1,(A0) BGT.S\@AXREF.SNEWPAGE BSRNEWPAGESUB.W\2,(A0) \@AEQU*ENDM**PRINT-PRINTALINE* PRINTMACRO WANT#1,#2LEA\1(PC),A1 IFC'\2',''LEA\1E(PC),A2ENDC IFNC'\2',''LEA\2(PC),A2ENDCXREF.SPRTLXI BSRPRTLXIENDM CRSET$0D LFSET$0A PRINTFMACROLEA\1(PC),A1 IFC'\2',''LEA\1E(PC),A2ENDC IFNC'\2',''LEA\2(PC),A2ENDCXREF.SPRTLXX BSRPRTLXXENDM*MAXBUFEQU$1400  ;TTLANALMAIN.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALMAIN.AI*9**********************************************************:*THROUGHOUTALLROUTINES---A6ISOFFSETTODATASEGMENT*A3POINTSTOSYSPARSBUFFER* SECTION8)BEGINLEASTACK(PC),A7LOADSTACKPOINTER)LEABEGDATA(PC),A6STARTOFDATASEGMENT#'S'THEN.SBRA.SDUMPA14ENDI**gofindoutwhereSYSPARMis*&XREF.SSYSPARS,RUNNER,SYSPAR,EXCSTACK*OPTMEX'*J<0FOR.LD1=#$500TO#$2400BY#$100DO.S021585'RD#$100,D1,SYSPARS(PC),NOTADDR021585.LEASYSPARS(PC),A3getaddressofwhereitis7MOVE.LEXCSTACK-SYSPAR(A3),D4thisaddrpointstoself-MOVE.LRUNNER-SYSPAR(A3),A3getaddrof!TCB*3IF.LD4D1THEN.Sskip!TCBcheckifnotaddrBRA.SNOTADDRENDI*MOVE.LD1,D5savethis RD#$100,A3,SYSPARS(PC),PDSKER6MOVE.LD5,D1resetMOVE.LSYSPARS(PC),D3IF.LD3#'!TCB'THEN.S(BRA.SFNDSYSPterminateifSYSPARfoundENDI* NOTADDREQU**ENDF* FNDSYSPEQU* OPTNOMEX**savetheaddressofSYSPAR*MOVE.LD1,SYSPAROF-MBD(A6)***READINSYSTEMPARAMETERS*4DUMPA14PEACMDPRO(PC)PUTONSTACKINCASEOFERRORXREF.SREADSPBSRREADSPGOTOREAD**CONVERTTIMEFORHEADINGLINE* XREF.SDATE XDEFTIMEOD*-DUMPA18BSRTIMEODTIMEFROMSYSPARAMSTOD0 !LEAPTIME(PC),A1MESSAGEADDRESS BSRCONVTIME**CONVERTDATEFORHEADINGLINE*/MOVE.LDATE(A3),D0GETDATEFROMSYSTEMPARAMS BSRDATEOGCONVERTTOGREGORIAN&LEAPDATE(PC),A1ADDRESSOFPRINTLOC#BSRCONVDATECONVERTDATETOASCII/MOVE.LVERSION-MBD(A6),TITVER-MBD(A6)<<012585*MOVE.LVERSION+4-MBD(A6),TITVER+4-MBD(A6)8MESGTITLES(PC),TITLEE(PC),XSYSANALIDITSELF012585>> BRA.SCMDPRO**RESPONDTOBREAK*ANSBRKERQ.RDEVNTINPTBUF(PC)LEASTACK(PC),A7RESETSTACKERQ.SETASQ#7+ANSMSGMESGBRKRCV(PC),BRKRCVE(PC),X012585 BRA.SCMDPRO**DISKERRORROUTINE*XDEFPDSKERR,PDSKER6PDSKER6MOVE.L(A7)+,A6PDSKERRLEADSKERRD0(PC),A1 BSRCONVHEX4MESGDSKERRS(PC),DSKERRE(PC),XRTS* XDEFPDSKERSPDSKERSBSRPDSKERRPAGE*!*COMMANDLINEPROCESSINGROUTINE*-PUTSOUTPROMPT*-READSCOMMANDFROMKEYBOARD%*-CALLSAPPROPRIATECOMMANDPROCESS*-HASERRORRETURN* XDEFCMDPRO?CMDPROLEASTACK(PC),A7RESETSTACK-CANGETHEREFROMANYWHER)LEABEGDATA(PC),A6STARTOFDATASEGMENT$INPUT.SPROMPTCS(PC),PROMPTCE(PC),X*%*SEARCHFORCOMMANDINCOMMANDTABLE*!LEACMDTBL(PC),A4STARTOFTABLELEAINPTBUF(PC),A2INPUTLINE LEACMDTBLE(PC),A0ENDOFTABLEMOVE.LA0,D7SAVEFORCOMPARE'CMDPR4CMP.B#$D,(A2)IS1STCHARACR?BEQ.SCMDPWHATBRANCHIFYES%CMP.B#'',(A2)+SKIPLEADINGBLANKS BEQCMDPR4*-CMDPR6LEA-1(A2),A0STARTOFCOMMANDENTERED"MOVE.LA4,A1NEXTCMDTABLEENTRY#MOVE.B(A0)+,D0FIRSTBYTEENTERED"CMP.B(A1)+,D0MATCHTABLEENTRY?BNE.SCMDPR9BRANCHIFNO"MOVE.L#3,D1COMPARE3MORECHARS(CMDPR7MOVE.B(A0)+,D0NEXTCHARENTEREDCMP.B#'',D0ISITABLANK?#BEQ.SCMDPR20IFYES-FOUNDMATCHCMP.B#$D,D0ISITACR?#BEQ.SCMDPR16IFYES-FOUNDMATCH$CMP.B(A1)+,D0MATCHCHARINTABLE?BNE.SCMDPR9BRANCHIFNO!SUB.L#1,D1DECREMENTCHARCOUNT&BNECMDPR7GOBACKTOCHECKNEXTCHARBRA.SCMDPR12FOUNDCOMMAND*1CMDPR9LEA8(A4),A4INCREMENTTONEXTTABLEENTRYCMP.LD7,A4ENDOFTABLE?BNECMDPR6BRANCHBACKIFNOBRA.SCMDPWHATGOSAYWHAT?*-*FOUNDCOMMANDINTABLE-GOTOSPECROUTINE*+CMDPR12MOVE.B(A0)+,D0FINDENDOFCOMMANDCMP.B#$D,D0ISITACR?BEQ.SCMDPR16BRANCHIFYESCMP.B#'',D0ISITABLANK?'BNECMDPR12IFNO-GOCHECKNEXTCHARBRA.SCMDPR20,CMDPR16LEA0,A0INPUTLINEHASNOMOREINFO0CMDPR20LEACMDTBL(PC),A1STARTOFCOMMANDTABLE*ADD.L4(A4),A1ADDRESSOFSPECIALROUTINE JMP(A1)GOTOROUTINESELECTED**CANNOTCOMMUNICATEWITHUSER*=CMDPABRTSUB.W#1,FATLCNT-MBD(A6)HAVEWETRIEDENOUGHTIMES?BNECMDPROBRANCHIFNOCMDPABTFERQ.ABORT#$200**COMMANDNOTUNDERSTOOD*XDEFCMDPWHAT)CMDPWHATMESGWHATMSGS(PC),WHATMSGE(PC),X BRACMDPROPAGE**CHANGETONEWOUTPUTDEVICE*2CHGOUTMOVE.LA0,OUTPSRT-MBD(A6)USER'SINPUTLINE7BSRNEWOUTStartnewpage-mustbeBSR.LforDUMPANALBRACMDPROGOGETNEXTCOMMAND**SETDEFAULTOFFSETVALUE*XREF.SADROFST1*0OFFSETLEAADROFST1(PC),A1PLACETOSTOREOFFSETBSR.SOFFSETCCONVERTOFFSETBNECMDPWHATBRANCHIFERRORBRACMDPROGOGETNEXTCOMMAND* XDEFOFFSETC$OFFSETCBSRHEXBINCONVERTTO BINARYBNE.SOFFSETCRBRANCHIFERROR MOVE.L(A1),D0GETBINARYVALUE'LSL.L#8,D0SHIFTTOSETBIT15IFNEGASR.L#8,D0EXTENDSIGN$MOVE.LD0,A5EXTENDSIGNTO32BITSMOVE.LA5,(A1)PUTITBACKCLR.LD0GOODRETURNFLAG OFFSETCRRTS**USERSAYSQUIT* QUITERQ.TERM:TTLANALMAP.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALMAP.AI*9********************************************************* SECTION0**MEMORYMAPTABLE* PMHDRENDLNLFDC.B'MEMORYMAP'ENDLINEDC.B'----------'ENDLINE7DC.B'PARTITIONTYPESTRTADDRENDADDRPARTITIONSIZE'ENDLINEPMHDREEQU*-1DS.W0** MEMORY MAP TABLE DETAIL LINE*&PMAPLFLDPMAPPT,<''>,2,CPARTITION#"FLDPMAPTYP,<''>,2,CMEMORYTYPE%FLDPMAPSTRT,<''>,4,CSTARTADDRESS$FLDPMAPEND,<'00'>,4,CENDADDRESS!FLDPMAPBYTS,<'FF'>,4,C#BYTES!FLDPMAPK,<'00BYTES('>,4,C#KFLDPMAPK2,<'.'>,2,C DC.B'K)'PMAPLEEQU*-1DS.W0**FREEMEMORYLIST* PFHDRENDLNLF&DC.B'FREEMEMORYLIST-PARTITION'PFHDRPDC.B'XX'ENDLINE(DC.B'-------------------------------'ENDLINE*DC.B'STRTFREEENDFREESTRTUSEDENDUSED'ENDLINEPFHDREEQU*-1DS.W0** FREE MEMORY LIST DETAIL LINE*+PFREELFLDFREESTRT,<''>,4,CSTARTOFFREE#FLDFREEND,<'00'>,4,CENDOFFREE+FLDFREEK,<'FF('>,4,CSIZEOFFREE012585FLDFREEK2,<'.'>,2,C'FLDUSEDSTRT,<'K)'>,4,CSTARTOFUSED$FLDUSEDEND,<'00'>,4,CENDOFUSED+FLDUSEDK,<'FF('>,4,CSIZEOFUSED012585FLDUSEDK2,<'.'>,2,C DC.B'K)'PFREELEEQU*-1DS.W0PRFRNOENDLNLF&DC.B'CANNOTPRINTFREEMEMORYLIST'ENDLINEPRFRNOEEQU*-1DS.W0PAGE SECTION8*(****PRINTTHEMEMORYMAPTABLE**** XDEFPRMAPXREF.SRDBUF,MAPBEG,PDSKERR*0PRMAPWANT#12,#2CHECKFORENOUGHLINESONPAGEPRINTPMHDRPRINTTHEHEADING!LEARDBUF(PC),A4STARTOFBUFFER>LSR.L#8,D4ENDPAGE#LEAPMAPSTRT(PC),A1BUFFFORSTART"LEAPMAPBYTS(PC),A2BUFFFORSIZELEAPMAPK(PC),A0BUFFFOR#K BSRPSEGSIZ PRINTFPMAPL,LEAMAPENTSZ(A4),A4INCREMENTTONEXTENTRY BRAPRMAP4*8PRMAP6MOVE.L#-1,D7FREELISTFORALLPARTITIONS020185$BSR.SPRFREEGOPRINTFREEMEMLISTRTSPAGE*(****PRINTTHEFREEMEMORYLIST**** XDEFPRFREE*=PRFREEMOVE.LD7,-(A7)SAVEPARTITIONNUMBERORIND.<<020185)BPL.SPRFR1ONLYONEPARTITIONASKEDFORCLR.LD6PARTITIONLASTDONECLR.LD7PARTITIONWORKINGONPRFR1MOVE.LD6,-(A7)9PRFR2WANT#12,#2CHECKFORENOUGHLINESONPAGE020185>>MVHEX1,D7,PFHDRP(PC)PRINTPFHDRPRINTTHEHEADING!LEARDBUF(PC),A4STARTOFBUFFER+RD#$E4,MAPBEG(A3),(A4),PDSKERRGETHEADER *1PRFREE1CMP.BMAPPART(A4),D7LOOKFORPARTITION#BEQ.SPRFREE3BRANCHIFFOUND,LEAMAPENTSZ(A4),A4INCREMENTTONEXTENTRY,MOVE.WMAPMTYP(A4),D0LOOKFORENDOFTABLE ADD.W#1,D0BNEPRFREE1BRANCHIFNOTEND/ADD.L#8,A7UPDATESTACKBEFORELEAVING020185RTS*)PRFREE3MOVE.L#10,D7LIMIT#TRIESTO10*PRFREE4CLR.LD6PREVIOUSENTRYMOVE.LMAPFMLP(A4),D1LEARDBUF+$100(PC),A5RD#20,D1,(A5),PDSKERR*&PRFREE6MOVE.LFMLFP(A5),D1NEXTENTRY BEQ.SPRFREE8BRANCHIFNOMORE%LEA16(A5),A5NEXTPLACETOSTOREITRD.S#16,D1,(A5),PRFREEX%MOVE.LFMLBP(A5),D0GETBACKPOINTER!CMP.LD0,D6ISITTHERIGHTONE?BNE.SPRFREEXBRANCHIFNO MOVE.LD1,D6 BRAPRFREE6*PRFREEXSUB.L#1,D7BNEPRFREE4GOBACKTORETRYPRINTPRFRNOPRINTMESSAGE PRFREEXRRTS*PRFREE8LEARDBUF+$100(PC),A5/PRFREE9MOVE.LFMLFP(A5),D3GETFORWARDPOINTER3BEQ.SPRFREE10DONETHISPART,CHKFORNEXT020185&LEA16(A5),A5INCREMENTTONEXTENTRY%LSR.L#8,D3PAGE#-STARTFREEAREA MOVE.LD3,D5.ADD.LFMLFREE(A5),D5PAGE#-STARTUSEDAREA MOVE.LD5,D4&SUB.L#1,D4PAGE#-ENDOFFREEAREA MOVE.LD5,D6ADD.LFMLUSED(A5),D6&SUB.L#1,D6PAGE#-ENDOFUSEDAREA.LEAFREESTRT(PC),A1BUFFERFORSTARTINASCII&LEAFREEK(PC),A0BUFFERFORSIZEINK LEA0,A2.BSRPSEGSIZPUTLIMITSANDSIZEINPRINTLINE MOVE.LD5,D3 MOVE.LD6,D4.LEAUSEDSTRT(PC),A1BUFFERFORSTARTINASCII&LEAUSEDK(PC),A0BUFFERFORSIZEINK.BSRPSEGSIZPUTLIMITSANDSIZEINPRINTLINEPRINTFPFREELPRINTIT BRAPRFREE92PRFREE10MOVEM.L(A7)+,D6/D7RESTOREREGS<<020185 TST.LD7DOINGALLPARTITIONS? BPLPRFREEXRNO,ONLYONE--EXITADD.L#1,D6BUMPCOUNTER/MOVEM.LD6/D7,-(A7)SAVECOUNTERANDINDICATOR&MOVE.LD6,D7PREPAREPARTITIONNUMBER**SEEIFANYMORETOPROCESS*!LEARDBUF(PC),A4STARTOFBUFFER+RD#$E4,MAPBEG(A3),(A4),PDSKERRGETHEADER*2PRFREE11CMP.BMAPPART(A4),D7LOOKFORPARTITION#BEQPRFR2BRANCHIFFOUND,LEAMAPENTSZ(A4),A4INCREMENTTONEXTENTRY,MOVE.WMAPMTYP(A4),D0LOOKFORENDOFTABLE ADD.W#1,D0BNEPRFREE11BRANCHIFNOTEND(ADD.L#8,A7UPDATESTACKBEFORELEAVINGBRAPRFREEXREXIT020185>>:TTLANALNET.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALNET.AI*9********************************************************* SECTION0*!*NETWORKNAMETABLE*NNTBHDENDLNLFDC.B'NETWORKNAMETABLE'ENDLINEDC.B'------------------'ENDLINEDC.B'STATIONID--THISNODE' STATIDDS.B2ENDLNLF)DC.B'BADR----NAME----NAUSIDSTAT' DC.B'NAT'ENDLINENNTBHDEEQU*-1DS.W0**NNTDETAILLINE*1NNTBFLDNNTHDPTR,<''>,8,CPOINTERTONEXTENTRY(FLDNNTNAMH,<''>,8,CNAME(HEXPART1)$FLDNNTNAMH1,,4,CNAME(HEXPART2)$FLDNNTHDNAM,<''>,6,CNAME(ASCII)+FLDNNTHDNAU,<''>,2,CNAUNETWORKADDRESS-FLDNNTHDSID,<''>,2,CSTATIONID-THISNAU"FLDNNTHDSTA,<''>,4,CNAUSTATUS6FLDNNTHDNAT,<''>,8POINTERTONETWORKADDRESSTABLE NNTBEEQU*-1DS.W0PAGE SECTION8 XDEFNNTBLXREF.SRDBUF,NNTBEG,PDSKERR0NNTBLWANT#12,#2Chec kforenoughlinesonpage PRINTNNTBHDTST.LNNTBEG(A3)+BEQNNTRTSBranchifnonetworknametable!LEARDBUF(PC),A4STARTOFBUFFER/RD#18,NNTBEG(A3),(A4),PDSKERRREADNNTHEADER.MVHEX1,NNTHSID(A4),STATID(PC)GETSTATIONID)TST.LNNTAHDR(A4)TESTFORANEMPTYLISTBEQNNTBL2BRIFNOENTRIES*MOVE.LNNTAHDR(A4),-(A7)SAVEADROFNEXT5RD#NNTESIZ,NNTAHDR(A4),(A4),PDSKERRGETFIRSTENTRYNNTBL10MVHEX4,(A7),NNTHDPTR(PC)ADDRESSOFTHISENTRY1MVHEX4,NNTNAM(A4),NNTNAMH(PC)NAME(HEXPART1)4MVHEX2,NNTNAM+4(A4),NNTNAMH1(PC)NAME(HEXPART2)-MVASC6,NNTNAM(A4),NNTHDNAM(PC)NAME(ASCII)4MVHEX1,NNTNAU(A4),NNTHDNAU(PC)NAUNETWORKADDRESS5MVHEX1,NNTSID(A4),NNTHDSID(PC)STATIONID--THISNAU,MVHEX2,NNTSTAT(A4),NNTHDSTA(PC)NAUSTATUS2MVHEX4,NNTNAT(A4),NNTHDNAT(PC)POINTERNATENTRY PRINTNNTB#MOVE.L(A7)+,A0CLEANUPTHESTACK1TST.LNNTNEXT(A4)DONEWHENLINKTONEXTISZEROBEQ.SNNTBL2BRANCHIFDONE&MOVE.LNNTNEXT(A4),-(A7)SAVEADDRESS@?I 4NP%G-a5W=CEFM/4RD#NNTESIZ,NNTNEXT(A4),(A4),PDSKERRGETNEXTENTRY BRANNTBL1NNTBL2 NNTRTSRTSPAGE SECTION0*'*NETWORKADDRESSTABLE*NATBHDENDLNLFDC.B'NETWORKADDRESSTABLE'ENDLINEDC.B'---------------------'ENDLNLF-DC.B'BADRTCBNAUSIDSTATDISCLCCLCTLK'DC.B'LCNLKCNNLKANYLK'ENDLINENATBHDEEQU*-1DS.W0**NATDETAILLINE*1NATBFLDNATHDNXT,<''>,8,CPOINTERTONEXTENTRY#FLDNATHDTCB,<''>,8,CTCBADDRESS+FLDNATHDNAU,<''>,2,CNAUNETWORKADDRESS,FLDNATHDSID,<''>,2,CSTATIONID--THISNAU"FLDNATHDSTD,<''>,4,CNAUSTATUS.FLDNATHDCOD,<''>,2,CDISCONNECTREASONCODE/FLDNATHDLCC,<''>,2,CNEXTUNASSIGNEDLOGICAL*CONNECTCODE2FLDNATHDLCT,<''>,8,CPOINTERTOFIRSTLCTENTRY7FLDNATHDLCN,<''>,8,CPOINTERTOFIRSTLISTEN/CONNECT*RECVPARAMBLOCK5FLDNATHDCNN,<''>,8,CPOINTERTOFIRSTCONNECT-INIT*PARAMETERBLOCK6FLDNATHDANY,<''>,8POINTERTOFIRST'RECV-FROM-ANY'*PARAMETERBLOCK NATBEEQU*-1DS.W0PAGE SECTION8 XDEFNATBLXREF.SRDBUF,NATBEG,PDSKERR0NATBLWANT#12,#2CheckforenoughlinesonpagePRINTNATBHDPrintheaderTST.LNATBEG(A3).BEQNATRTSBranchifnonetworkaddresstable!LEARDBUF(PC),A4STARTOFBUFFER/RD#16,NATBEG(A3),(A4),PDSKERRREADNATHEADER2TST.LNATAHDR(A4)TESTFORNOTHINGONACTIVELIST#BEQNATBL2BRANCHIFNOTHINGTODO&MOVE.LNATAHDR(A4),-(A7)SAVEADDRESS6RD#NATESIZ,NATAHDR(A4),(A4),PDSKERRREADFIRSTENTRYNATBL16MVHEX4,(A7),NATHDNXT(PC)PRINTADDRESSOFTHISENTRY,MVHEX4,NATTCB(A4),NATHDTCB(PC)TCBADDRESS4MVHEX1,NATNAU(A4),NATHDNAU(PC)NAUNETWORKADDRESS+MVHEX1,NATSID(A4),NATHDSID(PC)STATIONID,MVHEX2,NATSTAT(A4),NATHDSTD(PC)NAUSTATUS8MVHEX1,NATDCOD(A4),NATHDCOD(PC)DISCONNECTREASONCODE5MVHEX1,NATLCC(A4),NATHDLCC(PC)LOGICALCONNECTCODE0MVHEX4,NATLCTLK(A4),NATHDLCT(PC)1stLCTENTRY;MVHEX4,NATLCNLK(A4),NATHDLCN(PC)1stLISTENCONNECTBLOCK4MVHEX4,NATCNNLK(A4),NATHDCNN(PC)1stCONNECTBLOCK9MVHEX4,NATANYLK(A4),NATHDANY(PC)1stRCVFORMANYBLOCK PRINTNATB2MOVE.L(A7)+,A0RESTORESTACKDISCARDOLDADDRESS,TST.LNATNEXT(A4)ANYMOREENTRIESTOPRINTBEQ.SNATBL2BRANCHIFNOT&MOVE.LNATNEXT(A4),-(A7)SAVEADDRESS5RD#NATESIZ,NATNEXT(A4),(A4),PDSKERRREADNEXTENTRYBRANATBL1GOPRINTTHENATNATBL2 NATRTSRTSPAGE SECTION0*'*LOGICALCONNECTTABLE*LCTBHDENDLNLFDC.B'LOGICALCONNECTTABLE'ENDLINEDC.B'---------------------'ENDLNLF0DC.B'TCBLCCCCDNAUSIDRNAURSID-NAME-LI'DC.B'NKBFLNKCSTACOFT'ENDLINELCTBHDEEQU*-1DS.W0**LCTDETAILLINE*"LCTBFLDLCTHDTCB,,8,CTCBADDRESS,FLDLCTHDLCC, <''>,2,CLOGICALCONNECTCODEFLDLCTHDCCD,<''>,2,CFLDLCTHDNAU,<''>,2,CFLDLCTHDSID,<''>,2,CFLDLCTHDRNU,<''>,2,CFLDLCTHDRID,<''>,2,CFLDLCTHDNAM,<''>,6,CFLDLCTHDLNK,<''>,8,CFLDLCTHDFLK,<''>,8,CFLDLCTHDSTA,<''>,4,CFLDLCTHDOPT,<''>,4FLDLCTHTSEQ,<'TxSEQ'>,4,CFLDLCTHTSTA,<'STA'>,4,CFLDLCTHTWXM,<'TXM'>,8,CFLDLCTHWTRP,<'WTRP'>,8,CFLDLCTHDCAD,<'CAD'>,8,CFLDLCTHTSZ,<'SIZE'>,8FLDLCTHRSEQ,<'RxSEQ'>,4,CFLDLCTHRSTA,<'STA'>,4,CFLDLCTHWTRV,<'WTR'>,8,CFLDLCTHWTBF,<'WTBF'>,8,CFLDLCTHRCAD,<'CAD'>,8,CFLDLCTHRSZ,<'SIZE'>,8DC.BLF LCTBEEQU*-1DS.W0PAGE SECTION8 XDEFLCTBL#XREF.SRDBUF,NNTBEG,PDSKERR,NATBEGLCTBLWANT#12,#2PRINTLCTBHDPrintLCTheaderTST.LNATBEG(A3).BEQLCTRTSBranchifnologicalconnecttable!LEARDBUF(PC),A4STARTOFBUFFER/RD#16,NATBEG(A3),(A4),PDSKERRREADNATHEADER'TST.LNATAHDR(A4)ANYNATSINTHELISTBEQLCTBL4EXITIFNONE.RD#38,NATAHDR(A4),(A4),PDSKERRGETFIRSTNATLCTBL1/MOVE.LNATNEXT(A4),-(A7)SAVELINKTONEXTNAT1TST.LNATLCTLK(A4)ISTHEREANLCTWITHTHISNAT,BEQLCTBL3BRANCHIFNOT(GOREADNEXTNAT)=RD#LCTESIZ,NATLCTLK(A4),(A4),PDSKERRGETFIRSTLCTINCHAINLCTBL2;MVHEX4,LCTLOTCB(A4),LCTHDTCB(PC)TCBADDRESSOFLOCALNAU7MVHEX1,LCTLOLCC(A4),LCTHDLCC(PC)LOGICALCONNECTCODE=MVHEX1,LCTLOCCD(A4),LCTHDCCD(PC)CANCELCONNECTREASONCODE9MVHEX1,LCTLONAU(A4),LCTHDNAU(PC)NET.ADR.OFLOCALNAU;MVHEX1,LCTLOSID(A4),LCTHDSID(PC)STATIONID--THISSTATION:MVHEX1,LCTRMNAU(A4),LCTHDRNU(PC)NET.ADR.OFREMOTENAU>MVHEX1,LCTRMSID(A4),LCTHDRID(PC)STA.IDWHEREREMOTENAUIS=MVASC6,LCTRMNAM(A4),LCTHDNAM(PC)NETWORKNAMEOFREMOTENAU1MVHEX4,LCTLULNK(A4),LCTHDLNK(PC)NEXTLCTENTRY>MVHEX4,LCTBFLNK(A4),LCTHDFLK(PC)NEXTLCTWAIT-FOR-BUFFERSQ0MVHEX2,LCTCSTA(A4),LCTHDSTA(PC)CONNECTSTATUS1MVHEX2,LCTCOPT(A4),LCTHDOPT(PC)CONNECTOPTIONS**XMITPARTOFLCT*:MVHEX2,LCTTSEQ(A4),LCTHTSEQ(PC)TRANSMITSEQUENCENUMBER9MVHEX2,LCTTSTA(A4),LCTHTSTA(PC)CURRENTTRANSMITSTATUS;MVHEX4,LCTTWTXM(A4),LCTHTWXM(PC)1stBLOCKINWAITXMITQ;MVHEX4,LCTTWTRP(A4),LCTHWTRP(PC)1stBLOCKINWAITRESPQ5MVHEX4,LCTTCAD(A4),LCTHDCAD(PC)USERBUFFERADDRESS0MVHEX4,LCTTTSZ(A4),LCTHTSZ(PC)USERBYTECOUNT**RCVPARTOFLCT*9MVHEX2,LCTRSEQ(A4),LCTHRSEQ(PC)RECEIVESEQUENCENUMBER0MVHEX2,LCTRSTA(A4),LCTHRSTA(PC)RECEIVESTATUS9MVHEX4,LCTRWTRV(A4),LCTHWTRV(PC)1stBLOCKINAVA-RCVQ;MVHEX4,LCTRWTBF(A4),LCTHWTBF(PC)1stBLOCKINBUFFHEREQ5MVHEX4,LCTRCAD(A4),LCTHRCAD(PC)USERBUFFERADDRESS0MVHEX4,LCTRTSZ(A4),LCTHRSZ(PC)USERBYTECOUNTPRINTLCTBPRINTTHETABLE4TST.LLCTLULNK(A4)ARETHEREMORELCT'SINTHELISTBEQ.SLCTBL3BRANCHIFNOT4RD#LCTESIZ,LCTLULNK(A4),(A4),PDSKERRREADNEXTLCT BRALCTBL2LCTBL3-TST.L(A7)CHECKIFLINKTONEXTNATISZERO%MOVE.L(A7)+,A5GETLINKTONEXTNAT*BEQ.SLCTBL4EXITIFLINKTONEXTISZERO%RD#38,A5,(A4),PDSKERRREADNEXTNATBRALCTBL1GOTOREADNEXTLCTLCTBL4 LCTRTSRTSPAGE SECTION0*'*PRIMARYCONTROLBLOCK**FIRSTHEADER*PCBAHDENDLNLFDC.B'PRIMARYCONTROLBLOCK'ENDLINEDC.B'---------------------'ENDLNLFDC.B'JUMPVECTORS'ENDLINEDC.B'TBMTSTATRXCHSPRX'ENDLINEPCBAHDEEQU*-1DS.W0**SECONDHEADER*PCBBHDENDLNLFDC.B'A0A1A2A3A4'DC.B'A5A6'ENDLINEPCBBHDEEQU*-1DS.W0**THIRDHEADER*PCBCHDENDLNLF DC.B'XIDFRDFFSECRCVQRXLN'DC.B'PABSYTXFBAUD'ENDLINEPCBCHDEEQU*-1DS.W0PAGE**PCBDETAILLINE*+PCB1FLDSDHDVCT1,<'CHB'>,8,CCHNLBTBMT5FLDSDHDVCT2,<''>,8,CCHNLBEXTERNAL/STATUSCHANGE-FLDSDHDVCT3,<''>,8,CCHNLBRCVCHARAVAIL2FLDSDHDVCT4,<''>,8CHNLBSPECIALRCVCONDITION'FLDSDHDVCT5,<'CHA'>,8,CCHNLATBMT5FLDSDHDVCT6,<''>,8, CCHNLAEXTERNAL/STATUSCHANGE-FLDSDHDVCT7,<''>,8,CCHNLARCVCHARAVAIL2FLDSDHDVCT8,<''>,8CHNLASPECIALRCVCONDITION PCB1EEQU*-1DS.W01PCB2FLDSDPHDRA0,<''>,8,CREGISTERRESTOREAREAFLDSDPHDRA1,<''>,8,CFLDSDPHDRA2,<''>,8,CFLDSDPHDRA3,<''>,8,CFLDSDPHDRA4,<''>,8,CFLDSDPHDRA5,<''>,8,CFLDSDPHDRA6,<''>,8 PCB2EEQU*-1DS.W02PCB3FLDSDHDXID,<''>,8,CADROFXIDRESPONSEBCB.FLDSDHDFRB,<''>,8,CFRAMEREJECTDATAFIELD(FLDSDHDSEC,<''>,8,CADDROFFIRSTSCB$FLDSDHDRCV,<''>,8,CHEADOFRCVQ+FLDSDHDRLG,<''>,4,CLENGTHOFRCVBUFFER,FLDSDHDPOP,<''>,2,CPOLLINGALGORITHMOPT%FLDSDHDBSY,<''>,2,CSDLCBUSYFLAG!FLDSDHDTXF,<''>,2,CTXMITFLAG&FLDSDHDBAUD,<''>,4LINK'SBAUDRATE PCB3EEQU*-1DS.W0PAGE SECTION8 XDEFPCBTBLXREF.SRDBUF,SDLCPCB,PDSKERRXREFMEMOFSET)PCBTBLWANT#12,#2CheckforenoughlinesPRINTPCBAHDPrintheaderTST.LSDLCPCB(A3)/BLEPCBTBLXBranchifnoprimarycontrolblock&LEARDBUF(PC),A4STARTOFREADBUFFER?MOVE.LSDLCPCB(A3),-(A7)ADJUSTADDRESSIFPCBISINVM02MEM.MOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)**RD#SDPLNG,(A7),(A4),PDSKERRREADTHEPCB"MOVE.L(A7)+,A0RESTORETHESTACK!MVHEX4,SDPVCT1(A4),SDHDVCT1(PC)!MVHEX4,SDPVCT2(A4),SDHDVCT2(PC)!MVHEX4,SDPVCT3(A4),SDHDVCT3(PC)!MVHEX4,SDPVCT4(A4),SDHDVCT4(PC)!MVHEX4,SDPVCT5(A4),SDHDVCT5(PC)!MVHEX4,SDPVCT6(A4),SDHDVCT6(PC)!MVHEX4,SDPVCT7(A4),SDHDVCT7(PC)!MVHEX4,SDPVCT8(A4),SDHDVCT8(PC) PRINTPCB1 PRINTPCBBHD"MVHEX4,SDPRRTA0(A4),SDPHDRA0(PC)"MVHEX4,SDPRRTA1(A4),SDPHDRA1(PC)"MVHEX4,SDPRRTA2(A4),SDPHDRA2(PC)"MVHEX4,SDPRRTA3(A4),SDPHDRA3(PC)"MVHEX4,SDPRRTA4(A4),SDPHDRA4(PC)"MVHEX4,SDPRRTA5(A4),SDPHDRA5(PC)"MVHEX4,SDPRRTA6(A4),SDPHDRA6(PC) PRINTPCB2 PRINTPCBCHDMVHEX4,SDPXID(A4),SDHDXID(PC)MVHEX4,SDPFRB(A4),SDHDFRB(PC) MVHEX4,SDPFSEC(A4),SDHDSEC(PC)MVHEX4,SDPRCV(A4),SDHDRCV(PC)MVHEX2,SDPRLG(A4),SDHDRLG(PC)MVHEX1,SDPPOP(A4),SDHDPOP(PC)MVHEX1,SDPBSY(A4),SDHDBSY(PC)MVHEX1,SDPTXF(A4),SDHDTXF(PC)!MVHEX2,SDPBAUD(A4),SDHDBAUD(PC) PRINTPCB3 PCBTBLXRTSPAGE SECTION0*+*SECONDARYCONTROLBLOCK* SCBHDENDLINE(DC.B'SECONDARYSTATIONCONTROLBLOCK'ENDLINE(DC.B'-------------------------------'ENDLNLF=DC.B'STASRTRRTOPTMXFSTOCSTRTSTTXSTPFSTPNSCTDPWR'DC.B'CSESTPDVRVSUDCS'ENDLINESCBHDEEQU*-1DS.W0**SCBDETAILLINE*SCBDTFLDSDHDSSEC,<''>,2,CFLDSDHDSR,<''>,2,CFLDSDHDRR,<''>,2,CFLDSDHDOPT,<''>,2,CFLDSDHDMXF,<''>,2,CFLDSDHDTOC,<''>,4,CFLDSDHDTRT,<''>,4,CFLDSDHDTTX,<''>,4,CFLDSDHDTPF,<''>,4,CFLDSDHDTPN,<''>,4,CFLDSDHDCTD,<''>,4,CFLDSDHDPWR,<''>,2,CFLDSDHDCSE,<''>,2,CFLDSDHDTPD,<''>,4,CFLDSDHDVRC,<''>,2,CFLDSDHDVSC,<''>,2,CFLDSDHDUKT,<''>,2,CFLDSDHDCST,<''>,2"FLDSDHDTHD,<'HDXMITQ='>,8,C#FLDSDHDTND,<'ENDXMITQ='>,8,C FLDSDHDTNX,<'NEXTXMIT='>,8DC.BLFSCBDTEEQU*-1DS.W0PAGE SECTION8 XDEFSCBTBLXREF.SRDBUF,PDSKERRXREFMEMOFSET)SCBTBLWANT#12,#2CheckforenoughlinesPRINTSCBHDPrintheaderTST.LSDLCPCB(A3)/BEQSCBTBLXBranchifnoprimarycontrolblock&LEARDBUF(PC),A4STARTOFREADBUFFER)MOVE.LSDLCPCB(A3),-(A7)ADJUSTFORVM02MOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)*2RD#SDPLNG,(A7),(A4),PDSKERRREADPCBTOFINDSCB"MOVE.L(A7)+,A0RESTORETHESTACK5MOVE.LSDPFSEC(A4),-(A7)SAVEADDRESSOFCURRENTSCB*MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSADD.LD0,(A7)*%TST.LSDPFSEC(A4)ARETHEREANYSCBSBEQSCBTBL2BRANCHIFNOT&RD#SDSLNG,(A7),(A4),PDSKERRREADSCBSCBTBL1 MVHEX1,SDSSEC(A4),SDHDSSEC(PC)MVHEX1,SDSSRT(A4),SDHDSR(PC)MVHEX1,SDSRRT(A4),SDHDRR(PC)MVHEX1,SDSOPT(A4),SDHDOPT(PC)MVHEX1,SDSMXF(A4),SDHDMXF(PC)MVHEX2,SDSTOC(A4),SDHDTOC(PC)MVHEX2,SDSTRT(A4),SDHDTRT(PC)MVHEX2,SDSTTX(A4),SDHDTTX( PC)MVHEX2,SDSTPF(A4),SDHDTPF(PC)MVHEX2,SDSTPN(A4),SDHDTPN(PC)MVHEX2,SDSCTD(A4),SDHDCTD(PC)MVHEX1,SDSPWR(A4),SDHDPWR(PC)MVHEX1,SDSCSE(A4),SDHDCSE(PC)MVHEX2,SDSTPD(A4),SDHDTPD(PC)MVHEX1,SDSVRC(A4),SDHDVRC(PC)MVHEX1,SDSVSC(A4),SDHDVSC(PC)MVHEX1,SDSUKT(A4),SDHDUKT(PC)MVHEX1,SDSCST(A4),SDHDCST(PC)MVHEX4,SDSTHD(A4),SDHDTHD(PC)MVHEX4,SDSTND(A4),SDHDTND(PC)MVHEX4,SDSTNX(A4),SDHDTNX(PC) PRINTSCBDT+MOVE.L(A7)+,A5GETADDRESSOFCURRENTSCB=ADD.L#SDSLNG,A5NEXTSCBFOLLOWSPREVIOUSADDLENGTHOFSCB)MOVE.LA5,-(A7)SAVECURRENTSCBADDRESS(RD#SDSLNG,A5,(A4),PDSKERRREADTHESCBTST.BSDSSEC(A4)CHECKIFDONEBNESCBTBL1BRANCHIFNOTDONESCBTBL2#MOVE.L(A7)+,A5CLEANUPTHESTACKSCBTBLXRTSEXITPAGE SECTION0*%*USERDIRECTIVETABLE* UDRHDENDLNLFDC.B'USERDIRECTIVETABLE'ENDLINEDC.B'--------------------'ENDLNLF"DC.B'SESSOPTIONSADDR'021585ENDLINEUDRHDEEQU*-1DS.W0**UDRDETAILLINE*UDRDLFLDUDHDSESS,<''>,8,CFLDUDHDROPT,<''>,4,C021585FLDUDHDADDR,<''>,8UDRDLEEQU*-1DS.W0PAGE SECTION8 XDEFUDRTBLXREF.SRDBUF,UDRBEG,PDSKERR)UDRTBLWANT#12,#2CheckforenoughlinesPRINTUDRHDPrintheaderTST.LUDRBEG(A3)BEQUDRTBLXBranchifnoUDR.&LEARDBUF(PC),A4STARTOFREADBUFFER*RD#6,UDRBEG(A3),(A4),PDSKERRREADHEADER0MOVE.WUDRCNT(A4),D6GETTOTALENTRIESINTABLE)MOVE.LUDRBEG(A3),-(A7)FINDFIRSTENTRYADD.L#6,(A7)*UDRTBL1,RD#UDRESIZ,(A7),(A4),PDSKERRREADANENTRYTST.LUDRADDR(A4)*'BEQ.SUDRTBL2BRANCHIFENTRYNOTUSED.TST.WUDRSESS(A4)SESSIONINBINARY?<<012585BNE.SUDRTBL15NO,ASCII9OR.W#$30,UDRSESS+2(A4)SETLASTDIGITTOASCII012585>>)UDRTBL15MVASC4,UDRSESS(A4),UDHDSESS(PC)'MVHEX2,UDROPT(A4),UDHDROPT(PC)021585!MVHEX4,UDRADDR(A4),UDHDADDR(PC) PRINTUDRDLUDRTBL22SUB.W#1,D6HASTHEENDOFTHETABLEBEENREACHEDBEQ.SUDRTBL3BRANCHIFITHAS(ADD.L#UDRESIZ,(A7)POINTTONEXTENTRY BRAUDRTBL1UDRTBL3#MOVE.L(A7)+,A5CLEANUPTHESTACKUDRTBLXRTSEXITPAGE SECTION0**FREEQUEUE*FREEHDENDLNLFDC.B'FREEQUEUE'ENDLINEDC.B'----------'ENDLNLFFREEHDEEQU*-1DS.W0**FREEQUEUELINEDETAIL*%FREEQDLFLDFRHEAD,<'FREEQHD='>,8,CFLDBFSIZE,<'DBUFSZ='>,4,CFLDFRQLWM,<'FQLWM='>,4,CFLDFRQBCNT,<'FQBCNT='>,4FREEQDLEEQU*-1DS.W0PAGE**USERQUEUE*USEQHDENDLNLFDC.B'USERQUEUE'ENDLINEDC.B'----------'ENDLNLFUSEQHDEEQU*-1DS.W0**USERQUEUEDETAILLINE*-USERQDLFLDUSEQHDR,<'USERQUEUEHEAD='>,8USERQDLEEQU*-1DS.W0PAGE**RECEIVEQUEUE*RCVQHDENDLNLFDC.B'RECEIVEQUEUE'ENDLINEDC.B'-------------'ENDLNLFRCVQHDEEQU*-1DS.W0**RECEIVEQUEUEDETAILLINE*0RCVQDLFLDSDHDRRCV,<'RECEIVEQUEUEHEAD='>,8RCVQDLEEQU*-1DS.W0PAGE**TRANSMITQUEUE* TXQHDENDLNLFDC.B'TRANSMITQUEUE'ENDLINEDC.B'--------------'ENDLNLFTXQHDEEQU*-1DS.W0**TRANSMITQUEUEDETAILLINE*3XMITQDLFLDTMITQHD,<'TRANSMITQUEUEHEAD='>,8,C.FLDSTANUM,<'SECONDARYSTATIONNUMBER='>,2XMITQDLEEQU*-1DS.W0PAGE**BUFFERHEADER*/BUFHDRDC.B'BADRSTSBCTRTERCDSCRPDATA'ENDLINEBUFHDREEQU*-1DS.W0**BUFFERDETAILLINE*BUFDLFLDSDHDLNK,,8,CFLDSDHDSTS,<''>,4,CFLDSDHDBCT,<''>,4,CFLDSDHDRTC,<''>,2,CFLDSDHDERR,<''>,2,CFLDSDHDCMD,<''>,2,CFLDSDHDSCD,<''>,2,CFLDSDHDRSP,<''>,2,CFLDSDHDRSV,<''>,2,CFLDSDHDDAT1,<''>,8,CFLDSDHDDAT2,,8,CFLDSDHDDAT3,,8,CFLDSDHDDAT4,,8,CFLDSDHDDAT5,,8BUFDLEEQU*-1DS.W0**HELPPANELDETAILLINE*HELPAHELPBHELPPNLFLDCMD1,<''>,4,CHELPAEEQU*-1FLDCMD2,<''>,4,CHELPBEEQU*-1FLDC MD3,<''>,4HELPPNLEEQU*-1DS.W0PAGE* *FREEQUEUE* SECTION8XDEFFREQ,USRQ,RECVQ,TMITQ1XREF.SRDBUF,FREEQHD,PDSKERR,DBUFSZ,FQLWM,FQBCNTXREF.SUSERQHD,SDLCPCBXREFMEMOFSET'FREQWANT#12,#2Checkforenoughlines PRINTFREEHD&LEARDBUF(PC),A4STARTOFREADBUFFER&MOVE.LFREEQHD(A3),A0GETFREEQHEAD.ADD.LMEMOFSET(PC),A0ADJUSTADDRESSFORVM02&MOVE.LA0,-(A7)SAVEADJUSTEDADDRESSMVHEX4,FREEQHD(A3),FRHEAD(PC)MVHEX2,DBUFSZ(A3),BFSIZE(PC)MVHEX2,FQLWM(A3),FRQLWM(PC)MVHEX2,FQBCNT(A3),FRQBCNT(PC)PRINTFREEQDL+TST.LFREEQHD(A3)ISANYTHINGONTHEQUEUEBEQ.SFREQ2BRANCHIFNOT%PRINTBUFHDRPRINTTHEBUFFERHEADER+RD#80,(A7),(A4),PDSKERRREADFIRSTBUFFER&MOVE.LFREEQHD(A3),-(A7)SAVEADDRESSFREQ1 BSRPRINTBUFDISPLAYTHEBUFFERMOVE.L(A7)+,A0RESTORESTACK"TST.LSDDLNK(A4)ANYMOREBUFFERSBEQ.SFREQ2BRANCHIFNOT*MOVE.LSDDLNK(A4),-(A7)SAVENEXTADDRESS.MOVE.LMEMOFSET(PC),D0ADDOFFSETTOVM02MEMADD.LD0,SDDLNK(A4)*0RD#80,SDDLNK(A4),(A4),PDSKERRREADNEXTBUFFER BRAFREQ1FREQ2"MOVE.L(A7)+,A0RESTORETHESTACK RTSEXITPAGE* *USERQUEUE*'USRQWANT#12,#2CheckforenoughlinesPRINTUSEQHDPrinttheheader&LEARDBUF(PC),A4STARTOFREADBUFFER4MVHEX4,USERQHD(A3),USEQHDR(PC)DISPLAYUSERQHEADPRINTUSERQDL(TST.LUSERQHD(A3)ANYTHINGONTHEQUEUEBEQ.SUSRQ3BRANCHIFNOT!PRINTBUFHDRPRINTBUFFERHEADER@MOVE.LUSERQHD(A3),-(A7)ADJUSTADDRESSBYADDINGOFSETTOVM02MOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)*+RD#80,(A7),(A4),PDSKERRREADFIRSTBUFFER-MOVE.LUSERQHD(A3),-(A7)SAVEBUFFERADDRESSUSRQ1%BSRPRINTBUFDISPLAYBUFFERCONTENTS"MOVE.L(A7)+,A0RESTORETHESTACK"TST.LSDDLNK(A4)ANYMOREBUFFERSBEQ.SUSRQ2BRANCHIFNOT-MOVE.LSDDLNK(A4),-(A7)SAVEADDRESSOFNEXT6MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSTOVM02MEMADD.LD0,SDDLNK(A4)*0RD#80,SDDLNK(A4),(A4),PDSKERRREADNEXTBUFFER BRA.SUSRQ1USRQ2"MOVE.L(A7)+,A0RESTORETHESTACKUSRQ3RTSPAGE**RECEIVEQUEUE*(RECVQWANT#12,#2CheckforenoughlinesPRINTRCVQHDPrintheader&LEARDBUF(PC),A4STARTOFREADBUFFERTST.LSDLCPCB(A3) BEQRECVQX7MOVE.LSDLCPCB(A3),-(A7)ADJUSTTHEADDRESSOFTHEPCBMOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)*8RD#SDPLNG,(A7),(A4),PDSKERRREADPRIMARYCONTROLBLOCK9MVHEX4,SDPRCV(A4),SDHDRRCV(PC)PRINTRECEIVEQUEUEHEAD PRINTRCVQDL.TST.LSDPRCV(A4)ANYBUFFERSINRECEIVEQUEUEBEQ.SRECVQ2BRANCHIFNOT PRINTBUFHDR*MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSADD.LD0,SDPRCV(A4)*,MOVE.LSDPRCV(A4),-(A7)SAVEBUFFERADDRESS1RD#80,SDPRCV(A4),(A4),PDSKERRREADFIRSTBUFFERRECVQ1%BSRPRINTBUFDISPLAYBUFFERCONTENTS"MOVE.L(A7)+,A0RESTORETHESTACK"TST.LSDDLNK(A4)ANYMOREBUFFERSBEQ.SRECVQ2BRANCHIFNOT,MOVE.LSDDLNK(A4),-(A7)SAVEBUFFERADDRESS*MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSADD.LD0,SDDLNK(A4)*0RD#80,SDDLNK(A4),(A4),PDSKERRREADNEXTBUFFER BRA.SRECVQ1RECVQ2#MOVE.L(A7)+,A0CLEANUPTHESTACKRECVQXRTSEXITPAGE**DISPLAYTRANSMITQUEUE*(TMITQWANT#12,#2CheckforenoughlinesPRINTTXQHDPrintheaderTST.LSDLCPCB(A3).BEQTMITQXBranchifnoprimarycontrolblockLEARDBUF(PC),A4/MOVE.LSDLCPCB(A3),-(A7)ADJUSTMEMORYADDRESSMOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)*8RD#SDPLNG,(A7),(A4),PDSKERRGETTHEPCBTOFINDANSCB"MOVE.L(A7)+,A0RESTORETHESTACK0MOVE.LSDPFSEC(A4),-(A7)SAVEADDROFFIRSTSCBMOVE.LMEMOFSET(PC),D0*ADD.LD0,(A7)*8RD#SDSLNG,(A7),(A4),PDSKERRXMITQUEUESAREINTHESCBTMITQ15MVHEX4,SDSTHD(A4),TMITQHD(PC)PRINTXMITQUEUEHEAD2MVHEX1,SDSSEC(A4),STANUM(PC)SEC.STATIONNUMBERPRINTXMITQDL*(TST.LSDSTHD(A4)ANYTHINGONXMITQUEUE%BEQ.STMITQ3BRANCHIFNOTHINGTHERE+MOVE.LSDSTHD(A4),-(A7)SAVEBUFFERHEADER&PRINTBUFHDRPRINTBUFFERHEADERLINE*MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSADD.LD 0,SDSTHD(A4)*6RD#80,SDSTHD(A4),(A4),PDSKERRREADFIRSTXMITBUFFERTMITQ26BSRPRINTBUFDISPLAYTHEFIRST40BYTESOFTHEBUFFER"MOVE.L(A7)+,A0RESTORETHESTACK!TST.LSDDLNK(A4)ANYMORELINKED&BEQ.STMITQ3BRANCHIFNOMORELINKED0MOVE.LSDDLNK(A4),-(A7)SAVETHEBUFFERADDRESS*MOVE.LMEMOFSET(PC),D0ADJUSTTHEADDRESSADD.LD0,SDDLNK(A4)*5RD#80,SDDLNK(A4),(A4),PDSKERRREADNEXTXMITBUFFER BRA.STMITQ2TMITQ3%ADD.L#SDSLNG,(A7)POINTTONEXTSCB+RD#SDSLNG,(A7),(A4),PDSKERRREADNEXTSCB)TST.BSDSSEC(A4)ISTHISSCBAVALIDONEBNETMITQ1BRANCHIFMORESCBSTMITQ4#MOVE.L(A7)+,A6CLEANUPTHESTACKTMITQXRTSEXITPAGE** HELP COMMAND*!HELPSODC.B'Startupoptionis:'ENDLNLF5DC.B';S=$xxxxWhere$xxxxistheaddressofSYSPAR'ENDLINE&DC.B'Thisaddressdefaultsto$900'ENDLNLFDC.B'Legalsubcommandsare:'ENDLNLFHELPSOEEQU*-1DS0PAGE SECTION8**DISPLAYLEGALCOMMANDS*XREFCMDTBL,CMDTBLE XDEFHELPHELP PRINTHELPSO!PEACMDTBL(PC)CMDTABLEADDRESSHELP1MOVE.L(A7),A5ENDOFTABLE?LEACMDTBLE(PC),A0*CMP.LA0,A5*BEQHELP4BRANCHIFDONE=MVASC4,(A5),CMD1(PC)MOVEASCIIOFCOMMANDINTODISPLAYBUF$ADD.L#8,(A7)POINTTONEXTCOMMANDMOVE.L(A7),A5ENDOFTABLE?LEACMDTBLE(PC),A0*CMP.LA0,A5*BEQ.SHELP3BRANCHIFITIS(MVASC4,(A5),CMD2(PC)MOVENEXTCOMMAND$ADD.L#8,(A7)POINTTONEXTCOMMANDMOVE.L(A7),A5ENDOFTABLE?LEACMDTBLE(PC),A0* CMP.LA0,A5BEQ.SHELP2BRANCHIFITIS(MVASC4,(A5),CMD3(PC)MOVENEXTCOMMANDPRINTHELPPNLADD.L#8,(A7)NEXTCOMMAND BRAHELP1HELP21PRINTHELPBPRINT2OFTHETHREECOMMANDBUFFERSBRA.SHELP4*HELP31PRINTHELPAPRINT1OFTHETHREECOMMANDBUFFERSHELP4"MOVE.L(A7)+,A0RESTORETHESTACK RTSEXITPAGE*5*DISPLAYBUFFERCONTENTSSUBROUTINE(FIRST40BYTES)**%*ENT:A7-ADDRESSOFBUFFERADDRESS*PRINTBUF1MVHEX4,4(A7),SDHDLNK(PC)CURRENTBUFFERADDRESS/MVHEX2,SDDSTS(A4),SDHDSTS(PC)RETURNEDSTATUS:MVHEX2,SDDBCT(A4),SDHDBCT(PC)ACTUALXMIT/RCVBYTECOUNT+MVHEX1,SDDRTC(A4),SDHDRTC(PC)RETRYCOUNT+MVHEX1,SDDERR(A4),SDHDERR(PC)SDLCERRORS,MVHEX1,SDDCMD(A4),SDHDCMD(PC)SDLCCOMMAND2MVHEX1,SDDSEC(A4),SDHDSCD(PC)SDLCSECSTATION#-MVHEX1,SDDRSP(A4),SDHDRSP(PC)SDLCRESPONSE/MVHEX1,SDDRSP+1(A4),SDHDRSV(PC)RESERVEDBYTE/MVHEX4,SDDDAT(A4),SDHDDAT1(PC)DATAINBUFFER$MVHEX4,SDDDAT+4(A4),SDHDDAT2(PC)*$MVHEX4,SDDDAT+8(A4),SDHDDAT3(PC)*%MVHEX4,SDDDAT+12(A4),SDHDDAT4(PC)*%MVHEX4,SDDDAT+16(A4),SDHDDAT5(PC)*PRINTBUFDLPRINTTHELINE RTSEXIT;TTLANALPDMP.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALPDMP.AI*9***********************************************************REVISIONSTATUS:*---------------**11/15/83-EE5*ClearbitzeroonMDsoitdoesnotsaydumpisodd/*bytewhileactuallystartingitonevenbyte.** SECTION0 XDEFADRBGND)ADRBGNDDC.L0SAVEADDRESSTOSTARTDUMP XDEFCNTBYTECNTBYTEDC.L0#BYTESTODUMPXDEFADROFST1)ADROFST1DC.L0OFFSETTOLOGICALADDRESSXDEFADROFST23ADROFST2DC.L0TEMPOFFSETGIVENWITHDUMPCOMMAND*SAMEABOVDC.B''?DC.B'********************SAMEASABOVE********************' DC.B''*HOLDLIN DS.B16RBUFDS.B$100 XDEFRDBUFRDBUFDS.BMAXBUFPAGE SECTION8+XREF.SHEXBIN,NEWPAGE,PRTL80,FMTLIN,PRTLIN'XREF.SCMDPRO,OFFSETC,CMDPWHAT,PDSKER6**DUMPBLOCKOFMEMORY.*A0=0ORPOINTSTOPARAMETERSONINPUTLINE* XDEFPADMPPADMPLEABEGDATA(PC),A6:MOVE.LADROFST1-BD(A6),ADROFST2-BD(A6)GETDEFAULTOFFSET3LEAADRBGND(PC),A1PLACETOPUTDUMPSTARTADDRESSBSRHEXBINCONVERTADDRESS-BMICMDPWHATBRANCHIFBADVALUEFORADDRESS BEQ.SPADMP2BRANCHIFNOCOMMA(LEAADROFST2(PC),A1PLACETOPUTOFFSETBSROFFSETCCONVERTOFFSET,BNECMDPWHATBRANCHIFBADVALUEFOROFFSET7PADMP2LEACNTBYTE(PC),A1PLACETOSTOREENDINGADDRESS"BSRHEXBINCONVERTENDINGADDRESS1BNECMDPWHATBRANCHIFBADVALUEFORENDADDRESS)MOVE.LCNTBYTE-BD(A6),D0GETENDADDRESS5SUB.LADRBGND-BD(A6),D0-STARTADDRESS=BYTECOUNTBMICMDPWHATCAN'TBEMINUS)ADD.L#1,D0INCLUDETHEENDPOINT012985&MOVE.LD0,CNTBYTE-BD(A6)SAVE#BYTESBRA.SPMDMP3CONTINUEDUMP* XDEFPMDMPPMDMPLEABEGDATA(PC),A6:MOVE.LADROFST1-BD(A6),ADROFST2-BD(A6)GETDEFAULTOFFSET3LEAADRBGND(PC),A1PLACETOPUTDUMPSTARTADDRESSBSRHEXBINCONVERTADDRESS-BMICMDPWHATBRANCHIFBADVALUEFORADDRESSUB^@f' BEQ.SPMDMP2BRANCHIFNOCOMMA(LEAADROFST2(PC),A1PLACETOPUTOFFSETBSROFFSETCCONVERTOFFSET,BNECMDPWHATBRANCHIFBADVALUEFOROFFSET3PMDMP2LEACNTBYTE(PC),A1PLACETOSTOREBYTECOUNTBSRHEXBINCONVERT#BYTES+BNECMDPWHATBRANCHIFBADVALUEFORCOUNT$PMDMP3BSRNEWPAGESTARTONNEWPAGEBSR.SPMDUMPGOPRINTDUMP#BRACMDPRORETURMFORNEXTCOMMANDPAGE*3*PMDUMP-FORMATANDPRINTSPECIFIEDBLOCKOFDUMP*!*ADRBGND=ADDRESSTOSTARTDUMP*ADROFST2=OFFSET*CNTBYTE=NUMBEROFBYTES* XDEFPMDUMP PMDUMPBEGSUB(MOVE.LCNTBYTE-BD(A6),D0GETBYTECOUNT BNE.SPMDMP4BRANCHIFNOTZERO MOVE.L#1,D0MUSTBEATLEAST1PMDMP4ADD.L#$F,D0ADD15/AND.B#$F0,D0ALWAYSDUMPMULTIPLEOF16BYTES-MOVE.LD0,CNTBYTE-BD(A6)SAVEADJUSTEDCOUNT**READFROMDISKETTEORMEMORY*CLR.LD7FLAG1STLINE0PMDMP6MOVE.LADRBGND-BD(A6),D1STARTINGADDRESS$ADD.LADROFST2-BD(A6),D1ADDOFFSET MOVE.LCNTBYTE-BD(A6),D2LENGTH&BLEPMDMP30BRANCHIFNOMORETODUMP-SUB.L#MAXBUF,CNTBYTE-BD(A6)MAXIMUM#BYTES-BMI.SPMDMP8BRANCHIFREADISLESSTHANMAX#MOVE.L#MAXBUF,D2SETCOUNTTOMAX-PMDMP8RDD2,D1,RDBUF(PC),PDSKER6,XREADDISK%LEARDBUF(PC),A5ADDRESSTOGETDATA8MOVE.LADRBGND-BD(A6),D6ADDRESSTOSTARTDUMP11/15/835BCLR#0,D6makesuredumpisfromevenbyte11/15/83MOVE.LD6,A411/15/83MOVE.LD2,D6#BYTESTODUMP**FORMATANDPRINTDUMPLINES*TST.WD7CHECKFOR1STLINE!BEQ.SPMDMP14BRANCHIF1STLINE(PMDMP10MOVE.LA5,A0POINTERTO16BYTES2LEAHOLDLIN(PC),A1BUFFERWITHPRECEDING16BYTES%MOVE.L#4,D016BYTES=4LONGWORDS)PMDMP12CMP.L(A0)+,(A1)+COMPARE4BYTES!BNE.SPMDMP14BRANCHIFNOTSAME SUB.L#1,D0 BNEPMDMP12"TST.WD7HAS'SAME'BEENPRINTED?BMI.SPMDMP20BRANCHIFYESNOT.WD7FLAG'SAME'PRINTED'LEASAMEABOV(PC),A1ADDRESSOFMESSAGEBSRPRTL80GOPRINTMESSAGEBRA.SPMDMP20* PMDMP14EQU*!MOVE.L#1,D7FLAG-NOT1STLINE!MOVE.LA5,A0ADDRESSOF16BYTES$LEAHOLDLIN(PC),A1SAVEFORCOMPAREMOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+**MOVE.LA5,A0ADDRESSOF16BYTESTOPRINT*LEAPRTLIN(PC),A1ADDRESSOFPRINTBUFFER'MOVE.LA4,D0PHYSICALADDRESSTOPRINT&MOVE.LA4,D1LOGICALADDRESSTOPRINT5ADD.LADROFST2-BD(A6),D0ADDOFFSETTOPHYSICALADDR BSRFMTLINGOFORMATPRINTLINELEAPRTLIN(PC),A1BSRPRTL80PRINTIT**INCREMENTTONEXTLINE*PMDMP20 ADD.L#16,A4 ADD.L#16,A5SUB.L#16,D2DECREMENT#BYTESBGTPMDMP10BRANCHIFMORE.MOVE.LA4,ADRBGND-BD(A6)NEWSTARTINGADDRESSBRAPMDMP6GOREADMORE*!*DUMPFINISHED-CHECKLASTLINE*'PMDMP30TST.WD7WASLASTLINEPRINTED?BPL.SPMDMP40BRANCHIFYES$LEAHOLDLIN(PC),A0CONTENTSOFLINE'LEAPRTLIN(PC),A1ADDROFPRINTBUFFER&LEA-16(A4),A4BACKUPTOGETADDRESSMOVE.LA4,D0PHYSICALADDRESSMOVE.LA4,D1LOGICALADDRESS8ADD.LADROFST2-BD(A6),D0ADDOFFSETTOPHYSICALADDRESS BSRFMTLINGOFORMATPRINTLINELEAPRTLIN(PC),A1BSRPRTL80PRINTITPMDMP40ENDSUB;TTLANALSYSP.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALSYSP.AI*9********************************************************* SECTION0**SYSPARVARIABLES*3SPARHDDC.B'SYSPARVARIABLES-SYSPARADDRESS='SPARADDC.B''ENDLINEDC.B'----------------'ENDLINE*FLDSPHDMB,<'MAPBEG'>,8,CFLDSPHDES,<'EXECSTACK'>,8,CFLDSPHDDT,<'DATE'>,8,CFLDSPHDDT2,<''>,8*FLDSPHDRN,<'RUNNER'>,8,CFLDSPHDTH,<'TCBHD'>,8,CFLDSPHDTD,<'TIMEOD'>,8,CFLDSPHDTD2,<''>,8*FLDSPHDRH,<'READYHD'>,8,C FLDSPHDCH,<'CCBHD'>,8102684*FLDSPHDMH,<'MMUHERE'>,8,C!FLDSPHDGB,<'GSTBEG'>,8102684*FLDSPHDUB,<'USTBEG'>,8,CFLDSPHDUD,<'UDRBEG'>,8,CFLDSPHDPB,<'PATBEG'>,8*FLDSPHDTB,<'TRACBEG'>,8,CFLDSPHDTF,<'TRACFLAG'>,8,CFLDSPHDMS,<'MACSTRC'>,8*FLDSPHPNL,<'PANEL'>,8,CFLDSPHDPT,<'PTMADDR'>,8,CFLDSPHTMO,<'TIMEOUT'>,8*FLDSPHTSC,<'TIMESLIC'>,8,CFLDSPHTTV,<'TIMINTV'>,8,CFLDSPHTV4,<'TIMINTV4'>,8*FLDSPHTTF,<'TINTFLAG'>,8,CFLDSPHSPR,<'SPURCNT'>,8*FLDMMULOA,<'MMULOAD'>,8,CFLDVCTUBG,<'VCTUBGN'>,8,CFLDSPURTIM,<'SPURTIME'>,8,CFLDSPURTI2,<''>,8*FLDSPHDIB,<'IOVCTBGN'>,8,CFLDSPHST7,<'SLFTSTA7'>,8*FLDFREEQH,<'FREEQHD'>,8,CFLDDBUFS,<'DBUFSZ'>,8,CFLDFQLW,<'FQLWM'>,8*FLDFQBCN,<'FQBCNT'>,8,CFLDUSERQH,<'USERQHD'>,8,CFLDUSERQN,<'USERQND'>,8*FLDSDLCPC,<'SDLCPCB'>,8,CFLDNNTBEX,<'NNTBEG'>,8,CFLDNATBEX,<'NATBEG'>,8*FLDLCTBEX,<'LCTBEG'>,8,CFLDNWPSE,<'NWPSEG'>,8,CFLDNWTSE,<'NWTSEG'>,8*FLDNWDQH,<'NWDQHD'>,8,CFLDNWSTATU,<'NWSTATUS'>,8,CFLDV2RQH,<'V2RQHD'>,8*FLDMEMOF,<'MEMOFF'>,8,CFLDSYSPOF,<'SYSPOFF'>,8,CFLDCTRLRE,<'CTRLREG'>,8*FLDDPRVA,<'DPRVAO'>,8,CFLDRAD1TB,<'RAD1TBL'>,8,CnTwA1FLDRIOTB,<'RIOTBL'>,8*FLDFREEQN,<'FREEQND'>,8*ENDLINE(FLDSPHDAD,<'MEMDEFAULTS--ASQ='>,2,CFLDSPHDTDF,<'TCB='>,2,CFLDSPHDSD1,<'SYSTASK='>,2,CFLDSPHDSD2,<''>,2,C FLDSPHDUD1,<'USERTASK='>,2,CFLDSPHDUD2,<''> ,2SPARHDEEQU*-1DS.W0PAGE SECTION8OPTPCS**XREF'SFORSYSPARVARIABLES*XREF.SSYSPAR,CRASHSAVXREF.SMAPBEG3XREF.SEXCSTACK,RUNNER,TCBHD,READYHD,CCBHD,MMUHERE,4,CTCBNAME(ASCII)FLDTCHDSS,<''>,4,CSESSIONFLDTCHDUR,<''>,4,CUSER'FLDTCHCPRI,<''>,2,CCURRENTPRIORITY%FLDTCHLPRI,<''>,2,CLIMITPRIORITY#FLDTCHRPRI,<''>,2,CRUNPRIORITYFLDTCHDST,<''>,4,CSTATE!FLDTCHDUT,<''>,2,CUSERTRAP#%FLDTCHDSR,<''>,4,CSTATUSREGISTER%FLDTCHDPC,<''>,6,CPROGRAMCOUNTER!FLDTCHDABT,<''>,4,CABORTCODEFLDTCHDASQ,<''>,6,CASQ!FLDTCHDLAY,<''>,8,CDELAYTIME#FLDTCHMONT,<''>,4,CMONITORTASKZUEBOIC5#TCHMONSDC.B'0000'MONITORSESSION TCHDEEQU*-1DS.W0TCHD2DCB.B16,''$FLDTCHEVCT,<''>,6,CEXCEPVECTORS#FLDTCHTVCT,<''>,6,CTRAPVECTORS!FLDTCHATTR,<''>,4,CATTRIBUTESFLDTCHIOCT,<''>,2,CIOCOUNTFLDTCHENTR,<''>,6,CENTRY"FLDTCHCHAN,<''>,6,CCCBADDRESS)FLDTCHEXMT,<''>,4,CEXCEPMONITORTASK*FLDTCHEXMS,<''>,4EXCEPMONITORSESSIONTCHD2EEQU*-1DS.W0**TASKSTATEANDATTRIBUTES*PCSTATENDLINEFLDPXSTAT,<'TASKSTATE'>,4PCSTATEEQU*-1DS.W0$GTEVDC.B'*GETTINGEVENT'<<012585 GTEVEEQU*-1DS.W0ASQBUFDS.B$100012585>> PATTRENDLINE#FLDPXATTR,<'TASKATTRIBUTES'>,4PATTREEQU*-1DS.W0CSTATEDC.B'*DORMANT'COMNTSZEQU*-CSTATEDC.B'*BLOCKEDBYWAIT'DC.B'*SEMAPHOREWAIT'DC.B'*WAITFOREVENT'DC.B'*WAITACKTRAPX'CSTATETEQU*-3DC.B'*WAITFOREXMON'DC.B'*SUSPENDED'DC.B'*BIT8SET'DC.B'*TERMPENDING'DC.B'*RETURNTOEXEC'DC.B'*HEADEDFORASR'DC.B'*ONREADYLIST'DC.B'*WAKEUPPENDING'DC.B'*2NDACKPENDING'DC.B'*BIT1SET'DC.B'*BIT0SET'CATTRBDC.B'*SYSTEMTASK'DC.B'*MEMORYRESIDENT'DC.B'*CRASHONABORT'DC.B'*USERDUMPREQ'DC.B'*RELOCATABLE'DC.B'*BIT10SET'DC.B'*BIT9SET' DC.B'*USERSEMAPHORES'012585DC.B'*REAL-TIMETASK'012585DC.B'*EXMONCONTROLLED'DC.B'*EXCPTIONMONITOR'DC.B'*HASEXCPVECTORS'DC.B'*HASTRAPVECTORS'DC.B'*LASTTASKINSES'DC.B'*TASKWASABORTED'DC.B'*CLAIMUSRVECTOR'DS.W0**SEGMENTINFORMATIONLINE*!MSGSEGMFLDMGSGNAM,<'SEG='>,4,CFLDMGSGFRML,<'FR'>,4,CFLDMGSGTOL,<'00TO'>,4,CFLDMGSGPO,<'FF(PO'>,4,CFLDMGSGSIZ,<'00)'>,4,C FLDMGSGS IZ2,<'00BYTES('>,4,CFLDMGSGSIZ3,<'.'>,2,CFLDMGSGTYP,<'K)-'>,4,CFLDMGSGSHR,<''>,4,CMSGSEGMEEQU*-1DS.W0MGSGTY1DC.B'READROM'MGSGTY3DC.B'R/WMMIO'MGSGTY5DC.B'ASQ'MGSGSHR1DC.B'GSHRLSHR' **TASKREGISTERS* TCREGENDLINEFLDPPC,<'PC'>,8,CFLDPSR,<'SR'>,4FLDPD0,<'D0'>,8,CFLDPD1,<'D1'>,8,CFLDPD2,<'D2'>,8,CFLDPD3,<'D3'>,8FLDPD4,<'D4'>,8,CFLDPD5,<'D5'>,8,CFLDPD6,<'D6'>,8,CFLDPD7,<'D7'>,8FLDPA0,<'A0'>,8,CFLDPA1,<'A1'>,8,CFLDPA2,<'A2'>,8,CFLDPA3,<'A3'>,8FLDPA4,<'A4'>,8,CFLDPA5,<'A5'>,8,CFLDPA6,<'A6'>,8,CFLDPA7,<'A7'>,8 TCREGEEQU*PAGE SECTION8***PRINTOUTALLINFORMATIONABOUTONETASK* XDEFONETASK*8XREF.SPDSKERR,NEWPAGE,PTASK,CONVDEC2,CONVDEC3,CONVTIMEXREF.SREADYHD,PATBEG,TCBHDXREF.SERMSG1,ERMSG1E XREF.SRDBUF*%ONETASKRD#$200,A5,RDBUF(PC),PDSKERR'LEARDBUF(PC),A4ADDRESSOFTCBBUFFER7MVASC4,TCBNAME(A4),PTASK(PC)PUTTASKNAMEINHEADINGBSRNEWPAGESTARTONNEWPAGEPRINTTCHDG2APRINTHEADING"MVHEX3,A5,TCHDAD(PC)TCBADDRESS-BSRTCBDTAILFILLIN1STLINE-ANDPRINTIT"PRINTFTCHDPRINTTHEDETAILLINE PRINTFSPACE$PRINTTCHDG3PRINT2NDHEADINGLINE3MVHEX3,TCBEVECT(A4),TCHEVCT(PC)EXCEPTIONVECTORS.MVHEX3,TCBTVECT(A4),TCHTVCT(PC)TRAPVECTORS+MVHEX2,TCBATTR(A4),TCHATTR(PC)ATTRIBUTES*MVHEX1,TCBIOCNT(A4),TCHIOCT(PC)IOCOUNT/MVHEX3,TCBENTRY(A4),TCHENTR(PC)ENTRYADDRESS,MVHEX3,TCBCHAN(A4),TCHCHAN(PC)CCBADDRESS2MVASC4,TCBEXM(A4),TCHEXMT(PC)EXCEPMONITORTASK6MVASC4,TCBEXMS(A4),TCHEXMS(PC)EXCEPMONITORSESSION PRINTTCHD2*!*PRINTTASKSTATEANDATTRIBUTES*6MVHEX1,TCBUTRP(A4),CSTATET(PC)PUTTRAP#INMESSAGE5MVHEX2,TCBSTATE(A4),PXSTAT(PC)PUTSTATEINMESSAGE PRINTPCSTAT&MOVE.WTCBSTATE(A4),D5GETSTATEWORD&LEACSTATE(PC),A5STATEWORDCOMMENTSBSRPCOMENTGOPRINTCOMMENTS4BSRGT_EVENT_STATECHECKFORGETEVENTSTATE0125859MVHEX2,TCBATTR(A4),PXATTR(PC)PUTATTRIBUTESINMESSAGE PRINTPATTR%MOVE.WTCBATTR(A4),D5GETATTRIBUTES%LEACATTRB(PC),A5ATTRIBUTECOMMENTSBSRPCOMENTGOPRINTCOMMENTSSUB.W#2,CNTLIN-MBD(A6)**PRINTSEGMENTINFORMATION* PRINTFSPACE.LEATSTBEGIN(A4),A5ADDRESSOFTASKSEGTABLE(LEATSTMMU(A5),A5STARTOFSEGMENTLIST&MOVE.L#SEGMENTS-1,D5SEGMENTCOUNTER+ONETS1TST.WTSTCTL(A5)DOESSEGMENTEXIST?BEQONETS8BRANCHIFNO.MVASC4,TSTANAME(A5),MGSGNAM(PC)SEGMENTNAME-MVHEX2,TSTPO(A5),MGSGPO(PC)PHYSICALOFFSET#MOVE.WTSTLB(A5),D3BEGOFSEGMENT#MOVE.WTSTLE(A5),D4ENDOFSEGMENT%LEAMGSGFRML(PC),A1ADDRTOSTORBEG.LEAMGSGSIZ(PC),A2ADDRTOSTORSIZEINBYTES$LEAMGSGSIZ2(PC),A0ADDRTOSTOR#K BSRPSEGSIZ.LEAMGSGTY1(PC),A0TYPEPOINTERFORREADONLYMOVE.WTSTAATTR(A5),D7!BTST#SEGAROM,D7ISITREADONLYBNE.SONETS4BRANCHIFYES(LEAMGSGTY3(PC),A0TYPEPOINTERFORR/W+ONETS4AND.B#$0C,D7CHECKFORMMIOORPROM"BEQ.SONETS5BRANCHIFNOTEITHER$LEA4(A0),A0INCREMENTTYPEPOINTER ONETS5MOVE.L#4,D1#CHARACTERS LEAMGSGTYP(PC),A1MESSAGEADDR BSRMOVEASC(LEAMGSGSHR1(PC),A0BLANKSHAREPOINTER)BTST#SEGAGLBL,D7ISITGLOBALLYSHARED?BEQ.SONETS6BRANCHIFNOLEA4(A0),A0CHANGEPOINTER-ONETS6BTST#SEGASHR,D7ISITLOCALLYSHARED?BEQ.SONETS7BRANCHIFNOLEA8(A0),A0CHANGEPOINTER ONETS7MOVE.L#4,D1#CHARACTERS#LEAMGSGSHR(PC),A1MESSAGEADDRESS BSRMOVEASCPRINTFMSGSEGM)ONETS8LEA8(A5),A5INCREMENTTONEXTSEGDBRAD5,ONETS1**PRINTASQ(IFEXISTS)*-MOVE.LTCBASQ(A4),D3DOESASQADDRESSEXIST?BEQ.SONETR1BRIFNO#RD.S#$40,D3,RDBUF+$200(PC),ONETR1LEARDBUF+$200(PC),A5-MVASC4,(A5),MGSGNAM(PC)PUT!ASQINMESSAGELSR.L#8,D3BEGPAGE#MOVE.L#4,D4012585ADD.WASQML(A5),D4012585ADD.LASQTOP(A5),D4012585LSR.L#8,D4ENDPAGE#PLUS1SUB.L#1,D4ENDPAGE#!LEAMGSGFRML(PC),A1ADDROFFROM#LEAMGSGS IZ(PC),A2ADDROF#BYTESLEAMGSGSIZ2(PC),A0ADDROF#K BSRPSEGSIZ CLR.LD2MVHEX2,D2,MGSGPO(PC)0MVASC4,MGSGTY5(PC),MGSGTYP(PC)USEASQASTYPEMVASC4,SPACE(PC),MGSGSHR(PC)PRINTFMSGSEGM**PRINTREGISTERS* ONETR1MVHEX4,TCBD0(A4),PD0(PC)MVHEX4,TCBD0+4(A4),PD1(PC)MVHEX4,TCBD0+8(A4),PD2(PC)MVHEX4,TCBD0+12(A4),PD3(PC)MVHEX4,TCBD0+16(A4),PD4(PC)MVHEX4,TCBD0+20(A4),PD5(PC)MVHEX4,TCBD0+24(A4),PD6(PC)MVHEX4,TCBD0+28(A4),PD7(PC)MVHEX4,TCBA0+00(A4),PA0(PC)MVHEX4,TCBA0+04(A4),PA1(PC)MVHEX4,TCBA0+08(A4),PA2(PC)MVHEX4,TCBA0+12(A4),PA3(PC)MVHEX4,TCBA0+16(A4),PA4(PC)MVHEX4,TCBA0+20(A4),PA5(PC)7BTSTW#TSK2RTEX,TCBSTATE(A4)RETURNTOEXEC?<<012585IFTHEN.S!MVHEX4,TCBSTKA6(A4),PA6(PC)YESMVHEX2,TCBSTKSR(A4),PSR(PC)MVHEX4,TCBSTKPC(A4),PPC(PC)ELSE.SMVHEX4,TCBA6(A4),PA6(PC)NOMVHEX2,TCBSR(A4),PSR(PC)MVHEX4,TCBPC(A4),PPC(PC)ENDI012585>>MVHEX4,TCBA0+28(A4),PA7(PC) PRINTTCREGMVASC4,SPACE(PC),PTASK(PC)RTSPAGE*3*SUBROUTINETOLOOKFORAGET_EVENTSTATE<<012585*GT_EVENT_STATE:#MOVE.LTCBASQ(A4),D5ASQPRESENT?BEQ.SGT_EV_DNENORD#$100,D5,ASQBUF(PC),PDSKERRLEAASQBUF(PC),A5MOVE.WASQSTATE(A5),D5AND.W#STATE_MASK,D5CMP.W#GT_EN,D5GETEVENT?BNE.SGT_EV_DNENOPRINTGTEVYES,ONLYONESTATEGT_EV_DNERTSRETURN012585>>  *(*SUBROUTINETOPRINTSIZEOFMEMORYSEG**D3=BEGPAGED4=ENDPAGE=*A1=PTRTOPRINTBEGA2=PTRTOPRINTSIZEA0=PTRTOPRINT#K* XDEFPSEGSIZ)PSEGSIZMVHEX2,D3,(A1)PRINTBEGADDRESS#MVHEX2,D4,6(A1)PRINTENDADDRESSSUB.WD3,D4SUBTRBEGFROMENDADD.W#1,D4+1=TOTAL#PAGES(MOVE.LA2,D0SHOULD#BYTESBEPRINTED?BEQ.SPSEGSZ4BRANCHIFNOMVHEX2,D4,(A2)PRINT#BYTES PSEGSZ4DIVU#4,D4DIVBY4=#K MOVE.WD4,D0LEA(A0),A1PRINTLINEADDR BSRCONVDEC4SWAPD4GETREMAINDER MULU#25,D4CHANGETOFRACPART"MOVE.B#'.',(A1)+STOREDECPOINT MOVE.WD4,D0 BSRCONVDEC2RTSPAGE**SUBROUTINETOPRINTCOMMENTS**A5POINTSTOCOMMENTTABLE%*D5CONTAINSSTATEORATTRIBUTEWORD*XREF.SPRTLIN*,PCOMENTLEAPRTLIN(PC),A2OUTPUTLINEBUFFER!MOVE.L#15,D7READYFORBITTESTPCOM4BTSTD7,D5ISBITSET?BEQ.SPCOM8BRANCHIFNO&MOVE.W#COMNTSZ,D6#BYTESINCOMMENT/PCOM6MOVE.W(A5)+,(A2)+MOVECOMMENTTOOUTPUT!SUB.W#2,D6DECREMENTBYTECOUNT!BNEPCOM6GOBACKTOFINISHMOVELEAPRTLIN+64(PC),A0CMP.LA0,A2OUTPUTLINEFULL?BMI.SPCOM9BRANCHIFNO2PCOM7MOVE.B#$0D,(A2)+PUTCARRETATENDOFLINE.MOVE.B#$0A,(A2)PUTLINEFEEDATENDOFLINE+LEAPRTLIN(PC),A1ADDRESSOFLINETOPRINTBSRPRTLXIPRINTIT!LEAPRTLIN(PC),A2RESTARTOUTPUTBRA.SPCOM9GOTESTNEXTBIT)PCOM8LEACOMNTSZ(A5),A5NEXTTABLEENTRY&PCOM9SUB.L#1,D7DECREMENTBITNUMBER"BPLPCOM4GOBACKIFMORETOTESTLEAPRTLIN(PC),A0CMP.LA0,A2ANYMORETOPRINT?BNEPCOM7BRANCHIFYES RTSRETURNPAGE*!****PRINTTHETCBCHAIN****XDEFTCBCHN,UTCBCHN,STCBCHNXREF.SREADSP,CONVDEC4**PRINTUSERTASKSONLY*)UTCBCHNMOVE.L#-1,D3FLAGFORUSERTASKSBRA.STCBCHN2**PRINTSYSTEMTASKSONLY**STCBCHNMOVE.L#1,D3FLAGFORSYSTEMTASKSBRA.STCBCHN2**PRINTALLTASKS*"TCBCHNCLR.LD3FLAGFORALLTASKS TCBCHN2WANT#6,#2LINESONPAGE%BSRREADSPReadinsystemparameters PRINTTCHDG1PRINTTCHDG2PRINTHEADING+MOVE.LTCBHD(A3),D11STTASKCONTROLBLOCK6CTTC20RD#$200,D1,RDBUF(PC),PDSKERRREADATCB012585LEARDBUF(PC),A4TST.LD3PRINTALLTASKS?BEQ.STCBCHN6BRANCHIFYES*BPL.STCBCHN5BRANCHIFSYSTEMTASKSONLY/BTST#TSKASYST,TCBATTR(A4)ISTHISAUSERTASKBEQ.STCBCHN6BRANCHIFYESBRA.STCBCHN88TCBCHN5BTST#TSKASYST,TCBATTR(A4)ISTHISASYSTEMTASKBEQ.STCBCHN8BRANCHIFNO)TCBCHN6MVHEX3,D1,TCHDAD(PC)TCBADDRESSBSRTCBDTAILPRINTATCBLINE"PRINTFTCHDPRINTTHEDETAILLINE -TCBCHN8MOVE.LTCBALL(A4),D1NEXTTCBADDRESS%BNE.SCTTC20Continueifmoretodo. CTTC30RTSPAGE**'****PRINTTHEREADYTCBCHAIN**** XDEFREADYL*READYLWANT#6,#2LINESONPAGE%BSRREADSPReadinsystemparametersPRINTRLHDG1PRINTHEADINGS PRINTTCHDG2MOVE.W#50,D6LOOPCOUNTER+MOVE.LREADYHD(A3),D7STARTOFREADYCHAIN&BEQ.SCTRL30BRANCHIFNOTASKSREADY$LEARDBUF(PC),A4MEMADDRESSOFTCB'LEATCBREADY(A4),A5READYLISTPOINTER*6CTRL20RD#$200,D7,RDBUF(PC),PDSKERRREADATCB012585$LEARDBUF(PC),A4MEMADDRESSOFTCB-MVHEX3,D7,TCHDAD(PC)PUTTCBADDRESSINMSGBSRTCBDTAILPRINTATCBLINE"PRINTFTCHDPRINTTHEDETAILLINETST.L(A5)DONE?BEQ.SCTRL30YES,STOP"MOVE.L(A5),D7LOADFORNEXTREADSUB.W#1,D6LOOPCOUNTBNECTRL20NO,CONTINUE*%PRINTERMSG1,ERMSG1EERROR-TOOFAR CTRL30RTS*****PRINTDELAYLISTCHAIN* XDEFDELAYLXREF.STIME_LEFT,NSE,MIDNIGHT*DELAYLWANT#6,#2LINESONPAGE%BSRREADSPReadinsystemparametersBSRTIMEOD102684ATIMED0,DLHDTMPRINTDLHD1PRINTHEADINGS PRINTDLHD23MOVE.LPATBEG(A3),D1STARTOFPERACTIVATIONTABLEBEQDELAY8BRANCHIFNOTABLEMOVE.LD1,A5STARTOFTABLE/LEARDBUF+$200(PC),A4STARTOFTABLEINMEMORY MOVE.LA4,D7)SUB.LA5,D7ADJUSTMENTFORENTRYADDRESSRD#$100,D1,(A4),PDSKERR$MOVE.LPATTSIZ(A4),D2SIZEOFTABLERDD2,D1,(A4),PDSKERR.LEAPATHDR(A4),A5POINTERTO1STENTRY102684/MOVE.LTIME_LEFT(A3),D0VALUEFORFIRST102684$MOVE.LD0,PATDELTA(A5)ENTRY102684BSRTIMEOD102684%MOVE.LD0,D4SAVETIMEOFDAY102684'DELAY6MOVE.LPATNEXT(A5),D0NEXTENTRY'BEQ.SDELAY8BRANCHIFNOMOREENTRIESMOVE.LD0,A5PUTINAREG&ADD.LD7,A5ADJUSTFORMEMORYADDRESS!MOVE.LPATTCB(A5),D6TCBADDRESS"BEQ.SDELAY6BRANCHIFENTRYNULL0RD#$200,D6,RDBUF(PC),PDSKERRREADATCB012585LEARDBUF(PC),A4-MVHEX3,D6,TCHDAD(PC)PUTTCBADDRESSINMSGBSR.STCBDTAILMVHEX2,PATOPT(A5),TCHDABT(PC) MVHEX4,PATARID(A5),TCHMONT(PC)/ADD.LPATDELTA(A5),D4ADDDELTATOBASE102684/MVHEX3,D4,TCHDASQ(PC)PREPAREHEXTIME102684MOVE.LD4,D0102684LEATCHDLAY(PC),A1 BSRCONVTIMEPRINTINREALTIME PRINTFTCHD BRADELAY6 DELAY8RTS**PRINTATCBDETAILLINE*7TCBDTAILMVASC4,TCBNAME(A4),TCHNMA(PC)TCBNAME(ASCII))TST.WTCBSESSN(A4)ISSESSIONINBINARY?BNE.STCBDT4BRANCHIFNO1OR.W#$30,TCBSESSN+2(A4)SETLASTDIGITTOASCII.TCBDT4MVASC4,TCBSESSN(A4),TCHDSS(PC)SESSION%LEATCHDUR(PC),A1USERINPRINTLINE"MOVE.WTCBUSER(A4),D0USERNUMBERBSRCONVDEC4CONVERTTODEC)MVHEX1,TCBCPRI(A4),TCHCPRI(PC)PRIORITY)MVHEX1,TCBLPRI(A4),TCHLPRI(PC)PRIORITY MVHEX1,TCBRPRI(A4),TCHRPRI(PC))MVHEX2,TCBSTATE(A4),TCHDST(PC)TCBSTATEMOVE.B#'',(A1)+MVHEX3,TCBASQ(A4),TCHDASQ(PC)ASQADDRESS4MVHEX4,TCBDLAY(A4),TCHDLAY(PC)DELAYENTRYADDRESS,MVHEX2,TCBABORT(A4),TCHDABT(PC)ABORTCODE*MVHEX3,TCBPC(A4),TCHDPC(PC)PROGCOUNTER+MVHEX1,TCBUTRP(A4),TCHDUT(PC)USERTRAP#MOVE.B#'',(A1)(MVHEX2,TCBSR(A4),TCHDSR(PC)STATUSREG,MVASC4,TCBMON(A4),TCHMONT(PC)MONITORTASK)TST.WTCBMON+4(A4)ISSESSIONINBINARY?BNE.STCBDT8BRANCHIFNO/OR.W#$30,TCBMON+6(A4)SETLASTDIGITTOASCII7TCBDT8MVASC4,TCBMON+4(A4),TCHMONS(PC)MONITORSESSIONRTSPAGE* *SUBROUTINETOBUILDTASKTABLE*XDEFBLDTASKT*BLDTASKTBEGSUB4MOVE.WBLDTFLG(PC),D0TESTFLAG-SETTOSKIPBUILDBNE.SBLDTASK6BRANCHIFSET%BSRREADSPReadinsystemparameters+CLR.LTASKTCNT-BD(A6)CLEARCOUNTOFTASKS'MOVE.LTCBHD(A3),D4TCBHEAD-1STTCBBEQ.SBLDTASK6BRANCHIFNONE'LEATASKTBL(PC),A5STARTOFTASKTABLE3BLDTASK1MOVE.LD4,TASKTADR(A5)SAVEADDRESSOFTCB'RD#32,D4,RDBUF(PC),PDSKERRREAD1TCB$LEARDBUF(PC),A4MEMADDRESSOFTCB/MOVE.LTCBNAME(A4),TASKTNAM(A5)SAVETASKNAME.MOVE.LTCBSESSN(A4),TASKTSES(A5)SAVESESSION%ADD.W#1,TASKTCNT-BD(A6)COUNTTASKS,LEATASKTESZ(A5),A5INCREMENTTONEXTENTRY&MOVE.L TCBALL(A4),D4NEXTTCBADDRESSBNEBLDTASK1GOBACKIFMOREBLDTASK6ENDSUB;TTLANALTRAP.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALTRAP.AI*9********************************************************* SECTION0**TRAPASSIGNMENTTABLES*PTRPHDENDLNLFDC.B'TRAPASSIGNMENTTABLES'ENDLINEDC.B'--------------------'ENDLNLFPTRPHDEEQU*-1DS.W0*PTRPAFLDTR0,<'0='>,2,CFLDTR1,<'1='>,2,CFLDTR2,<'2='>,2,CFLDTR3,<'3='>,2,CFLDTR4,<'4='>,2,CFLDTR5,<'5='>,2,CFLDTR6,<'6='>,2,CFLDTR7,<'7='>,2,CFLDTR8,<'8='>,2,CFLDTR9,<'9='>,2,CFLDTRA,<'A='>,2,CFLDTRB,<'B='>,2,CFLDTRC,<'C='>,2,CFLDTRD,<'D='>,2,CFLDTRE,<'E='>,2,CFLDTRF,<'F='>,2PTRPAEEQU*-1*DS.W0PTRPOHENDLINE8DC.B'TR#-TCBADDR-SESSIONSEMAPHOREINTADDRSTPBSZ'ENDLINEPTRPOHEEQU*-1DS.W0*PTRPOLFLDPTRPNM,<''>,2,CFLDPTRPTCB,<''>,6,CFLDPTRPSN,<''>,8,CFLDPTRPSM1,<''>,4,CFLDPTRPSM2,<''>,8,CFLDPTRPIA,<''>,8,CFLDPTRPST,<''>,2,CFLDPTRPBZ,<''>,2PTRPOLEEQU*-1DS.W0PAGE SECTION8**PRINTTRAPASSIGNMENTTABLES*XREF.SCONVHEX1XREF.STIAT,TIOTXDEFCTRAPASGCTRAPASGWANT#8,#2PRINTPTRPHDPRINTHEADINGS*MOVE.L#15,D7LOOPCOUNTERLEATIAT(A3),A0LEATR0(PC),A1CTRAP2MOVE.B(A0)+,D0 BSRCONVHEX1 LEA3(A1),A1DBRAD7,CTRAP2PRINTPTRPAPRINTTIAT*PRINTPTRPOHPRINTTIOTHEADERMOVE.L#15,D7LOOPCOUNTERLEATIOT(A3),A5ENTRYOFFSET(CTRAP4TST.LTIOTTCB(A5)ISENTRYEMPTY?BEQ.SCTRAP8BRANCHIFYESMOVE.W#15,D0SUB.WD7,D0GETTRAP#LEAPTRPNM(PC),A1 BSRCONVHEX1 MVHEX3,TIOTTCB(A5),PTRPTCB(PC) MVHEX4,TIOTSESS(A5),PTRPSN(PC) MVHEX2,TIOTSEM(A5),PTRPSM1(PC)"MVHEX4,TIOTSEM+2(A5),PTRPSM2(PC) MVHEX4,TIOTADDR(A5),PTRPIA(PC) MVHEX1,TIOTSTAT(A5),PTRPST(PC) MVHEX1,TIOTPBSZ(A5),PTRPBZ(PC) PRINTPTRPOL*CTRAP8LEATIOTEL(A5),A5DBRAD7,CTRAP4RTS]:TTLANALUST.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALUST.AI*9********************************************************* SECTION0*%*USERSEMAPHORETABLE*USHDG1ENDLNLFDC.B'USERSEMAPHORETABLE'ENDLINEDC.B'--------------------'ENDLINEFDC.B'-TASKNAME-SESSIONSEMPHORENAMEUCNTXCNTTYPESEMAPHORES'ENDLINEUSHDG1EEQU*-1DS.W0*"* USER SEMAPHORE TABLE DETAIL LINE**USDLFLDUSHTNA,<''>,4,CTASKNAME(ASCII)$FLDUSHDTN,<''>,8,CTASKNAME(HEX)FLDUSHDSS,<''>,8,CSESSION&FLDUSHSNA,<''>,4,CSEMNAME(ASCII)$FLDUSHDSN,<''>,8,CSEMNAME(HEX)FLDUSHDUC,<''>,4,CUCNTFLDUSHDXC,<''>,1,CXCNTFLDUSHDTY,<''>,1,CTYPE!FLDUSHDSM1,<''>,4,CSEMAPHORESFLDUSHDSM2,<''>,8 USDLEEQU*-1DS.W0PAGE SECTION8*,****PRINTTHEUSERSEMAPHORETABLE**** XDEFUSTBLXREF.SRDBUF,USTBEG,PDSKERR*USTBLTST.LUSTBEG(A3)-BEQUSTBLRBranchifnousersemaphoretable+WANT#12,#2CHECKFORENOUGHLINESONPAGEPRINTUSHDG1PRINTTHEHEADING!LEARDBUF(PC),A4STARTOFBUFFER*RD#20,USTBEG(A3),(A4),PDSKERRGETHEADER CLR.LD20MOVE.WUSTNPAGE(A4),D2SIZEOFTABLE(INPAGES)LSL.L#8,D2CONVERTTOBYTES#CMP.L#MAXBUF,D2GREATERTHANMAX?BLE.SUSTBL2BRANCHIFNO#MOVE.L#MAXBUF,D2IFYES-USEMAXUSTBL2MOVE.LA4,D6$ADD.LD2,D6D6=ENDOFTABLEADDRESS,RDD2,USTBEG(A3),(A4),PDSKERR READANENTRY&MOVE.WUSTCENT(A4),D7MAXENTRYCOUNTBEQUSTBLRBRANCHIFNONE LEAUSTENTRY(A4),A5FIRSTENTRY*'USTBL4TST.WUSTUCNT(A5)TESTUSECOUNT"BEQUSTBLRSKIPENTRYIFNOTUSED*MVASC4,USTTNAME(A5),USHTNA(PC)TASKNAME*MVHEX4,USTTNAME(A5),USHDTN(PC)TASKNAME2TST.WUSTSESSN(A5)ISSESSIONINBINARY?<<012585BNE.SUSTBL5NO1OR.W#$30,USTSESSN+2(A5)SETLASTDIGITTOASCII7USTBL5MVASC4,USTSESSN(A5),USHDSS(PC)SESSION012585>>D-MVASC4,USTSNAME(A5),USHSNA(PC)NAME(ASCII)+MVHEX4,USTSNAME(A5),USHDSN(PC)NAME(HEX)$MVHEX2,USTUCNT(A5),USHDUC(PC)UCNT$MVHEX1,USTXCNT(A5),USHDXC(PC)XCNT$MVHEX1,USTTYPE(A5),USHDTY(PC)TYPE*MVHEX2,USTSEM(A5),USHDSM2(PC)SEMAPHORES!MVHEX4,USTSEM+2(A5),USHDSM2(PC) PRINTUSDL'LEAUSTEL(A5),A5ADDRESSOFNEXTENTRYSUB.W#1,D7DECREMENTCOUNTBEQ.SUSTBLRBRANCHIFDONECMP.LA5,D6TOOFAR?BGTUSTBL4NO,COUNTINUE USTBLRRTS;TTLANALUTIL.AI-Crash/Systemanalysis-DUMPANAL/SYSANALPAGE9**********************************************************INCLUDEFILE:ANALUTIL.AI*9*********************************************************%XDEFFMTLIN,CONVAORH,HEXBIN,CONVHEX4%XDEFFMTLIN,CONVAORH,HEXBIN,CONVHEX4 XDEFCONVHEX3,CONVHEX2,CONVHEX1(XDEFCONVDEC4,CONVDEC3,CONVDEC2,MOVEASC*.*MOVEONELINETOPRINTBUFFERINDUMPFORMAT**A0=ADDRESSOF16BYTESOFDATATOMOVE'*A1=ADDRESSOFPRINTLINE(80CHARS)*D0=PHYSICALADDRESS*D1=LOGICALADDRESS*FMTLINMOVEM.LD0-D2,-(A7)"MOVE.LA0,-(A7)SAVEDATAADDRESS&BSRCONVHEX3CONVERTPHYSICALADDRESS+MOVE.B#'',D2PUTBLANKIND2FORSPACING%MOVE.BD2,(A1)+BLANKBETWEENFIELDS MOVE.LD1,D0%BSRCONVHEX3CONVERTLOGICALADDRESSMOVE.BD2,(A1)+&MOVE.BD2,(A1)+BLANKSBETWEENFIELDS!MOVE.L#$10004,D12COUNTSIND1$FMTLIN1MOVE.W#4,D1CONVERT4WORDSFMTLIN2MOVE.W(A0)+,D0&BSRCONVHEX2PUT1WORDINPRINTLINE MOVE.BD2,(A1)+BLANKSEPARATORSUB.W#1,D1DECREMENTCOUNT BNEFMTLIN2'MOVE.BD2,(A1)+DOUBLEBLANKSEPARATORSWAPD1%SUB.W#1,D1HAS2NDHALFBEENMOVED?BEQFMTLIN1BRANCHIFNOMOVE.BD2,(A1)++MOVE.L(A7)+,A0GETSTARTINGADDRESSAGAINM  OVE.L#16,D18CHARACTERS%BSRMOVEASCMOVESAMEBYTESINASCII MOVE.BD2,(A1)+BLANKSEPARATOR&MOVEM.L(A7)+,D0-D2RESTOREREGISTERSRTSPAGE*%*CONVERTINPUT(MAYBEASCIIORHEX)* *INPUT:A0POINTSTOINPUTLINE.*A1POINTSTOLONGWORDWHERERESULTISSAVED***OUTPUT:CC=ZINPUTENDSWITHBLANKORCR*CC=NILLEGALCHARACTERFOUND*CC=GTINPUTENDSWITHCOMMA.*A0=0IFCRFOUND,ELSEPOINTSTONEXTCHAR*CONVAORHCLR.LD1 MOVE.LA0,D0TESTINPUTADDRESS BEQHEXBINR1BRANCHIFNOINPUT CLR.LD0$MOVE.L#3,D2COUNTASCIICHARACTERS)CONVAH2MOVE.B(A0)+,D1GETONECHARACTERCMP.B#'',D1ISITBLANK? BEQCONVAH2SKIPLEADINGBLANKSCMP.B#'$',D1IS1STCHARA$?@N[ ^M)BEQ.SHEXBIN4IFYES-MUSTBEHEXVALUEBRA.SCONVAH5*%CONVAH4MOVE.B(A0)+,D1GETNEXTCHAR.CONVAH5CMP.B#$21,D1ISITGREATERTHANBLANKBMI.SCONVAH8BRANCHIFNO#CMP.B#$7E,D1ISITINASCIIRANGE$BHI.SHEXBINRIIFNO-ILLEGALCHARLSL.L#8,D0SHIFTOUTPUTADD.LD1,D0ADDCURRENTCHAR&DBRAD2,CONVAH4GOBACKFORNEXTCHARCONVAH6MOVE.B(A0)+,D1 CMP.B#'',D1ISNEXTCHAREND?BHICONVAH6SKIPTOENDBRA.SHEXBIN8*CONVAH8TST.LD0BEQ.SHEXBIN8SWAPD15MOVE.B#'',D1FILLINRESTOFLONGWORDWITHBLANKSCONVAH9LSL.L#8,D0 ADD.BD1,D0DBRAD2,CONVAH9SWAPD1RESTOREORIGCHARACTERBRA.SHEXBIN8PAGE*#*CONVERTHEXINPUTTOBINARYVALUE* *INPUT:A0POINTSTOHEXNUMBER.*A1POINTSTOLONGWORDWHERERESULTISSAVED***OUTPUT:CC=ZINPUTENDSWITHBLANKORCR*CC=NILLEGALCHARACTERFOUND*CC=GTINPUTENDSWITHCOMMA.*A0=0IFCRFOUND,ELSEPOINTSTONEXTCHAR*HEXBINCLR.LD1 MOVE.LA0,D0TESTINPUTADDRESSBEQ.SHEXBINR1 CLR.LD0(HEXBIN2MOVE.B(A0)+,D1GET1INPUTCHARCMP.B#'',D1ISITBLANK?*BEQHEXBIN2BRANCHTOSKIPLEADINGBLANKSBRA.SHEXBIN5*(HEXBIN4MOVE.B(A0)+,D1GET1INPUTCHAR(HEXBIN5CMP.B#'0',D1ISITLESSTHAN1?*BMI.SHEXBIN8YES-GOLOOKFORSEPARATORCMP.B#'F',D1ISITHEXCHAR?&BHI.SHEXBINRIBRANCHIFILLEGALCHARCMP.B#'9',D1ISIT0-9BLS.SHEXBIN6BRANCHIFYES CMP.B#'@',D1ISITLEGALCHAR?BLS.SHEXBINRIBRANCHIFNOSUB.B#7,D1CONVERTA-F!HEXBIN6AND.L#$F,D1BINARYDIGIT!LSL.L#4,D0MULTIPLYBYSHIFTING ADD.LD1,D0 BRAHEXBIN4*$HEXBIN8CMP.B#'',D1ISITABLANK?BEQ.SHEXBINR2%CMP.B#',',D1ISFINALCHARACOMMA?BEQ.SHEXBINR1BRANCHIFYES!CMP.B#$D,D1ISFINALCHARACR?BEQ.SHEXBINR3BRANCHIFYES*ILLEGALCHARACTERHEXBINRINOT.WD1RTS*HEXBINR3LEA0,A0CRFOUND(HEXBINR2CLR.LD1ENDEDWITHBLANKORCR#HEXBINR1MOVE.LD0,(A1)SAVERESULTTST.WD1SETCONDITIONCODESRTSPAGE**CONVERTBINARYTOHEX*D0=BINARYVALUE(*A1=ADDRESSOFBUFFERTOSTORERESULT*CONVHEX4MOVE.LD0,-(A7)SWAPD0BSR.SCONVHEX2MOVE.L(A7)+,D0BRA.SCONVHEX2*CONVHEX3MOVE.LD0,-(A7)SWAPD0BSR.SCONVHEX1MOVE.L(A7)+,D0*CONVHEX2ROR.L#8,D0BSR.SCONVHEX1 ROL.L#8,D0*CONVHEX1ROR.W#4,D0AND.B#$0F,D0 CMP.B#9,D0BLS.SCONVHEXA ADD.B#7,D0CONVHEXAADD.B#$30,D0MOVE.BD0,(A1)+ ROL.W#4,D0AND.B#$0F,D0 CMP.B#9,D0BLS.SCONVHEXB ADD.B#7,D0CONVHEXBADD.B#$30,D0MOVE.BD0,(A1)+RTS***CONVERTBINARYTODECIMAL-4CHARACTERS*-CONVDEC4AND.L#$FFFF,D0NUMBERMUSTBESMALLDIVU#1000,D0GET1STDIGIT AND.B#$F,D0ADD.B#$30,D0CONVERTTOASCII!MOVE.BD0,(A1)+SAVE1CHARACTERSWAPD0***CONVERTBINARYTODECIMAL-3CHARACTERS*,CONVDEC3AND.L#$FFF,D0NUMBERMUSTBESMALLDIVU#100,D0GET1STDIGIT AND.B#$F,D0ADD.B#$30,D0CONVERTTOASCII!MOVE.BD0,(A1)+SAVE1CHARACTERSWAPD0  ***CONVERTBINARYTODECIMAL-2CHARACTERS*+CONVDEC2AND.L#$FF,D0NUMBERMUSTBESMALLDIVU#10,D0SEPARATEDIGITS AND.B#$F,D0ADD.B#$30,D0CONVERTTOASCIIMOVE.BD0,(A1)+SAVE1STCHARSWAPD0GET2NDCHARADD.B#$30,D0CONVERTTOASCII#MOVE.BD0,(A1)+SAVE2NDCHARACTERRTSPAGE*!*MOVEASCIIDATATOPRINTBUFFER*D1=NUMBEROFCHARACTERS*A0=ADDRESSTOMOVEFROM*A1=ADDRESSTOMOVETO*)MOVEASCMOVE.B(A0)+,D0GETONECHARACTER+CMP.B#$1F,D0ISITLESSTHANPRINTRANGE?BLS.SMOVEASC2BRANCHIFYES.CMP.B#$7B,D0ISITGREATERTHANPRINTRANGE?BLS.SMOVEASC4BRANCHIFNO7MOVEASC2MOVE.B#'.',D0REPLACEUNPRINTABLECHARWITH.1MOVEASC4MOVE.BD0,(A1)+STORECHARINPRINTBUFFSUB.W#1,D1DECREMENTCOUNT$BNEMOVEASCLOOPBACKFORNEXTCHARRTSPAGE***SUBROUTINETOCOMPUTETIMEOFDAY102684*ENTERA3=POINTERTOSYSPAR*EXITD0=TIMEOFDAY*XREF.SNSE,TIME_LEFT,MIDNIGHT TIMEODEQU*MOVE.LNSE(A3),D0SUB.LTIME_LEFT(A3),D0SUB.LMIDNIGHT(A3),D0BCLR.L#31,D0RTSPAGE*%*SUBROUTINETOCONVERTTIMETOASCII*XDEFCONVTIME*CONVTIMEDIVU#1000*60,D0SWAPD0 CLR.LD3MOVE.WD0,D3SECONDS*1000DIVU#1000,D3SECONDS CLR.WD0SWAPD0HOURS*60+MINUTES DIVU#60,D0 MOVE.LD0,D2SWAPD2MINUTESBSRCONVDEC2CONVERTHOURSMOVE.B#':',(A1)+ MOVE.WD2,D0BSRCONVDEC2CONVERTMINUTESMOVE.B#':',(A1)+ MOVE.WD3,D0BSRCONVDEC2CONVERTSECONDSRTSPAGE**CONVERTDATETOASCII**D0=DATE(GREGORIANFORM)(*A1=ADDRESSOFBUFFERTOSTORERESULT*XDEFCONVDATECONVDATEMOVE.LD0,D1SAVEDATE)LSR.L#8,D0MOVEMONTHTOLOW-ORDERBITSBSRCONVDEC2CONVERTMONTH*MOVE.B#'/',(A1)+SEPARATEMONTHFROMDAYMOVE.LD1,D0RESTOREDATEBSRCONVDEC2CONVERTDAY)MOVE.B#'/',(A1)+SEPARATEDAYFROMYEARMOVE.LD1,D0RESTOREDATE$SWAPD0MOVEYEARTOLOWORDERBITSSUB.W#1900,D0BSRCONVDEC2CONVERTYEARRTSPAGE**DATECONVERSIONS* *11/12/79**CALLINGINFO:**PUTINPUTDATEINTOD0*CALLROUTINE:!*DATEGO--GREGORIANTOORDINAL!*DATEOG--ORDINALTOGREGORIAN*RESULTSUPPLIEDIND0 *ALLOTHERREGISTERSPRESERVED*1*DATEFORMATS:ALLFIELDSBINARY--USELONGD0**GREGORIAN--YYYYMMDD*JULIAN--YYYYDDDD)*ORDINAL--DAYNUMBER(1JAN1980=1)***NON-LEAPDAYSBEFORETABLE*rrBUILDS SA%rrCONFIG LFrrCONFIG PF rrCONFIG SAd brr" CONNECT AFgg rrCONNECT LFpprrCONNECT1SAyyeRrrCONNECT2SATrrCOPY AF ; ;rrCOPY LF D DrrOPY SA M M:rr'BACKUPIDNT4,1VERSAdosBACKUPutility LLEN120<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*MODIFICATIONHISTORY-BACKUP**REVISIONCODE011185*9*DECIMALVALUEOFTHESECTORNUMBERTOBEDISPLAYEDWHEN#*PRINTINGDIFFERENCESINASECTOR.*:*WHENDOINGABACKUPWITH51/4FLOPPIES,THEDEFAULTWAS9*FILE-BY-FILE.INITINWASCHANGEDTOCHECKINFLOPBEFORE*SETTINGAFLAG.**REVISIONCODE010485*<*COPYINGAFOREIGNDISKWITHACONTROLLERCAPABLEOFHAVING>*ALTERNATETRACKSHADAPROBLEM.BACKUPDIDNOTCONSIDERTHAT=*FOREIGNDISKSDIDNOTHAVESATANDCONFIGURATIONSECTORSON<*DISKSTHATWEREFOREIGN,BUTHAPPENEDTOHAVETHEBYTESET<*THATINDICATEDALTERNATESWEREAVAILABLE.THEREFORE,ADDI-5*TIONALCHECKSWEREINSERTEDFORFOREIGNINPUTDISK.**REVISIONCODE103184*;*INSTALLEDTHEABILITYOFBACKUPTOONLYCOPYTHATPORTION8*OFADISKTHATHASDATAONIT,DURINGATRACK-BY-TRACK5*OPERATION.THESATISSEARCHEDONTHEINPUTDISKTO*DETERMINETHIS.*6*REVISIONCODE0921844(allchangesmarked'ALTTRK')*7*ACHANGEWASINSTALLEDTOHAVEBACKUPBEABLETOTAKE=*ADVANTAGEOFSOMECONTROLLER'SABILITYTOMAPBADTRACKSTO9*ALTERNATES.THREECHANGESWEREMADETOBACKUPFORTHIS:?*1:TRACK-BY-TRACKBACKUPANDVERIFYWILLPROCEEDUNTILEITHER;*ENDOFVOLUMEISDETECTED,ORINTHECASEOFANALTERNATE;*SECTOR-CAPABLECONTROLLER,THEALTERNATEAREAISREACHED.=*2:FORALTERNATESECTOR-CAPABLECONTROLLERS,THESLTOFTHE9*INPUTDISKWILLNOTBECOPIEDTOTHEOUTPUTDISK.(EACH*DISKHASITSOWNSLT.)=*3:IFTHECONTROLLERSFORTHETWODISKSAREDIFFERENT,THEN;*THECONFIGURATIONSECTORSFOREACHAREDIFFERENTANDWILL*NOTBECOPIED.**REVISIONCODE0711844**HELPOPTIONADDED*#*UTILITYIDENTIFIESITSELFBYNAME*A*BUFFERLENGTHFORFETCHDEVICEMNEMONICSCALLINCREASETO1000.@*THISPREVENTSAPROBLEMSIMILARTOTHEONEDESCRIBEDINSPR8973:5C9K#S0[?cOkYsK{PC+=>>ZFEL;D_C>>:C E<6#?;*FROMOCCURINGWHENTHENUMBEROFDISKDEVICESEXCEEDS25.*B*LOGICWASADDEDTOCHECKFORREADANDWRITEERRORSINTHEVERIFYA*ROUTINE.THISCORRECTSAPROBLEMWHICHCAUSEDGARBAGEDATALEFTA*OVERFROMAPREVIOUSREADTOBECOMPAREDAGAINSTGOODDATAWHEN&*ABADSECTORWASENCOUNTERED.SPR711*@*THEERRORCODEIND0ISRESTOREDUPONEXITFROMC_EM_PGM.THIS>*FIXESAPROBLEMWHICHCAUSEDBACKUPTOHANGWHENTHEDOORON*ONEOFTHEDRIVESWASOPEN*?*ATESTONTHEFIRSTBYTEOF(A1)WHICHWASSUPPOSEDTODETECT<*ANULLOUTPUTFIELDWASCAUSINGBACKUPTOABORTWITHABUS?*ERROR.ACMP.L#0,A1WASADDEDTODETECTANULLOUTPUTFIELD.C*THEOLDINSTRUCTIONWASKEPTTODETECTANOUTPUTFIELDCONTAINING*ONLYACOMMA. *MARKFOGLE**REVISIONCODE0327844*=*CORRECTEDTHEPROBLEMWHERETHEUSEOFTHEDEFAULTSFORTHE)*HARDDISKSCAUSEDTHEPROGRAMTOABORT.*BACKUP,,#PR1 *NOWWORKS.****REVISIONCODE0313844*<*CORRECTEDTHEPROBLEMWHERETHELASTSECTORSREADFROMTHE?*MASTERDISKWERENOTTRANSFERREDTOORVERIFIEDONTHEBACKUP*DISK.*PEGGYHASSETT;******************************************************************BACKUPCOMMAND******2*THISCOMMANDWILLCREATEADUP" LICATEDISKVOLUME0*ORCOPYFILESFROMDISKTOANOTHERORTHESAME(*SELECTABILITYEXISTWITHOPTIONA&R2*THEREISDATESELECTION,FILESELECTIONORUNDER*USERCONTROLSELECTION0*YOUCANNOTREORGANIZETOAHARDDISK(USETHE1*INITCOMMANDANDTHENBACKUPWITHTHEAOPTION)*=*************************************************************   PAGE* OPTIONS AND MODIFIERS:D*A-APPENDOPTION.FILESAREBACKEDUPFROMTHESOURCEDISKTOTHE3*DESTINATIONDISK.THISISTHEDEFAULTOPTIONWHEN"*THEBACKUPINVOLVESAHARDDISK.@*Y-THEYMODIFIERCOMESINTOPLAYWHENAFILETOBEBACKEDUP3*ALREADYEXISTSONTHEOUTPUTDISK.THEYMODIFIER**CAUSESALLSUCHFILESTOBEOVERWRITTEN.@*N-THENMODIFIERCOMESINTOPLAYWHENAFILETOBEBACKEDUP3*ALREADYEXISTSONTHEOUTPUTDISK.THENMODIFIER(*CAUSESNOSUCHFILETOBEOVERWRITTEN.A*S-THESMODIFIERALLOWSTHEUSERTOENTERASTARTINGPOINTIN4*THEINPUTVOLUMEDIRECTORYFORTHEBACKUP.THISIS4*ESPECIALLYUSEFULIFABACKUPISABORTED,SINCEIT<*PREVENTSONEFROMHAVINGTOSTARTOVERFROMTHEBEGINNING.@*P-THEPMODIFIERSPECIFIESTHATALLUNUSEDSPACEWITHINDATA7*BLOCKSISTOBERECLAIMED,THEREBYGENERATINGTIGHTLY6*PACKEDFILESONTHEOUTPUTDISKANDMOREFREESPACE./*THEBACKUPWILLPROCEEDMORESLOWLY,HOWEVER.I*R-REORGANIZEOPTION(OUTPUTDISKMUSTBEAFLOPPY).THEOUTPUTFLOPPY9*ISFIRSTINITIALIZED,FOLLOWEDBYANOPTIONACOPY.THE<*EFFECTOFTHISISTOCONSOLIDATEAVAILABLEDISKSPACEINTO<*ONELARGEBLOCKATTHEENDOFTHEDISK.THEINITIALIZATION<*THATTAKESPLACEDOESNOTDOANYFORMATTINGORVALIDATION,;*SOTHEFLOPPYMUSTHAVEBEENINITIALIZEDPREVIOUSLYUSING*THEINITUTILITY.@*P-THEPMODIFIERSPECIFIESTHATALLUNUSEDSPACEWITHINDATA7*BLOCKSISTOBERECLAIMED,THEREBYGENERATINGTIGHTLY6*PACKEDFILESONTHEOUTPUTDISKANDMOREFREESPACE./*THEBACKUPWILLPROCEEDMORESLOWLY,HOWEVER.K*U-TRACK-BY-TRACKOPTION(DISKSMUSTBEOFEQUALSIZEORBOTHFLOPPIES).5*THEINPUTDISKWILLBECOPIEDTRACK-BY-TRACKTOTHE9*OUTPUTDISK.THISISTHEDEFAULTOPTIONWHENBOTHDISKS*AREFLOPPIES.H*C-THECMODIFIERSPECIFIESTHATIFREADORWRITEERRORSOCCURDURING8*THEBACKUP,THEPROGRAMSHOULDCONTINUEFROMTHEPOINT-*BEYONDTHEERROR(RATHERTHANTERMINATING).G*V-VERIFYOPTION(DISKSMUSTBEOFEQUALSIZEORBOTHFLOPPIES).THE9*INPUTANDOUTPUTDISKSWILLBECOMPARED,BYTEFORBYTE,(*ANDANYDISCREPANCIESWILLBEPRINTED.F*T-THETMODIFIERTRUNCATESTHEVERIFYLISTINGSOTHATIFMORETHAN6*ONEDISCREPANCYISFOUNDINAGIVENSECTOR,ONLYTHE$*FIRSTDISCREPANCYWILLBEPRINTED.F*B-BACKUPOPTION(DISKSMUSTBEOFEQUALSIZEORBOTHFLOPPIES).AN5*OPTIONUBACKUPISPERFORMED,ANDISFOLLOWEDBYAN%*OPTIONVBACKUPTOVERIFYTHEDATA.H*C-THECMODIFIERSPECIFIESTHATIFREADORWRITEERRORSOCCURDURING8*THEBACKUP,THEPROGRAMSHOULDCONTINUEFROMTHEPOINT-*BEYONDTHEERROR(RATHERTHANTERMINATING).F*T-THETMODIFIERTRUNCATESTHEVERIFYLISTINGSOTHATIFMORETHAN6*ONEDISCREPANCYISFOUNDINAGIVENSECTOR,ONLYTHE$*FIRSTDISCREPANCYWILLBEPRINTED.  PAGE* USER # OF OUTPUT DISK:G*U&BOPTIONS-THEUSER#OFTHEOUTPUTDISKWILLBETHESAMEASTHE*USER#OFTHEINPUTDISK. *ROPTION-H*IFTHEUSERLOGGEDONASUSER#0-THEUSERWILLBEPROMPTEDTOENTER:*AUSER#FORTHEOUTPUTDISK.IFHEDEFAULTS(JUSTGIVES5*ACR),HISDEFAULT(NOTLOGON)USER#WILLBEUSED.H*IFTHEUSERLOGGEDONASOTHERTHANUSER#0-HISDEFAULT(NOTLOGON)*USER#WILLBEUSED.  0* USER # AND CATALOG OF FILES FOR A & R OPTIONS:H*INPUT-USER#&CATALOGDEFAULTTOTHE'USE'VALUESIFNOTSPECIFIED.8*EITHERORBOTHMAYBESPECIFIED.EITHERORBOTHMAYBE<*AFAMILYSPECIFICATION.THECATALOGFIELDMAYBEPARTIALLY*WILD(E.G.,VOL:*.AB*).I*OUTPUT-USER#&CATALOGDEFAULT# TOTHE'USE'VALUESIFNOTSPECIFIED.8*EITHERORBOTHMAYBESPECIFIED.EITHERORBOTHMAYBE:*AFAMILYSPECIFICATION.THECATALOGFIELDMAYNOT(!)BE6*PARTIALLYWILD(E.G.,VOL:*.AB*).IFAFIELDISWILD8*ONTHEINPUTSIDE,ITMAYNOTBESPECIFIEDNON-WILDON,*THEOUTPUTSIDE(E.G.,BACKUPV1:*,V2:10).  7* ACCESS CODES FOR DEVICES/FILES UNDER VARIOUS OPTIONS: *DISKFILES*INPUTOUTPUTINPUTOUTPUT#*-------------------------------- *VPRPREW *U,BPREREW*APRPRPREREW*RPREREWPREREW*K*(NOTE:WEORIGINALLYCONSIDEREDADDINGEXCLUSIVEWRITEFORSEVERALOFTHEK*INPUTDISKSANDFILESTOKEEPTHEMFROMBEINGMODIFIEDDURINGTHEBACKUP,*BUTTHEREWERETWOPROBLEMS:B*1:IFTHESYSTEMDISKISASSIGNEDFOREXCLUSIVEWRITE,THEERROR;*MESSAGEHANDLERWON'TBEABLETODOITSTHINGCOMPLETELY;D*2:IFTHEINPUTFILEISASSIGNEDFORANYKINDOFWRITEACCESS,ITS2*CHANGEDATEISUPDATED--THAT'SNOTAGOODIDEA.)PAGE3****************************************************INCLUDESOFSYSTEMFILES**INCLUDE9995.&.FME.EQ*INCLUDE9995.&.IOE.EQ*INCLUDE9995.&.TR1.EQ*INCLUDE9995.&.EXE.EQ3***************************************************NOLISTINCLUDE9995.&.FME.EQINCLUDE9995.&.IOE.EQINCLUDE9995.&.TR1.EQINCLUDE9995.&.EXE.EQLISTPAGE2*******************************************************DATASEGMENT(DSEG)****1******************************************************EQUATEAREA****$STKLENEQU100STACKLENGTHINWORDS*COMMSIZEEQU160INPUTCOMMANDBUFFERSIZE DSKLUIEQU1(DSKLUOEQU2DISKLOGUNITASSIGNOUTPUT!LISTLUEQU3LISTINGLOGICALUNIT6REORGLUEQU7REORGANIZELOGICUNITFORINPUTDISKETTETSKNAMEQU'BACK'MYTASKNAME7SECLENEQU256#OFBYTES/SECTORONFLOPPYORHARDDISKBDEVLENEQU1000LENGTHOFBUFFERUSEDONFETDEVCALL.ALLOWSUPTO6*100DISKDEVICES-PREVENTSANERRORSIMILARTOTHAT&*DESCRIBEDINSPR897-***071184***,FSECTRAKEQU13#OFSECTORS/TRACKONFLOPPY/HSECTRAKEQU64#OFSECTORS/TRACKONHARDDISK"IYEAREQU80STARTOFNOMINALYEARCENTURYEQU1900STARTOFBASE@SECT2048EQU2048#OFBITSINA256BYTESECTOROR#SECTORSIN5BIGFLOPEQU2552UPPERLIMITFORAFLOPPYSIZE010485 *ADOUBLESIDED8INCHDISKETTETST.BBLIP(NOTE:ACCEPTS.SOR.L;*IFTHEN.SDEFAULTIS.S)* IF_SETMACRO TST.B\1 IFC'\0',''IFTHEN.SENDC IFNC'\0',''IFTHEN.\0ENDCENDM B**********IFFLAGISNOTSETMACRO.TESTSFORFLAGOFFCONDITION.*;*IF_NOT_SETBLIP---->TST.BBLIP(NOTE:ACCEPTS.SOR.L;*IFTHEN.SDEFAULTIS.S)* IF_NOT_SET MACRO TST.B\1 IFC'\0',''IFTHEN.SENDC IFNC'\0',''IFTHEN.\0ENDCENDMPAGEM**********************************************************************************DATASECTION****M***************************************************************************** PBAEQU* <**************************************************************REVISIONINFO--MUSTBEATTOPOFPROGRAM<************************************************************ !DC.B'011185'DATELASTMODIFIED(DC.B''BL# ANKINDICATESCLEANASSEMBLYDC.B'4'MAJORREVISIONNUMBER <*************************************************************USERSTACKAREA<************************************************************ DS.WSTKLEN PROGSTKEQU* <************************************************************)*COMMLINISTHEAREATHECOMMANDLINEIS**READINTOWHENTHISPROGRAMISCALLEDIN<************************************************************ 8DC.B''HOLDSINPUT&OUTPUTDEVICESIFNOTSPECIFIED.>COMMLINCOMLINECOMMSIZETHEACTUALCOMMANDLINEINPUTBUFFER. B******************************************************************8*EQUATESFORVERSION&REVISIONFORDISKINITIALIZATIONB****************************************************************** NEXTWBEVIDVNODC.B'03' DC.B'00'PAGE5******************************************************+***IOSPARAMETERTABLEFORDISKREADS****5***************************************************** NEXTWB,IOS.RDSKIOREAD,IOPWAT+IOPBLK+IOPRAN,DSKLUI 9**********************************************************-****IOSPARAMETERTABLEFORDISKWRITES****9********************************************************* NEXTWB%IOS.WDSKIOWRIT,IOPBLK+IOPRAN,DSKLUOWDSKSZEQU*-WDSKIOS 5******************************************************'*IOSPARAMETERTABLETOREAD/WRITESLT*5*****************************************************NEXTWBSLTRDWTEQU*<> 3****************************************************IOSPARAMETERTABLE(*SETUPIOS(ERR0R-LOG)PARAMETERBLOCK3*************************************************** NEXTWBOUT6IOSDC.WIOWRITDC.W0DC.B0 DC.BLDFLUNDC.B0DC.B0DC.L0DC.L0DC.L0DC.L0DC.L0 NEXTWB&IOS.OUT6IIOWRIT,IOPIMG+IOPWAT,LDFLUN  C*******************************************************************8*FHSPARAMETERTABLEFORCHANGELOGICALUNITASSIGNMENT5*CHANGEISFROM6TO3-SENDSOURCEISLUAINMASK*ANDRECEIVEISLUBINMASK4*LU3ISUSEDF0RLISTINGANDLU6FORERR0R/LOGGING*4*PARAMETERTABLEFORCHANGELOGICALUNITASSIGNMENT,*ISDIFFERENTFROMSTANDARDPARAMETERTABLE?*************************************************************** NEXTWB.LU3AFHSDC.WFHCHLUCOMMAND(CHANGELUASSIGN)DC.WFOPKEPOPTIONKEEPASSIGNDC.B0STATUSDC.BLDFLUNSENDLUNUMBERDC.BLISTLURECEIVELUNUMDC.B0RESERVED&DC.L0TASK-ID(0MEANSUSEYOURSELF)(DC.L0SESSION#(0MEANSUSEYOURSELF) 1*************************************************&*PARMBLOCKFORVOLUMEMSGFOROUTPUT1************************************************* NEXTWBIOS.INP5IOREAD,IOPFOR,CDFLUN  +*******************************************  NEXTWBIOS.INP9IOREAD,IOPFOR,CDFLUN  9*********************************************************'*PARAMETERBLOCKTOOBTAINUSERNUMBER9********************************************************* NEXTWBIOS.INP6IOREAD,IOPFOR,CDFLUN -********************************************* *OKTOCOPYRESPONSEPARMBLOCK-********************************************* NEXTWBIOS.INP4IOREAD,IOPFOR,CDFLUN *******************************************-*PARMBLOCKOUTPUTWITHINPUTFORDEVIC$ EMSG******************************************* NEXTWBIOS.INP1IOREAD,IOPFOR,CDFLUN )******************************************PARMBLOCKFORRETRYRECEIVE)***************************************** NEXTWBIOS.INP3IOREAD,IOPFOR,CDFLUN #************************************SETUPIOSFORLISTINGLU3*IOSPARMTABLE!********************************* NEXTWB,IOS.OUT3IOWRIT,IOPASC+IOPFOR+IOPWAT,LISTLU )*****************************************?*LU3FHSISPARMTABLEFORLU3WHICHISUSEDFOROUTPUTLISTING******************************************* NEXTWBFHS.LU30,0,LISTLU ;***********************************************************:****DSKFHSISTHEPARAMETERTABLEFORTHEFHSINPUTFILE*SOURCEDISKETTE;*********************************************************** NEXTWBINFHSDC.WFHASGNCOMMANDDC.WFOPPROPTIONSDC.B0STATUS DC.BDSKLUILOGICALUNITNUMBERDC.L$20202020VOLUMENAMEDC.W0USERNUMBERDC.L$20202020CATALOGNAMEDC.L$20202020DC.L$20202020FILENAMEDC.L$20202020DC.W$2020EXTENSIONDC.W0RESERVEDDC.B0WRITEPROTECTCODEDC.B0READPROTECTCODEDC.W0LOGICALRECORDLENGTH0DC.L0CONTIGUOUSFILESIZE/DIRENTRYPOINTER 1*************************************************%*FHSPARAMETERBLOCKFORDISKOUTPUT1************************************************* NEXTWBOUTFHSDC.WFHASGNCOMMANDDC.WFOPPROPTIONSDC.B0STATUSDC.BDSKLUOLOGICALUNITNUMDC.L$20202020VOLUMENAMEDC.W0USERNUMDC.L$20202020CATNAMEDC.L$20202020DC.L$20202020FILENAMEDC.L$20202020DC.W$2020EXTENSIONDC.W0DC.B0WRITEPROTCODEDC.B0DC.W0DC.L0CONTFILESIZE OUTFHSSZ EQU *-OUTFHS5*FOLLOWINGFHSPARAMETERSFORSHAREDSEGMENTREQUEST(DC.L0SEGMENTSTARTINGLOGICALADDRESS&DC.L0SEGMENTENDINGLOGICALADDRESSDC.L0SHAREDSEGMENTNAME =*************************************************************0*PARAMETERBLOCKFORFETCHDIRECTORYENTRYCALL=************************************************************* NEXTWBDIRFHSDC.WFHFDENCMDDC.W0OPTIONSDC.B0STATUSDC.BDSKLUILOGUNITDIRFHSVDC.L$20202020VOLDC.W-2USERNUMDC.L'****'CATALOGUE DC.L'****'DC.L'****'FILE DC.L'****'DC.W'**'EXTDC.W0DC.B0DC.B0DC.W0,DC.L0WILLHOLDADDRESSOFDIRENTRYBLOCK ;***********************************************************&*DIRECTORYENTRY(DIR)DATASTRUCTURE-*THEDIRECTORYENTRYISREADINTOTHISBLOCK;*********************************************************** NEXTWBDIRBLKDS.BFDLEN :**********************************************************,*PARAMETERTABLEFORFETCHDEVICEMNEMONICS7******************************************************* NEXTWBFETDEVDC.WFHFDMNCMDDC.WFOPFRAOPTIONSDC.W0STATUS&RESERVEDDC.L0BUFFERBDC.LDEVLENBUFFERLENGTH-ALLOWSUPTO100DEVICES-SEESPR897****071184*** .**********************************************,*PARAMETERTABLEFORGETSEGMENTFORBUFFER.********************************************** NEXTWBBUFPAR:DC.L0,0TASK(0=SELF)-DC.WSGOPPAOPTIONS:RETURNPHYSICALADDRESSDC.W0(RAMSEGMENT)DC.L'BUFR'NAMEOFSEGMENTDC.L0BUFSIZDC.L0LENGTHOFBUFFER 3***************************************************$*DUMMYPARAMETERBLOCKFOREDITFILE3*************************************************** FHS.DUMMYPAGE9**************************************************************WORKAREA****9**********************************************************STSKNAMDC.L0SAVETASKNAMESESNUMDC.L0SAVESESSIONNUM#VOLNAMDC.L0SAVEVOLDEFAULTNAMEDC.W0/USERNUMDC.W0DEFAULTUSERNUM(16BITBINARY)%CATNAMDC.L0,0DEFAULTCATAGORYNAME REGD6DC.L0COMMANDLINELENGTHREGD7DC.L0LOGICALUNI$ TMASKADDREGDS.L1ADDRREG0DS.L1TERMIDATLOGONTIMEDC.W0TOPHALFREG2ADDREG2DC.W0LOGONUSERNUMDS.L4REGISTERSA3-A6*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *1/24/84DLYTIMEEQU500/*DELAYTIMEFORVOLUMEERRORLOOPCOUNT(VELC)VELC: DC.B$20 DC.B$00*VOLUMEERRORLOOPCOUNT1*INSOMECASESEXECUTINGCODEISREADYTOACCESS/*AVOLUMEBEFOREITHASBEENRECOGNIZEDBYTHE0*SYSTEMSOTHISLOOPCOUNTHASBEENIMPLEMENTED1*TOGIVETHESYSTEMTIMETORECOGINZETHEVOLUME)*THEUPPERBYTEISTHELOOPCONTROLBYTE%*ANDTHELOWERBYTEISTHEWORKBYTE* *1/24/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'SOUTCATDS.L2SAVEOUTPUTCATALOGNAME+SAVEPATTDC.W0PATTERNOFOPTIONSSELECTED/TABDATEDC.B''DATEFROMSYSTEM(DATE&TIME)"OPTNOADC.B0DONOTUSEAOPTIONSRFLAGDC.B0REORGANIZEFLAG!UFLAGDC.B0COPYALLTRACKSFLAG!BFLAGDC.B0COPYANDVERIFYFLAGVFLAGDC.B0VERIFYFLAG AFLAGDC.B0APPENDTODISKFLAGSFLAGDC.B0RESTARTFLAG+CFLAGDC.B0CONTINUEUOPTWITHERRORFLAG(NFLAGDC.B0DONOTDELETEEXISTINGFILE,YFLAGDC.B0OVERRIDEDUPLICATEMESSAGEFLAG:TFLAGDC.B0TRUNCATEVERIFYFLAG(ONEMESSAGE/SECTORMAX):PFLAGDC.B0PACKDATAONOUTPUTDISK(A&RBACKUPSONLY)0HFLAGDC.B0PRINTHELPMESSAGE-***071184***&FLAG1DC.B01STTIMEFLAGFORPRTMSG)DEVOUTDC.B0DEVICEINDICATEDFOROUTPUTDEVINDC.B0DEVICEFORINPUTKUSN_CATDC.B0SETIFUSER#ORCATALOGSPECIFIEDININPUTOROUTPUTFIELDS.AFAMUSNDC.B0SETIFOUTPUTFILESGETSAMEUSER#ASINPUTFILES.GFAMCATDC.B0SETIFOUTPUTFILESGETSAMECATALOGNAMEASINPUTFILES.ENOIOFLAGDC.B0SETIFNOINPUTANDNOOUTPUTFIELDSINCOMMANDLINE.5INPNULLDC.B0SETIFNOINPUTFIELDINCOMMANDLINE.3SIZFLAGDC.B0SETIFOUTPUTDISKLARGERTHANINPUT INFORNDC.B0FOREIGNINPUTDISK"OUTFORNDC.B0FOREIGNOUTPUTDISK%IOTYPEDC.B0INPUTOROUTPUTPOINTER%ISENDDC.B10ENDFLAG0MEANSATEND,ONESECTDC.B0'SATISJUSTONESECTOR'FLAG'INHARDDC.B0'INPUTISHARDDISK'FLAG)OUTHARDDC.B0'OUTPUTISHARDDISK'FLAG;INALTDC.B0INPUTDISK'SALTSECTORBYTEFROMVID<>+INFLOPDC.B0INPUTDISKISAFLOPPY010485#PACKITDC.B0'PACKTHISFILE'FLAG>VIDREQDC.B0'VIDENTRIESREQUIRED'FLAG:DISALLOWDEFAULTING'*ONOUTPUTVOLUME,USER#,DESCRIPTION."DATESWDC.B0DATESELROUTSWITCH%DATEFLAGDC.B0DATESELECTACTIVATED%FILEFLAGDC.B0SELECTFILEACTIVATED!FOKFLAGDC.B0FILESELECTEDFLAG!DOKFLAGDC.B0DATESELECTEDFLAG$CRDERRDC.B0COPTIONFLAGREADERR&CWRTERRDC.B0COPTIONFLAGWRITEERRNEXTWBBALTLASTDC.L0DISK'SLASTWRITABLESECTOR(ALTSECONLY)<>8LASTDATADC.L0LASTSECTORONDISKCONTAINGDATA103184;SECTNUMDC.L13SECTORS/TRACK(CHANGEDTO64FORHARDDISK);SAVINPDC.L0SAVELOCATIONOFINPUTFIELDINCOMMANDLINE.BUFFDEVDS.BDEVLENHOLDSDEVICEMNEMONICSTABLEWHENFETCHED./*HOLDS100DEVICES-SEESPR897***071184****NEXTWBEBUFFMULTDS.BSECLENBUFFERUSEDINCODEFORMULTIPLEOUTPUTDEVICES.*!*VIDDIAGNOSTICPATTERNFORINITNEXTWB5DIAGPAT1 DC.L $0F1E2D3C,$4B5A6978,$8796A5B4,$C3D2E1F0-DC.L$0F1E2D3C,$4B5A6978,$8796A5B4,$C3D2E1F0-DC.L$F1F2F4F8,$F9FAFCFE,$FF7FBFDF,$EF6FAFCF-DC.L$4F8F0F07,$0B0D0E06,$0A0C0408,$04020100  1*BITSONTABLEUSEDTOSETLASTBYTEINSATTABLENEXTWB$BITSONDC.B$FF,$7F,$3F,$1F,$F,7,3,1 5*BIT1&BIT2TABLESUSEDTOSETINITIALBYTESINSATNEXTWB#BIT1DC.B0,$C0,$E0,$F0,$F8,$FC,$FFNEXTWB'BIT2DC.B0,$80,$C0,$E0,$F0,$F8,$FC,$FEPAGE.***********************************************"****PRINTHEADERS&MESSAGES****.********************************************** NEXTWBVERSIONDC.B'BACKUP0111854' V_ENDEQU*-17****THISISTHEOUTPUTFORTHEHOPTION***071184***HELPMSGDC.B''=DC.B'Commandformat:BACKUP[,]'#DC.B'[,][;]' DC.B''DC.B'where:' DC.B''CDC.B'inputfieldmaybeavolumename(followedbyanoptional'DC.B'usernumberand'CDC.B'optionalcatalog)oradevicename.Defaultisthelowest'DC.B'numbereddisk'DC.B'device.' DC.B''DDC.B'outputfieldmaytakeonanyofthevalueslegalforinput'DC.B'field.Defaultis'1DC.B'thesecondlowestnumbereddiskdevice.' DC.B''FDC.B'listfieldisafileordevicenametowhichtheoutputfrom'DC.B'theutility'>DC.B'willbesent.Iftheinputandoutputfieldsarenot'!DC.B'specified,thelistfield'DC.B'P-Allunusedspacewithinindexedsequentialfiles'DC.B'willbereclaimed.' DC.B''>DC.B'R-Reorganizeoption(destinationmustbefloppy)-'DC.B'consolidatesall'FornextpageorNtoabort-'***0711184***QUERYEEQU*-1***071184***$CLSDC.B27CODEFORCLEARINGSCREEN DC.B'X'#DESCMSGDC.B'THEOUTPUTISVOL='DESCVDC.B'' DC.B''DC.B'USER#='DESCUSNDC.B'' DC.B''DC.B'DESC='DESCDESCDC.B''DESCMSGE EQU *-1*NEXTWBCOPMDC.B'COPYFROMDEVICE'#COPMD1DC.L''HOLDSINPUTDEVICE.DC.B'TODEVICE'$COPMD2DC.L''HOLDSOUTPUTDEVICE.DC.B'(Y/N)?' COPMEEQU*-1*NEXTWBVM1DC.B'SECTOR$'<<011185 VMSDC.B'' DC.B''VMDDC.B''011185>> VM1EEQU*-1*VM2DC.B'OFFSET' VM21DC.B'' DC.B'DR0'VMO1DC.B'DR1' VMO2DC.B'' DC.B''VMO11DC.B'' DC.B''VMO21DC.B'' VM2EEQU*-1*NEXTWBDIRMSGEQU*STARTOFDIRMSG%VOLPRTDC.L''VOLUMENAMEGOESHERE DC.W':'L1USNDC.L0USERNUM DC.W'.'L1CATDC.L''CATALOGUE DC.L'' DC.W'.'L1FILDC.L''FILENAME DC.L'' DC.W'.'L1EXTDC.W''EXTENSIONDIRMSGLEQU*-DIRMSGNEXTWB*DUPMSGDC.B'DUPLICATEFILE-'* COPOKEQU*DC.B'OKTOCOPY(Y/N/Q)?'"COPOKBDS.B55HOLDSTHEFILENAME.*NEXTWB;CONTM2DC.B'REPLACEOUTPUTDISKWITHNEWINITIALIZEDDISK'DC.BCR,LFCARRRET;DC.B'ENTERTHENEWVOLUMEWHENREADYTOPROCEED(VOLN:)'CONTM2EEQU*-1*NEXTWB3CONTM3DC.B'WEARESWITCHINGTOTHEAPPENDOPTION' DC.BCR,LF2DC.B'ISYOURDISKPROPERLYINITIALIZED(Y/N)?'CONTM3EEQU*-1*NEXTWB7USNCATDC.B'ERROR--USER#&CATALOGNOTALLOWEDWITH'%DC.B'TRACK-BY-TRACKCOPYORVERIFY'USNCATEEQU*-1*&***************************************>LINECOPAM,*0LINEASM,*2LINEUSM,*#LINEVSM,*4LINEDESCM,*7LINEFORMSG,*%LINEVOLMSG,*+LINESIZERM,*@LINEFORLMSG,*=LINEFILFRMG,*3LINESIZWM,**'LINEBIGMSG,*ALINEHARDRM,*=LINERESTM,*LINEUSNM,*LINERESTNF,*/LINESELM1,*:LINERANM,*8LINESELM2,*DLINESELM3,*?LINESELM4,*LINEFILM,*7LINECONTM1,<**OUTPUTDISKFULL**CONTINUE(Y/N)?>*&LINECOPWM,*/****************************************& ********NEXTWB;DESCANSDC.B''HOLDSVOLUMEDESCRIPTION(UPTO20BYTES).2DC.B''LEAVEADEADBYTEFORFORCEDCR(SBARG).DESCANSEEQU*-2*NEXTWB8RETRYADC.B''HOLDSANSWERTOMISCELLANEOUSQUESTIONS.0RETRYAEEQU*-2LEAVEADEADBYTEFORFORCEDCR.*NEXTWB.RETRYBDC.B''HOLDSANSWERTOCOPY?MESSAGE.0RETRYBEEQU*-2LEAVEADEADBYTEFORFORCEDCR.*NEXTWB8VOLRDC.B''HOLDSVOLUMENAMEENTEREDFOROUTPUTDISK..VOLREEQU*-2LEAVEADEADBYTEFORFORCEDCR.*NEXTWB=WORKUSNDC.B''HOLDSUSER#ENTEREDWHENLOGONUSER#IS0.1WORKUSNEEQU*-2LEAVEADEADBYTEFORFORCEDCR.*NEXTWB5INBUFDS.B81MISCELLANEOUSINPUTBUFFERFORINP9IOS./INBUFEEQU*-2LEAVEADEADBYTEFORFORCEDCR. *<>PAGEJ****************************************************************************ERRORMESSAGEPARAMETERBLOCK*J************************************************************************** DS.W0EM_PBLK: -EM_D0DC.L0D0-IOS/FHSRETURNERRORSTATUS*(ERRORMSGKEYVALUE)-EM_A0DC.L0A0-ADDROFI/OPARAMETERBLOCKEM_OPTDC.B0OPTIONSFLAG*BITMEANINGIFSET*0QUERYRESPONSEDESIRED+EM_TLUNDC.B0USERTERMINALLUN-(LDFLUN)$EM_QRCDC.B0QUERYRETURNCHARACTER+EM_KLUNDC.B0USERKEYBOARDLUN-(CDFLUN)3EM_SPADC.L0STARTADDRESSFORUSERTEXTPLUGPOOL1EM_EPADC.L0ENDADDRESSFORUSERTEXTPLUGPOOLPAGE=***************************************************************OPTIONCONFLICTTABLE*=***************************************************************DS.W0OPTTBL:,*EACHWORDREPRESENTSASET,ORPATTERN,OF**OPTIONSWHICHDONOTREPRESENTANOPTION,*CONFLICT.ANYTHINGNOTINTHISTABLEDOES.**AYNSRP..UBCVT...*DC.W%1000000000000000ADC.W%1100000000000000AYDC.W%1010000000000000ANDC.W%1001000000000000ASDC.W%1101000000000000AYSDC.W%1011000000000000ANSDC.W%1000010000000000APDC.W%1100010000000000AYPDC.W%1010010000000000ANPDC.W%1001010000000000ASPDC.W%1101010000000000AYSPDC.W%1011010000000000ANSPDC.W%0000100000000000RDC.W%0000110000000000RPDC.W%0000000010000000UDC.W%0000000010100000UCDC.W%0000000001000000BDC.W%0000000001100000BCDC.W%0000000001001000BTDC.W%0000000001101000BCTDC.W%0000000000010000VDC.W%0000000000011000VT4DC.W%0000000011000000UBTHESEFOURARENOTREALLY4DC.W%0000000011100000UBCKOSHERSINCEBIMPLIESU4DC.W%0000000011001000UBTRATHERTHANSERVINGASA,DC.W%0000000011101000UBCTMODIFIERTOIT. OPTTBLEEQU*-1PAGE<*************************************************************#*IMAGEOFBUFFERAREAFORDISKI/O1*FORTHEVERIFY(ANDB)OPTIONWENEED2BUFFERS-*LARGEENOUGHFOR1TRACKOFTHEAPPROPRIATE.*MEDIA.FORNON-VERIFYWEONLYNEED1BUFFER.*<************************************************************  1****THISONEIFEITHERORBOTHAREFLOPPIES*** OFFSET07FINBUFDS.BFSECTRAK*SECLENBYTES/TRACK=SECTORS/TRACKFINBUFEEQU*-1*BYTES/SECTOR FOUTBUFDS.BFSECTRAK*SECLENFOUTBUFE EQU *-1 FBUFSIZEQU*-FINBUF  (****THISONEIFBOTHAREHARDDISK*** OFFSET0HINBUFDS.BHSECTRAK*SECLENHINBUFEEQU*-1 HOUTBUFDS.BHSECTRAK*SECLENHOUTBUFE EQU *-1 HBUFSIZEQU*-HINBUFPAGE<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<**************************************************************/****PROCEDURESECTIONFORBACKUPCOMMAND******;************************************************************+*D0TOSTSKNAM=TASKNAMETHATSTARTEDME*D1TOSESNUM=SESSIONNUM$*D2TOVOLNAM=DEFAULTVOLUMENAME*D3TOUSERNUM=USERNUMBER*D4TOCATNAM=CATALOGUENAME*D5TOCATN& AM+4*D6=LENGTHOFCOMMANDLINE)*D7=BITMASKOFLOGICALUNITSASSIGNED*A0=YOURTASKNAME*A1=TERMINALID*A2=ACTUALUSERNUMBER*#*********************************** SECTION0 BEGPROC: 4LEAPBA(PC),A7SAVECONTENTSOFALLREGISTERSBUTA$MOVEM.LD0-D7/A0-A6,STSKNAM-PBA(A7) 1LEAPBA(PC),A4LOADTHEPROGRAMBASEADDRESSAND-LEAPROGSTK(PC),A7SETUPTHESTACKPOINTER. ;LEAVERSION(PC),A0STARTOFINITIALMESSAGE***071184***/LEAV_END(PC),A1ENDOFMESSAGE***071184***-BSRSENDMSGPRINTTHEMESSAGE***071184*** #0OR.B(A1)#','THEN.SIFTHERE'SNOOUTPUTFIELD, 2IF_SETINPNULL-PBA(A4)IFTHERE'SNOINPUTFIELD,7MOVE.B#'',(A1)REMOVETHESECONDCOMMA(FORSYNTAX),4BRAGETINOUTGETDEVICESFROMTABLEANDSTARTOVER.ENDI*.BRAERINVALINPUTWITHOUTOUTPUTISANERROR. $ELSE.SIFTHEREISANOUTPUTFIELD, 9IF_SETINPNULL-PBA(A4)OUTPUTWITHOUTINPUTISANERROR.BRAERINVAL*ENDI* ENDI ENDI DMOVE.LA5,SAVINP-PBA(A4)SAVETHELOCATIONSOFTHEINPUTANDOUTPUT5MOVE.LA1,SAVOUT-PBA(A4)FIELDSINTHECOMMANDLINE. 4BSRINITININITIALIZETHEINPUTANDOUTPUTDEVICES.BSRINITOUT* 6BSRCKOPTCONCHECKFOROPTIONCONFLICTSANDCHECKTHE 5BSRGETBUFGETASEGMENTFORTHEI/OBUFFERS.ALTTRK 8BSRATTRIBSIZEATTRIBUTESOFINPUTANDOUTPUTDEVICES. 5TST.LSAVLST-PBA(A4)IFALISTDEVICEWASSPECIFIED,IFTHEN.SASSIGNIT. BSRNEWOUTELSE.S:BTST.B#3,REGD7+3-PBA(A4)OTHERWISE,CHECKTOSEEIFLU3%IFTHEN.SISFREEANDIFITIS,6FHSCALLLU3AFHS(PC)ASSIGNITTOMATCHLU6,WHICHIS4BNEFATALERRTERMINALORBATCHLISTINGFILE/DEVICE.ENDIENDI 8*********************************************************&*CALLTHEAPPROPRIATECOPYROUTINE(S)*8******************************************************** )******************************************BACKUPANDVERIFYCOMMAND)*****************************************IF_SETBFLAG-PBA(A4)4BSRCOPYITPERFORMATRACK-BY-TRACKCOPY,RESETTHE9MOVE.B#1,ISEND-PBA(A4)ENDSWITCHANDVERIFYTHEDISKS. BSRVEROPT*9BSRWRITSLTWRITEOUTPUTDISK'SSLTIFALTS.USEDALTTRK:BSRWRITCONFWRITECONFSECTIFCHANNELTYPESDIFFALTTRKBRA.SSTOPIT*ENDI ,*********************************************VERIFYOPTION,********************************************IF_SETVFLAG-PBA(A4)BSRVEROPTVERIFYTHEDISKS.BRA.SSTOPIT*ENDI )******************************************REORGANIZEOPTION'***************************************IF_SETRFLAG-PBA(A4))BRAOPTIONRPERFORMA' FILE-BY-FILECOPY.ENDI &***************************************TRACKTOTRACKCOPY&**************************************IF_SETUFLAG-PBA(A4)*BSRCOPYITPERFORMATRACK-BY-TRACKCOPY.9BSRWRITSLTWRITEOUTPUTDISK'SSLTIFALTS.USEDALTTRK:BSRWRITCONFWRITECONFSECTIFCHANNELTYPESDIFFALTTRKBRA.SSTOPIT*ENDI #************************************APPENDOPTION#***********************************)BRAOPTIONRPERFORMAFILE-BY-FILECOPY. **@****************************************************************$*CLOSETHEINPUTANDOUTPUTDEVICES@*****************************************************************3STOPITBSR.SCLOSINCLOSEINPUTANDOUTPUTDEVICES.BSR.SCLOSOUT*BNEFATALERR****@****************************************************************(*TERMINATEW/NORMALTERMINATIONSTATUS@*****************************************************************TERMPERQ.TERM#0,#0PAGE%************************************** *CLOSEINPUT*%************************************* CLOSIN: .LEAINFHS(PC),A0CLOSETHEINPUTFILE/DEVICE.MOVE.W#FHCLOS,FHSCMD(A0)*FHSCALL(A0)*BNEFATALERR* .MOVE.B#1,ISEND-PBA(A4)RESETTHEENDSWITCH. RTS****&****************************************CLOSEOUTPUT*&************************************** CLOSOUT: 6LEAOUTFHS(PC),A0CLOSETHEOUTPUTFILE/DEVICE.DON'T?MOVE.W#FHCLOS,FHSCMD(A0)CHECKFORERRORYET(DOAFTERCALL).FHSCALL(A0)* RTSPAGE0*************************************************$*ROUTINETOSETUPADDRESSESINIOS*PARAMETERBLOCKS.*0************************************************  6****THISMACROGETSTHESTART&ENDADDRESSESOF***:****BUFFER\1ANDSTORESTHEMINIOSPARAMBLOCK\2.***STORE_ADDR MACROLEA\2(PC),A2LEA\1(PC),A1MOVE.LA1,IOSSAD(A2)LEA\1E(PC),A1MOVE.LA1,IOSEAD(A2)ENDM  SETADDR: STORE_ADDRVOLR,INP1IOSSTORE_ADDRRETRYA,INP3IOSSTORE_ADDRRETRYB,INP4IOSSTORE_ADDRDESCANS,INP5IOSSTORE_ADDRWORKUSN,INP6IOSSTORE_ADDRINBUF,INP9IOS ,LEADIRBLK(PC),A1PUTTHEADDRESSOFBUFFER-LEADIRFHS(PC),A2DIRBLKINPARAMBLOCKDIRFMOVE.LA1,FHSSIZ(A2)* -LEABUFFDEV(PC),A1PUTTHEADDRESSOFBUFFER-LEAFETDEV(PC),A2BUFFDEVINPARAMBLOCKFETMOVE.LA1,FHSPTR(A2)* LEASLTBUF(PC),A1<> RTSPAGEC********************************************************************2*ROUTINETOSETACCESSCODESFORINPUTANDOUTPUT* *ONCALL:1*HIGHORDER16BITSOFD1<--OUTPUTACCESSCODE/*LOWORDER16BITSOFD1<--INPUTACCESSCODE*C******************************************************************* ACCESS: 5LEAINFHS(PC),A0CHANGETHEACCESSCODEOFTHEINPUT;MOVE.W#FHCHNG,FHSCMD(A0)DEVICETOWHATEVERISINTHELOW!MOVE.WD1,FHSOPT(A0)WORDOFD1.FHSCALL(A0)*BNEFATALERR* 7LEAOUTFHS(PC),A0CHANGETHEACCESSCODEOFTHEOUTPUTBTST#22,D0IFNOVOLUMENAMEWASSPECIFIED,THAT'SANERROR.BEQERINVAL* =BTST.L#5,D0RECORDWHETHERUSER#&CATALOGFIELDSINCLUDED*SNEFAMUSN-PBA(A4)FAMILYSPECIFICATIONS.BTST.L#4,D0*SNEFAMCAT-PBA(A4)* >MOVE.L#$300000,D1RECORDWHETHERUSER#ORCATALOGFIELDWASAND.LD0,D1SPECIFIED.SNEUSN_CAT-PBA(A4)* 5LEAINFHS(PC),A0LOADINPUTPARAMETERBLOCKADDRESS.+BTST#1,D0IFTHEINPUTFIELDISADEVICE,IFTHEN.S 3MOVE.LFHSVOL(A0),D4GOCHECKTHEDEVICEMNEMONICS&BSRCKTABTABLETOSEEIFHE'SINIT.LEAINFHS(PC),A0* 7MOVE.W#-2,FHSUSN(A0)PUTFAMILYSPECIFICATIONSINTHE4MOVE.B#1,FAMUSN-PBA(A4)USER#ANDCATALOGFIELDS.MOVE.L#'****',FHSCLG(A0)*MOVE.L#'****',FHSCLG+4(A0)*MOVE.B#1,FAMCAT-PBA(A4)* ENDI '****ASSIGNINPUTVOLUMEORDEVICE***4LEADIRFHS(PC),A6MOVETHEVOLUMENAME,USER#,AND;MOVE.LFHSVOL(A0),FHSVOL(A6)CATALOGFIELDSFROMTHEINPUT:MOVE.WFHSUSN(A0),FHSUSN(A6)PARAMETERBLOCKTOTHEFETCH>MOVE.LFHSCLG(A0),FHSCLG(A6)DIRECTORYENTRYPARAMETERBLOCK.!MOVE.LFHSCLG+4(A0),FHSCLG+4(A6) 7MOVE.L#'',FHSCLG(A0)PUTSPACESINTHECATALOGFIELD7MOVE.L#'',FHSCLG+4(A0)OFTHEINPUTPARAMETERBLOCK. -FHSCALL(A0)ASSIGNTHEINPUTVOLUME/DEVICE.BNEFATALERR* AMOVE.W#FHRATT,FHSCMD(A0)FETCHITSATTRIBUTESSOWE'LLHAVEITS)FHSCALL(A0)SIZEEVENIFITISFOREIGN.BNEFATALERR* ;IF.LFHSSIZ(A0)#SECT2048THEN.SIF#OFSECTORS>2048?MOVE.B#1,INHARD-PBA(A4)FLAGTHATINPUTISHARDDISKOR51/4 *<<0104858IF.LFHSSIZ(A0)#BIGFLOPTHEN.SIFSECTORS<=2552,MOVE.B#1,INFLOP-PBA(A4)INPUTISONFLOPPYENDI010485>>BIF_NOT_SETOPTNOA-PBA(A4)ACONTRADICTORYOPTIONWASNOTSELECTED2IF_NOT_SETINFLOP-PBA(A4)ANDNOTFLOPPIES011185-MOVE.B#1,AFLAG-PBA(A4)DEFAULTTOOPTIONA.ENDIENDI*ENDI* RTSPAGE6********************************************************INITIALIZATIONOFOUTPUTDISK*6****************************************************** INITOUT: *MOVE.B#1,IOTYPE-PBA(A4)SETOUTPUTFLAG. 2LEAOUTFHS(PC),A6LOADTHEOUTPUTPARAMETERBLOCK>MOVE.WUSERNUM-PBA(A4),FHSUSN(A6)WITHTHEDEFAULTUSER#AND*MOVE.LCATNAM-PBA(A4),FHSCLG(A6)CATALOG.'MOVE.LCATNAM+4-PBA(A4),FHSCLG+4(A6)* BTST#22,D0IFNOVOLUMENAMEWASSPECIFIED,THAT'SANERROR.BEQERINVAL* CMOVE.L#$300000,D1IFUSER#ORCATALOGFIELDSWERESPECIFIED,SETAND.LD0,D1THEFLAG.IFTHEN.S*STUSN_CAT-PBA(A4)ENDI* 6****CHECKFORALISTFILE/DEVICEINCOMMANDLINE***%BTST#0,D0WASTHETERMINATORA'/'?BNEERINVALYES--ERROR. 0IF.B-1(A0)#','THEN.SIFITWASACOMMA,6MOVE.LA0,SAVLST-PBA(A4)SAVETHELOCATIONFORLATER.ENDI* +****CHECKFORDEVICEORFAMILYFIELDS***7LEAOUTFHS(PC),A0LOADTHEOUTPUTPARAMETERBLOCKADDR .BTST#1,D0IFIT'SADEVICE,CHECKTHEDEVICE4IFTHEN.SMNEMONICSTABLEFORTHEVOLUMENAME.:MOVE.LFHSVOL(A0),D4ALSO,RECORDTHATUSER#ANDCATALOG.BSRCKTABFIELDSARETOBETREATEDASFAMILY.LEAOUTFHS(PC),A0*MOVE.B#1,FAMUSN-PBA(A4)*MOVE.B#1,FAMCAT-PBA(A4)*ENDI* 1BTST.L#5,D0IFTHEUSER#SPECIFIEDWASFAMILY,IFTHEN.SREMEMBERIT.MOVE.B#1,FAMUSN-PBA(A4)*-ELSE.SOTHERWISE(OUTPUTUSER#NOTFAMILY),THEN.SREMEMBERIT.ITMUSTBEALLSTARS,@MOVE.B#1,FAMCAT-PBA(A4)HOWEVER(E.G.BACKUPV1:99.*,V2:99.AB*'CMP.L#'****',FHSCLG(A6)ISANERROR).BNEERINVAL*CMP.L#'****',FHSCLG+4(A6)*BNEERINVAL*.ELSE.SOTHERWISE(OUTPUTCATALOGNOTFAMILY),=IF_SETFAMCAT-PBA(A4)IFINPUTCATALOGWASFAMILYANDOUTPUT*BTST#20,D0CATALOGWASSPECIFIED,ERROR!-BNEERINVAL(E.G.BACKUPV1:99.*,V2:99.BLIP)ENDI*ENDI* ****ASSIGNOUTPUTDISK***DMOVE.LFHSCLG(A0),SOUTCAT-PBA(A4)SAVETHEOUTPUTCATALOGFIELDAND:MOVE.L#'',FHSCLG(A0)PUTSPACESINTHEPARAMETERBLOCK.(MOVE.LFHSCLG+4(A0),SOUTCAT+4-PBA(A4)*MOVE.L#'',FHSCLG+4(A0)* FHSCALL(A0)DOTHEASSIGNMENT.BNEFATALERR* AMOVE.W#FHRATT,FHSCMD(A0)FETCHITSATTRIBUTESSOWE'LLHAVEITS)FHSCALL(A0)SIZEEVENIFITISFOREIGN.BNEFATALERR* 6MOVE.LFHSSIZ(A0),SAVESIZE-PBA(A4)SAVE#OFSECTORS. #SECT2048THEN.SIF#OFSECTORS>2048, ****HARDDISK***5MOVE.B#1,OUTHARD-PBA(A4)SETHARDDISKOUTPUTFLAG. 7TST.BRFLAG-PBA(A4)ANATTEMPTTOREORGANIZETOAHARDBNEHARDRERRDISKISANERROR. *3.Ifuseranswersaffirmatively,thenmovethedevicenames?*(goingfromthebackofthebuffertothefront)intoCOMMLIN<*whichalreadycontainsthenameofthelistfield,ifany.A*AcalltoNOINSUBdoestheactualmoveandcountsthenumberof#*charactersmovedforlinelength.=*4.Storetheaddressofthebeginningofthefilledbuffer.**NOINOUT: 8FHSCALLFETDEV(PC)FETCHTHEDEVICEMNEMONICSTABLEFOR$BNEFATALERRRANDOMACCESSDEVICES. 7CMP.W#2,FHSLEN(A0)IFTHEREAREFEWERTHAN2ENTRIES,BLOERINVALTHAT'SANERROR. 9LEABUFFDEV(PC),A1THEFIRSTTWODEVICESWILLBECOMETHEIMOVE.LFDVDEV(A1),COPMD1-PBA(A4)INPUTANDOUTPUTDEVICES,RESPECTIVELY./ADD.L#FDVLEN,A1PUTTHEMINTHEMESSAGELINE.#MOVE.LFDVDEV(A1),COPMD2-PBA(A4)* 3LEACOPM(PC),A0ASKTHEUSERIFHEWANTSTOBACKUP'LEACOPME(PC),A1DEVICE1TODEVICE2.BSRSENDMSGI* $IOSCALLINP4IOS(PC)GETHISANSWER.BNEFATALERR* BSRSBARG*BNEFATALERR* @CMP.B#'Y',RETRYB-PBA(A4)IFIT'SNOTY,TERMINATETHEPROGRAM. BNETERMP* 6****INSERTTHEDEVICENAMESINTHECOMMANDLINE.***4****AN11BYTEBUFFERSITSBEFORETHEORIGINAL***0****COMMANDLINETOHOLDTHEM.#XXXX,#XXXX***6****INSERTIONSTARTSWITHTHELASTBYTEANDGOES***/****TOWARDTHEFRONT.SPACESAREREMOVED.***6MOVE.LREGD6-PBA(A4),D6LOADTHECOMMANDLINELENGTH. 8LEACOMMLIN(PC),A0MOVETHESECONDDEVICENAMEINTOTHE8ADDQ.L#1,A0ADJUSTFORADDRDECRBEFORESTORAGE032784*SUBQ.L#1,D6ADJUSTCOMMANDLENGTH0327847MOVE.B#',',(A0)MOVEINCOMMABEFOREFILENAME032784  LEACOPMD2+4(PC),A1BUFFER.BSR.SNOINSUB* 9MOVE.B#',',-(A0)MOVEACOMMAANDTHEFIRSTDEVICENAME4LEACOPMD1+4(PC),A1INTOTHEBUFFER.(REMEMBER,ALL3BSR.SNOINSUBTHISISHAPPENINGINREVERSEORDER.) 2ADD.L#3,D6INCREMENTCOMMANDLINELENGTHFORTHE=MOVE.LD6,REGD6-PBA(A4)#'SANDCOMMA;THENSAVETHERESULT. RTSPAGE9**********************************************************+*TRANSFER( DEVICENAMEFROM(A1)TO(A0)IN,*REVERSEORDER(LASTBITFIRST).SPACESARE.*NOTTRANSFERREDANDNAMEISPRECEDEDBYA#.*9********************************************************* NOINSUB: MOVE#3,D0 &NOINSUB1IF.B-(A1)#SPACETHEN.S:MOVE.B(A1),-(A0)IFTHECHARISNOTASPACE,TRANSFERIT3ADD.W#1,D6ANDINCREMENTTHECOMMANDLINELENGTH.ENDI* +DBFD0,NOINSUB1REPEATATOTALOF4TIMES. 3MOVE.B#'#',-(A0)PUTINTHE#(DEVICEINDICATOR). RTSPAGE6*******************************************************&*ROUTINETODOFETCHDEVICEMNEMONICS *ANDGETVOLUMENAMEIFPRESENT7*D4CONTAINSTHEVOLUMENAMETOCHECKFORINTHETABLE3*IOTYPEISAFLAG0=INPUTDISK&1=OUTPUTDISK*5***************************************************** CKTAB: BLEABUFFDEV(PC),A1FETCHTHEDEVICEMNEMONICSTABLEINTOBUFFDEV.FHSCALLFETDEV(PC)*BNEFATALERR* 9MOVE.WFHSLEN(A0),D1SAVETHE#OFENTRIESINTHETABLE. >CKTAB2CMP.LFDVDEV(A1),D4CHECKEACHTABLEENTRYTOSEEIFIT/BEQ.SCKTABFMATCHESTHEDEVICENAMEIND4.IF0SUB.W#1,D1IT'SNOTINTHETABLEATALL,ITIS2BLSERDEVICENOTAKNOWNRANDOMACCESSDEVICE,SOADD.L#FDVLEN,A1ERROR. BRACKTAB2* .****FOUNDAMATCH--ISITAFOREIGNDISK?***DCKTABFTST.LFDVVOL(A1)AVOLUMENAMEOF0INDICATESAFOREIGNDISK.IFTHEN.S ****DISKNOTFOREIGN***IF_NOT_SETIOTYPE-PBA(A4) ****INPUTDISK***5LEAINFHS(PC),A0MOVETHEVOLUMENAMEFORTHEDEVICE@MOVE.LFDVVOL(A1),FHSVOL(A0)TOTHEINPUTFHSPARAMBLOCK.FLAG?MOVE.B#1,DEVIN-PBA(A4)THATADEVICEWASSPECIFIEDFORINPUT. ELSE.S****OUTPUTDISK***6LEAOUTFHS(PC),A0MOVETHEVOLUMENAMEFORTHEDEVICEAMOVE.LFDVVOL(A1),FHSVOL(A0)TOTHEOUTPUTFHSPARAMBLOCK.FLAGAMOVE.B#1,DEVOUT-PBA(A4)THATADEVICEWASSPECIFIEDFOROUTPUT. ENDI ELSE.S****DISKISFOREIGN***3TST.BAFLAG-PBA(A4)IFTHISISANOPTIONABACKUP,BNEFILFRERRTHAT'SANERROR. IF_NOT_SETIOTYPE-PBA(A4) ****FOREIGNINPUTDISK***=TST.BRFLAG-PBA(A4)IFTHISISANOPTIONRBACKUP,THAT'SAN1BNEFILFRERRERRORTOOFORAFOREIGNINPUTDISK. ALEAFORMSG(PC),A0INFORMTHEUSERTHATTHEINPUTDISKISFOREIGNALEAFORMSGE(PC),A1ANDASKHIMIFHEWANTSTOCONTINUE.TERMINATBSRGETRESPIFHEDOESN'T. BNETERMP* FMOVE.B#1,INFORN-PBA(A4)HEWANTSTOGOAHEAD.FLAGINPUTASFOREIGN. ELSE.S****FOREIGNOUTPUTDISK***DMOVE.B#1,OUTFORN-PBA(A4)REMEMBERTHATTHEOUTPUTDISKISFOREIGN. ENDI ENDI RTSPAGE4*****************************************************1*ROUTINETOCHECKATTRIBUTESOFINPUTANDOUTPUT*4**************************************************** ATTRIB: ?TST.BAFLAG-PBA(A4)IFTHISISANA-TYPEBACKUP,NONEOFTHESE/BNE.SATTRIBEXTESTSARENECESSARY--JUSTEXIT. :LEAINFHS(PC),A0COMPARESIZESOFINPUTANDOUTPUTDISKS.8LEAOUTFHS(PC),A1IFTHEYARETHESAMESIZE,JUSTEXIT.MOVE.LFHSSIZ(A0),D4CMP.LFHSSIZ(A1),D4BEQ.SATTRIBCALTTRK IFTHEN.S "****OUTPUTDISK>INPUTDISK***IATTRIBATST.BOUTHARD-PBA(A4)IFOUTPUTISHARDDISK,ERROR!--ONLYOPTION3BNELSIZERRAALLOWEDTODIFFERENTSIZEHARDDISK. 6TST.BINFORN-PBA(A4)IFINPUTDISKISFOREIGN,ERROR!BNEFORLGERR* :LEASIZWM(PC),A0INFORMTHEUSERTHATOUTPUT>INPUT,AND%LEASIZWME(PC),A1FLAGITFORLATER.BSRSENDMSG*MOVE.B#1,SIZFLAG-PBA(A4)*9*PERMITBACKUPOFSINGLESIDEDTODOUBLESIDEDDISKETTES ELSE.S "****INPUTDISK>OUTPUTDISK***DATTRIBBTST.BRFLAG-PBA(A4)WEKNOWOPTIONAISNOTSET.IFOPTIONRBEQSIZERRISNOTSET,ERROR! 4LEAWSIZM(PC),A0WARNTHEUSERTHATINPUT>OUTPUT.LEAWSIZME(PC),A1*BSRSENDMSG*ENDI ATTRIBEX RTS *<>*BSRIOSREADREADINPUTDISK,GETVIDINFO!MOVE.LRDSKIOS+IOSSAD-PBA(A4),A1:MOVE.BIOSCTP+SECLEN(A1),INCHAN-PBA(A4)SAVECHANNELTYPE5MOVE.BVIDALT(A1),D4SAVEALTSECBYTEOFINPUTDISK/MOVE.BD4,INALT-PBA(A4)SAVEALTSECINDICATOR(BEQ.SATTRIBDALTINDNOTSET,CONTINUE3BSR.SATTLASTCOMPUTELASTREADABLESECTORONDISK>ATTRIBDMOVE.B#DSKLUO,RDSKIOS+IOSLUN-PBA(A4)CHGLUTOOUTPUT*BSRIOSREADREADOUTPUTDISK,GETITSVID:MOVE.B#DSKLUI,RDSKIOS+IOSLUN-PBA(A4)RESTORELUTOINPUT3MOVE.LVIDSLT(A1),OUTSLT-PBA(A4)SAVESLTLOCATION;MOVE.BIOSCTP+SECLEN(A1),OUTCHAN-PBA(A4)SAVECHANNELTYPEMOVE.BVIDALT(A1),D50MOVE.BD5,OUTALT-PBA(A4)SAVEALTSECINDICATOR6CMP.BD4,D5BOTHUSING/NOTUSINGALTSECCAPABILITY?&BEQATTRIBEXYES,SAMELOGICALLENGTH+TST.BD4INPUTUSEALTSECTORCAPABILITY?*BNEATTRIBAYES,DOOUTPUT>INPUTCHECKS)BRAATTRIBBNO,DOINPUT>OUTPUTCHECKS*:*COMPUTELASTREADABLESECTORONDRIVEIFUSINGALTERNATE *SECTORDISK)*ENTER:A1=BUFFERADDRESSOFLASTREAD2*EXIT:(NONE),ALTLASTSETTOLASTSECTORTOREAD$*ALTDIAGSETTOLOCOFDIAG.TRACKS* ATTLASTEQU*#MOVEM.LD0-D7,-(A7)SAVEREGISTERS CLR.LD1 CLR.LD24MOVE.BIOSSPT+SECLEN(A1),D1GETSECPERTRACKMEDIA2MOVE.WIOSPSM+SECLEN(A1),D2GETPHSECSIZEMEDIA)MULUD1,D2COMPUTETOTALSECTORSONDISK3DIVU#SECLEN,D2COMPUTENUMVDOSSECTORSPERTRACK0MOVE.LIOSRSZ+SECLEN(A1),D3GETSECTORSONDISK CLR.LD0MOVE.B#MAXBAD,D0=*ADD1CYLINDERFORTHEDIAGNOSTICTRACKSATTHEENDOFDISK ADD.B#1,D0MOVE.BIOSHDS+SECLEN(A1),D1.MOVE.BD1,ALTHDS-PBA(A4)SAVENUMBEROFHEADSAND.W#$FF,D1CLEARUPPERBYTE MULUD1,D0 MULUD2,D0=*SUBTRACT1TRACKMORETHANNEEDEDSINCETRACKSSTARTWITH0 ADD.LD2,D0 SUB.LD0,D3MOVE.LD3,ALTLAST-PBA(A4)'*COMPUTELOCATIONOFDIAGNOSTICTRACKS1MULU#MAXBAD,D1NUMBEROFTRKSPERDISKFORALTS/MULUD2,D1NUMBEROFSECTORSPERDISKFORALTS+ADD.LD2,D1GETTOBEGINNINGOFNEXTTRACK5ADD.LD1,D3POINTSTOBEGINNINGOFDIAGNOSTICTRACKSMOVE.LD3,ALTDIAG-PBA(A4)&MOVEM.L(A7)+,D0-D7RESTOREREGISTERSRTSRETURNALTTRK>>PAGEG************************************************************************2*ROUTINETOGETMEMORYSEGMENTFORI/OBUFFER(S).5*SIZEOFBUFFERDEPENDSONWHETHERFLOPPIESAREUSED"*ANDWHETHERVERIFYWILLBEDONE.*G***********************************************************************  /****THISMACROTAKESTHEADDRESSWHICHIS***0****THESUMOF\1ANDA0,ANDPLACESITIN*** ****MEMORYATLOCATION\2.*** STOREMACROLEA\1(A0),A1MOVE.LA1,\2-PBA(A4)ENDM  GETBUF: 8MOVE.L#FBUFSIZ,D0LOAD#OFBYTESINFLOPPYI/OBUFFERCMOVE.L#FSECTRAK,SECTNUM-PBA(A4)ANDSETSECTORS/TRACKFORFLOPPY. ;IF_SETINHARD-PBA(A4)IFBOTHDISKSAREHARD,THENREPLACE9IF_SETOUTHARD-PBA(A4)THOSEVALUESWITHTHEAPPROPRIATE'MOVE.L#HBUFSIZ,D0ONESFORHARDDISK.#MOVE.L#HSECTRAK,SECTNUM-PBA(A4)*ENDI*ENDI* ?IF_NOT_SETVFLAG-PBA(A4)UNLESSWEAREDOINGAVERIFY(OPTIONS>IF_NOT_SETBFLAG-PBA(A4)VORB),WEONLYNEEDONEBUFFER,SO#LSR.L#1,D0HALVETHEBUFFERSIZE.ENDI*ENDI* >MOVE.LD0,BUFSIZ-PBA(A4)MOVETHEDESIREDLENGTHTOTHEGTSEG:ERQ.GTSEGBUFPAR-PBA(A4)PARAMETERBLOCKANDDOTHECALL.BNEFATALERR* =STOREFINBUF,BUF1SADSAVETHEBEGINNINGANDENDINGADDRESSES;STOREFINBUFE,BUF1EADFORTHETWOBUFFERS,ASSUMINGFLOPPY'STOREFOUTBUF,BUF2SADDISKTRACKSIZE.STOREFOUTBUFE,BUF2EAD* 6IF_SETINHARD-PBA(A4)IFBOTHDISKSAREH) ARD,REPLACE:IF_SETOUTHARD-PBA(A4)ADDRESSESWITHTHOSEFORHARDDISK!STOREHINBUF,BUF1SADTRACKSIZE.STOREHINBUFE,BUF1EAD*STOREHOUTBUF,BUF2SAD*STOREHOUTBUFE,BUF2EAD*ENDI*ENDI* 7LEARDSKIOS(PC),A2LOADTHEINPUTANDOUTPUTIOSPARAMFMOVE.LBUF1SAD-PBA(A4),IOSSAD(A2)BLOCKSWITHTHESTARTINGANDENDINGAMOVE.LBUF1EAD-PBA(A4),IOSEAD(A2)ADDRESSESOFTHEFIRSTBUFFER.LEAWDSKIOS(PC),A2*$MOVE.LBUF1SAD-PBA(A4),IOSSAD(A2)*$MOVE.LBUF1EAD-PBA(A4),IOSEAD(A2)* RTSPAGEG************************************************************************:*ROUTINETOCHECKFOROPTIONS,SETTINGAPPROPTIATEFLAGS.:*VALIDOPTIONSAREAYNSRPUBCVT.ANYOPTIONTHAT<*SHOULDNEVERBEUSEDWITHOPTIONASHOULDSETOPTNOATO1.*G************************************************************************TEST_FOR MACROIF.BD1#'\1'THEN.SMOVE.B#1,\1FLAG-PBA(A4)OR.W#1<<\2,D7 BRACKFOR1ENDIENDM** CKFOROPT: 1CLR.LD7INITIALIZETHEOPTIONPATTERNREGISTER.BMOVE.LSAVOPT-PBA(A4),A2IFTHEREWEREANYOPTIONSINTHECOMMAND2IFA2#0THENLINE,CHECKTHEMFORVALIDITY. :CKFOR1BSROPTIONGETTHENEXTOPTIONINTHECOMMANDLINE.&BTST#6,D0EXITIFTHEREARENOMORE. BNECKFOR9* 0TEST_FORA,15IF'A',SETAFLAG&BIT15OFD7.0TEST_FORY,14IF'Y',SETYFLAG&BIT14OFD7.TEST_FORN,13ETC.TEST_FORS,12TEST_FORR,11TEST_FORP,108TEST_FORH,8***071184***BITNUMBERDOESN'TMATTER-*ASITWON'TBECHECKED TEST_FORU,7 TEST_FORB,6 TEST_FORC,5 TEST_FORV,4 TEST_FORT,3*********-BRAEROPTINVIFYOUGOTTOHERE,ITWASN'TA********VALIDOPTION.**BCKFOR9MOVE.WD7,SAVEPATT-PBA(A4)SAVETHEPATTERN.IFANYU-GROUP2AND.W#$8FF,D7OPTIONSORRWERESET,SETOPTNOA.SNEOPTNOA-PBA(A4)* ENDI RTSPAGEE**********************************************************************6*ROUTINETOCHECKFORINVALIDOPTIONCOMBINATIONSAND+*CALLFOR'OPTIONCONFLICT'ERRORMESSAGE.*E*********************************************************************** CKOPTCON:1*SAVEPATTHOLDSTHEPATTERNOFOPTIONSSELECTED.2*COMPARETOTHETABLETOSEEIFITISAVALIDSET *OFOPTIONS.*LEAOPTTBL(PC),A0LEAOPTTBLE(PC),A1MOVE.WSAVEPATT-PBA(A4),D7***IFAFLAGISSET,BESUREITISMARKEDIN+*THEPATTERN(AFLAGCANBESETLATEBYTHE"*INPUTANDOUTPUTINITROUTINES).IF_SETAFLAG-PBA(A4)OR.W#1<<15,D7ENDI*8MOVE.WD7,D6IFNOOTHEROPTIONISSET(BESIDESC),SETAND.W#$FFDF,D6DEFAULTTOU.IFTHEN.SOR.W#1<<7,D7MOVE.B#1,UFLAG-PBA(A4)ENDI*$B+Q4G<DD8L9T=\AdQlFtH|GGE;5=WPC=:C>M=BCO G@?MOVE.WD7,SAVEPATT-PBA(A4)RESAVEITINCASEWENEEDITLATER.**,REPEATCOMPARETHEPATTERNTOEACHENTRYIN6CMP.W(A0)+,D7THETABLE.BRANCHIFYOUFINDAMATCH.BEQ.SCKOPT2*UNTIL.LA0A1* 4BRAEROPTCONNOMATCHFOUND.OPTIONCONFLICTERROR! 4CKOPT2TST.BD7IFANYOFTHETRACK-BY-TRACKOPTIONS3IFTHEN.S(UBCVT)ARESET,THERESHOULDN'TBE;TST.BUSN_CAT-PBA(A4)ANYUSER#ORCATALOGSPECIFICATIONS+BNEUSNCATERINTHEINPUT&OUTPUTFIELDS.ENDI* RTSPAGE2***************************************************-*ROUTINETOPERFORMCOPYALLTRACKSOPTIONU*2************************************************** COPYIT: 1LEAUSM(PC),A0PRINTMESSAGEINDICATINGTHATTHE1LEAUSME(PC),A1TRACK-BY-TRACKBACKUPPROCESSISBSRSENDMSGUNDERWAY. 6MOVE.L#FOPPR+FOPEREW<<16,D1SETTHEINPUTANDOUTPUTBSRACCESSACCESSCODES. +BSRIOSREADGETVIDANDCONFIGDATA103184:BSRENDDATACOMPUTELASTMEANINGFULSECTORONDISK10* 3184 (BSRIOSREAD1STTIMEREADTOBEGINCOPY #BSRFIRSTIODO1STTIMEPROCESSING "BSRCHECKSUMNEWCHECKSUMFORVID (LEARDSKIOS(PC),A3IOSINPUTPARMBLOCK%LEAWDSKIOS(PC),A6OUTPUTPARMBLOCK >BSRREADSLTSAVESLTOFOUTPUTDISKIFALTTRACKSUSEDALTTRK 4BSRREADCONFSAVECONFIGDATAOFOUTPUTDISKALTTRK #BRA.SIOSWSETGOTOWRITE1STTIME*7*********************************************************DOREADOFINPUTFILE*+********************************************,COPYREAD MOVE.L IOSRRN(A3),A5 SAVE START PSN&CLR.BCRDERR-PBA(A4)CLEARERRORFLAG BSRIOSREAD )TST.BISEND-PBA(A4)ENDFOUND?<>*1IOSWSETTST.BCRDERR-PBA(A4)ERRORWITHCOPTSETBEQ.SIOSWSET1NO$MOVE.LIOSRRN(A3),D6SAVEERRORPSNSUB.LA5,D6GET#OFSECTORSBNE.SIOSWSET0SOMEWEREREAD$ADD.L#1,IOSRRN(A3)GETNEXTSECTOR+ADD.L#1,IOSRRN(A6)GETNEXTSECTOR103184 BRACOPYREAD*.IOSWSET0MULU#SECLEN,D6CONVSECTORSTOBYTES$MOVE.LD6,IOSLEN(A3)ESTABCORRLENBRA.SIOSWSET2*$**************************************SETUPTOWRITEFILE*$**************************************IOSWSET1MOVE.LIOSLEN(A3),D0INPUTLENGTHCMP.LIOSLEN(A6),D0CKLENGTHSBEQ.SIWRITEJSAME**,IOSWSET2MOVE.LIOSSAD(A3),D0STARTBUFADDRADD.LIOSLEN(A3),D0ADDLENGTHSUB.L#1,D0ADJUSTENDADDR%MOVE.LD0,IOSEAD(A6)ENDBUFFERADDR.************************************************DOWRITETOOUTPUTFILE*.***********************************************IWRITEJBSRIOSWRITEGOOD*+TST.BCWRTERR-PBA(A4)COPTERRORONWRITEBEQ.SIOSWGONOCLR.BCWRTERR-PBA(A4)3****************************************************SETUPNEWPSNONBADWRITE3***************************************************&ADD.L#1,IOSRRN(A6)MOVEPASTBADPSN-MOVE.LIOSRRN(A6),IOSRRN(A3)SETUPREADPSN BRACOPYREAD*&IOSWGOTST.BCRDERR-PBA(A4)READERRORBEQ.SIOSWGO1NO0*************************************************SETUPNEWPSNONBADREAD0************************************************ADD.L#1,IOSRRN(A3)MOVE.LIOSRRN(A3),IOSRRN(A6) BRACOPYREAD8********************************************************2*SETUPRANDOMSECTORNUMBERFORGOODREAD&WRITE8********************************************************EIOSWGO1TST.BISEND-PBA(A4)EOV?LASTBYTESWRITTENATIWRITEJ031384BNE.SIOSWG02NO<*NOWSKIPTHEALTERNATETRACKSANDRESTARTREADINGAFTERTHEM8MOVE.LALTDIAG-PBA(A4),D0PREPAREFORCOPYINGDIAGTRKSMOVE.LD0,IOSRRN(A3)MOVE.LD0,IOSRRN(A6),MOVE.B#1,ISEND-PBA(A4)RESETENDINDICATOR=BRACOPYREADNOW,RESTARTREADINGDIAGNOSTICTRACKSALTTRK>>*!IOSWG02MOVE.LSECTNUM-PBA(A4),D0+ADD.LD0,IOSRRN(A3)SETREADNEXTSECTOR##ADD.LD0,IOSRRN(A6)WRITESECTOR#BRACOPYREADGETNEXTBLOCK*;IOSENDCLR.BFLAG1-PBA(A4)TURNON1STTIMEFLAGFORVERIFY*RTSPAGEA**********************************************************103184*1031842*ROUTINETOCOMPUTETHELASTSECTORONTHE1031845*DISKTHATCONTAINSDATA.THE* SATISACCESSED1031843*FROMTHELASTSECTORTOTHEFIRST,LOOKING1031842*FORTHEFIRSTBITTHATISSET,WHICHWILL103184.*INDICATETHATASECTORISBEINGUSED.1031840*ENTERA0=ADDRESSREADPARAMETERBLOCK103184 *USEDTOGETFIRSTTRACK103184*103184A**********************************************************103184 ENDDATA: 0MOVEM.LD0-D7/A0-A7,-(A7)SAVEREGISTERS103184*1031846*GETTOTALVERSADOSSECTORSFORUSEBYLASTSAT103184*103184+TST.BINFORN-PBA(A4)FOREIGNDISK?103184.BNE.SENDDATAXYES,SKIP--MAYBENOSAT103184>MOVE.LIOSSAD(A0),A1GETADDOFBUFFER(POINTSTOVID)103184AMOVE.LIOSRSZ+SECLEN(A1),D6TOTALSECTORSFROMCONFIGSEC103184*103184.*PREPARETOREADINLASTSECTOROFSAT103184*103184MOVE.LVIDSAT(A1),D0103184CLR.LD1103184MOVE.WVIDSAL(A1),D1103184'MOVE.LD1,D2SAVELENGTHOFSAT103184ADD.LD0,D1103184SUB.L#1,D1103184MOVE.LD1,IOSRRN(A0)103184)MOVE.LBUF1SAD-PBA(A4),IOSEAD(A0)103184*SECTOR,WEMUSTADDBACKTHOSESECTORSREPRESENTEDBY1031842*THEBITSSETFORNON-EXISTENTDISKSPACE.103184*103184ADD.LD1,D6103184 MOVE.LIOSSAD(A0),A2103184MOVE.LIOSEAD(A0),A3103184DENDDATAABSRFINDBITCHECKIFANYBITSSETINTHISSATRECORD103184*NOBITSSETINLASTSECTORREAD,ADJUSTTOTALBY2048103184*103184SUB.L#2048,D6103184'SUB.W#1,D2ALLDONEWITHSAT?1031849BEQ.SENDDATACYES(PROBABLYNEVERUSETHISEXIT)103184:SUB.L#1,IOSRRN(A0)ADJUSTRRNFORPREVIOUSSECTOR1031847IOSCALLRDSKIOS(PC)READNEXT(PREVIOUSSECTOR)103184BNEFATALERRERROR103184$BRAENDDATAAPROCESSTHESAT103184*1031849*SATBITSET,DOLASTADJUSTMENTOFTOTALSECTORS103184*103184ENDDATABSUB.LD1,D6103184-MOVE.LD6,LASTDATA-PBA(A4)SAVETOTAL103184?ENDDATACMOVE.L#0,IOSRRN(A0)RESTORESECTORNUMBERTO0103184@MOVE.LBUF1EAD-PBA(A4),IOSEAD(A0)RESTOREORIGBUFFSIZE103184ENDDATAXEQU*1031843MOVEM.L(A7)+,D0-D7/A0-A7RESTOREREGISTERS103184RTSRETURN103184PAGEB***********************************************************103184*1031841*ROUTINETOZEROOUTTHEPARTOFTHELAST103184.*SATSECTORTHATCONTAINSBITSSETFOR103184!*NON-EXISTENTDISKSPACE.103184*ENTER:103184.*A0=ADDRESSFORREADPARAMETERBLOCK103184**THATWASUSEDTOREADINLASTSAT103184*SECTOR103184#*D6=TOTALSECTORSONDISK103184*EXIT:1031841*D1=NUMBEROFSECTORSFOUNDREPRESENTED103184'*BYBITSSETINLASTSATSECTOR103184*103184C************************************************************103184 LASTSAT: 0MOVEM.LD4-D7/A1-A3,-(A7)SAVEREGISTERS103184CLR.LD1103184+DIVU#2048,D6#POFBITSPERSECTOR103184 CLR.WD6DELETEQUOTIENT103184SWAPD6GETREMAINDER103184)BEQ.SLASTSATXNONE,EVENSECTORS103184*103184*PROCESSREMAINDER103184*103184CLR.LD5103184CLR.LD7103184"DIVU#8,D6GETTOTALBYTES103184.MOVE.WD6,D7BYTETOSTARTZEROINGOUT103184 0MOVE.LIOSSAD(A0),A3BEGINNINGOFSECTOR103184ADD.LD7,A3ADDOFFSET103184SWAPD6GETREMAINDER103184=MOVE.WD6,D5NUMBEROFBITSOFFIRSTBYTETONOTZERO103184"LEABIT2(PC),A1INITTABLE103184MOVE.B0(A1,D5),D41031844AND.BD4,(A3)CLEARBITSNOTCONTAININGDATA1031849*NOWCLEARSECTORFROMBUFFER+D7TOENDOFSECTOR103184%MOVE.LIOSEAD(A0),A2INITEND103184ADD.L#1,A3INITSTART103184BYTECLRCLR.B(A3)+103184CMP.LA2,A3ATEND?103184BLEBYTECLRNO103184*103184D*COMPUTENUMBEROFSECTORSREPRESENTEDBYBITSSETINSECTOR103184*FORNON-EXISTENTDISK103184*103184MOVE.L#255,D1103184SUB.LD7,D1103184*MULU#8,D1AL+ LBYTESCONTAININGFF103184ADD.L#8,D1103184SUB.LD5,D1FIRSTBYTE103184LASTSATXEQU*1031843MOVEM.L(A7)+,D4-D7/A1-A3RESTOREREGISTERS103184RTSRETURN103184PAGEE**************************************************************103184*103184;*ROUTINETOSEARCHABUFFERLOOKINGFORANYBITSET1031840*ITSEARCHESFROMTHEBOTTOMTOTHETOP.103184*ENTER:103184!*A2=BEGINNINGOFBUFFER103184*A3=ENDOFBUFFER103184*EXIT:1031840*ZEROFLAGSET=ALLBITSINSECTORZERO1031840*ZEROFLAGNOTSET=D1HASSECTORSTHAT103184*WEREZERO103184*103184E**************************************************************103184 FINDBIT: -MOVEM.LD0/A2-A3,-(A7)SAVEREGISTERS103184+ADD.L#1,A3ADJUSTFORPREDECREMENT103184CLR.LD1103184/FINDBITACMP.L#0,-(A3)LONGWORDZERO?103184/BNE.SFINDBITBNO,CHECKWORDANDBYTES103184+ADD.L#32,D1INCREMENTSECTORCOUNT103184*CMP.LA3,A2FINISHEDWITHBUFFER?103184BLTFINDBITANO103184&CLR.BD0SETFLAGALLBITSOFF103184FINDBITXEQU*1031840MOVEM.L(A7)+,D0/A2-A3RESTOREREGISTERS103184RTSRETURN103184*FINDBITBCMP.W#0,2(A3)WORDZERO?103184*BNE.SFINDBITDNO,CHECKLASTBYTE103184+ADD.L#16,D1INCREMENTSECTORCOUNT103184&CMP.B#0,1(A3)2NDBYTEZERO?103184BNEFINDBITXNO,DONE1031842FINDBITCADD.L#8,D1INCREMENTSECTORCOUNT103184BRAFINDBITXNOWDONE103184.FINDBITDCMP.B#0,3(A3)4THBYTEZERO?103184BNEFINDBITXNO,DONE103184+BRAFINDBITCINCREMENTSECTORCOUNT103184PAGEB*********************************************************<>PAGE 9***********************************************************WRITEDISKROUTINE*9********************************************************* IOSWRITE: IOSCALLWDSKIOS(PC)BEQ.SIOSWEXGOODWRITE? ,CMP.B#+ ISTAEOV,D0NO--ENDOFVOLUME?031384BEQ.SIOSWEXYES031384/CMP.B#ISTARR,D0ENDOFVOLFORDEVICE?031384BEQ.SIOSWEXYES031384&CMP.B#ISTAEOF,D0ENDOFFILE?031384BEQ.SIOSWEXYES031384 &BSRC_EM_PGMNO--FIRSTLOGTHEERROR.%TST.BCFLAG-PBA(A4)ISCOPTIONSET?+BEQERREXITNO--TERMINATEW/ERRORSTATUS.$BSR.SDSKCKISTHISANERRORWECANTST.BD0CONTINUEOVER?+BNEERREXITNO--TERMINATEW/ERRORSTATUS. 6****IT'SANERRORAPPROPRIATEFORC,SOCONTINUE***THEN.S >MOVE.W#FHASGN,FHSCMD(A6)SETASSIGNCOMMAND;EXCLUSIVEWRITE!MOVE.W#FOPEW,FHSOPT(A6)OPTION. FHSCALL(A6)DOTHEASSIGNMENT.BNEFATALERR* ELSE.S(IFIT'SNOTADEVICE), .TST.BD0IFTHEREWASAFAMILYINDICATOR(*),BNEERINVALTHAT'SANERROR. >MOVE.W#FHALLO+FHASGN,FHSCMD(A6)SETALLOCATE&ASSIGNCODES;IMOVE.W#FOPEW+FOPEND+FOPSEQ,FHSOPT(A6)EXCLWRITE,OVERWRITE,&VARIABLE7CLR.WFHSLRL(A6)LENGTHRECORDOPTIONS;LOGICALRECORD(CLR.LFHSSIZ(A6)LENGTH0;SIZECODE0. ?NOTDEV1FHSCALL(A6)DOTHEASSIGNMENT(ANDPOSSIBLYALLOCATE).BEQ.SNEWOUTE* 1CMP.B#5,D0IFTHEERRORWAS'DUPLICATEFILE'WE2BNEFATALERRCANJUSTGOAHEADANDASSIGNTHEOLDIF_NOT_SETAFLAG-PBA(A4)DISKISLARGERTHANTHEOUTPUTDISK,8IF_SETSIZFLAG-PBA(A4)MARKTHEEXTRASATASAVAILABLE. BSRDSKGR*ENDI*ENDI*ENDI* )MOVE.LBUF1SAD-PBA(A4),A5PRINTTHELINE9MOVE.LVIDVOL(A5),DESCV-PBA(A4)'THEOUTPUTISVOL=XXX#CLR.LD0USER#=XXXDESC=XXX'.MOVE.WVIDUSN(A5),D0*LEADESCUSN(PC),A0* BSRBINDEC*LEADESCMSG(PC),A0*LEADESCMSGE(PC),A1*BSRSENDMSG* FIRSEXIT RTSPAGE0*************************************************#*ROUTINETOGETTHEUSER#FORTHE*VIDOFTHEOUTPUTDISK*1************************************************* GETUSNUM: .*IFTHISISATRACK-BY-TRACKBACKUP,WECAN'T'*ALLOWHIMTOCHANGETHEUSER#.(IFWE+*ALLOWEDIT,WEMIGHTPUTUSER17FILESON+IF_SETRFLAG-PBA(A4)AUSER20DISK,ETC.) EMOVE.LBUF1SAD-PBA(A4),A3SETUPVIDWITHTHEUSER'SDEFAULTUSER#.$MOVE.WUSERNUM-PBA(A4),VIDUSN(A3)* CTST.WADDREG2-PBA(A4)IFHELOGGEDONASUSER0,WEWILLALLOWHIM%IFTHEN.STOCHANGETHEUSER#. 9GETUSNLEAUSNM(PC),A0PROMPTTHEUSERTOENTERAUSER#.LEAUSNME(PC),A1*BSRSENDMSGI* (IOSCALLINP6IOS(PC)RECEIVEHISANSWER.BNEFATALERR* BSRSBARG*BNEFATALERR* %IF.BWORKUSN-PBA(A4)#CRTHEN.S ****NULLINPUT(JUSTACR)***?IF_SETVIDREQ-PBA(A4)IFHEISREQUIREDTOENTERSOMETHING,GOBRAGETUSNASKHIMAGAIN.ENDI* ELSE.S ****HEENTEREDSOMETHING***AND.L#$7F0000,D0WEARELOOKINGFORAUSER#WITHOUTVOLUME,;EOR.L#$200000,D0CATALOG,FILENA, ME,EXTENSION,ORPROTECTBNEGETUSNCODEFIELDS. AMOVE.WFHSUSN(A6),VIDUSN(A3)RESULTISOK,SOMOVETOTHEBUFFER*CONTAININGTHEVID. ENDI ENDI ENDI RTSPAGEE**********************************************************************8*ROUTINETOCREATESATFORADOUBLE-SIDEDOUTPUTFLOPPY:*FROMTHESATOFASINGLE-SIDEDINPUTFLOPPY.ESSENTIALLY0*WEAREJUSTMARKINGTHEEXTRASECTORSASFREE.*E**********************************************************************6*BYTESINSATARESETASFOLLOWS(0=FREE,1=ALLOCATED)*)*0-124LEFTASIS(SAMEASINPUTDISK).*125HIGHBITLEFTASIS,LOW7BITSSETTO0*126-249ALLSETTO0/*250HIGH2BITSSETTO0,LOW6BITSSETTO1*251-255ALLSETTO1* DSKGR: 6MOVE.LBUF1SAD-PBA(A4),A3LOADA3WITHTHEADDRESSIN6MOVE.LVIDSAT(A3),D3MEMORYOFBYTE#125OFTHESAT.+MULS#SECLEN,D3(A3=BUFFERSTARTADDRESS.ADD.LD3,A3+SATSTARTSECTOR*BYTES/SECTORADD.L#125,A3+125) 2AND.B#$80,(A3)+ZEROTHELOW7BITSOFBYTE125. 6MOVE.W#31,D1ZEROALLBITSOFBYTES126-249,32BITS LOPGRMOVE.L#0,(A3)+ATATIME.SUB.W#1,D1* BNELOPGR* :MOVE.W#$3FFF,(A3)+ZEROTHEHIGH2BITSOFBYTE250,AND@MOVE.L#$FFFFFFFF,(A3)SETTHEBITSFORTHERESTOFTHESECTOR. RTSPAGE;************************************************************3*ROUTINETOREQUESTDESCRIPTIONANDMOVETOBUFFER*;*********************************************************** GETDESC: =LEADESCM(PC),A0PROMPTTHEUSERTOENTERADESCRIPTION.USELEADESCME(PC),A1IMAGEMODE.BSRSENDMSGI* &IOSCALLINP5IOS(PC)GETHISRESPONSE.BNEFATALERR* BSRSBARG*BNEFATALERR* ALEADESCANS(PC),A2A2<--STARTADDROFINPUTBUFFER(HISRESPONMOVE.LBUF1SAD-PBA(A4),A5@LEAVIDVD(A5),A3A3<--STARTADDROFDESCRIPTIONINVIDIMAGE.;LEA19(A3),A0A0<--ENDADDROFDESCRIPTIONINVIDIMAGE.ALEADESCDESC(PC),A6A6<--STARTADDROFDESCRIPTIONINOUTPUTL 7IF.B(A2)#CRAND.BVIDREQ-PBA(A4)#0THEN.S 2****NULLINPUT(JUSTACR),ANDDEFAULTSARE***1****ALLOWED.USEDESCRIPTIONFROMINPUTVID.***6MOVE.L(A3)+,(A6)+JUSTLEAVETHEVIDASIS,SINCEIT7MOVE.L(A3)+,(A6)+WASTAKENFROMTHEINPUTDISK.MOVE7MOVE.L(A3)+,(A6)+THEDESCRIPTIONTOTHEOUTPUTLINE.MOVE.L(A3)+,(A6)+*MOVE.L(A3),(A6)* ELSE.S ****SOMETHINGWASENTERED,*** ****ORDEFAULTNOTALLOWED***AWHILE.B(A2)#CRDO.SMOVECHARACTERSFROMTHEINPUTBUFFER9MOVE.B(A2),(A6)+TOTHEOUTPUTLINEANDVIDDESCRIPTION,MOVE.B(A2)+,(A3)+FIELDUNTILWEHITACR.ENDW* =WHILE.LA3A0DO.SIFTHEREISANYTHINGLEFTTOTHEVID5MOVE.B#SPACE,(A3)+DESCRIPTIONFIELD,BLANKITOUT.ENDW* ENDI RTSPAGE2***************************************************)*ROUTINETOVERIFYDISK1AGAINSTDISK2**D4=SECTORNUMBER"*D5=OFFSETWITHINSECTORNUMBER *D6=WORKREGWITHINLONGWORDA*D7=ADDRESSOFFIRSTBYTETHATDIFFERSFORSINGLE/DOUBLE-SIDED**A2=ADDROFCMPDSK1*A5=ADDROFCMPDSK2*A6=ENDOFBUFFERADDR*3*************************************************** VEROPT: 8MOVE.L#FOPPR+FOPPREW<<16,D1SETACCESSCODESFORINPUTBSRACCESSANDOUTPUTDISKS. 6TST.BBFLAG-PBA(A4)DIDUSERDOACOPYFIRST?1031845BNE.SVEROPTAYES,SKIPINITIALIZINGLASTDATA1031848BSRIOSREADREADFIRSTSEVERALSECTORSFROMDISK103184:BSRENDDATACOMPUTELASTMEANINGFULSECTORONDISK103184 3VEROPTALEAVSM(PC),A0SEND'STARTVERIFY'MESSAGE.LEAVSME(PC),A1*BSRSENDMSG* ?LEARDSKIOS(PC),A2INITIALIZESECTORCOUNTERSINTHEIOSPARAM LEAWDSKIOS(PC),A3BLOCKSTO0.CLR.LIOSRRN(A2)*CLR.LIOSRRN(A3)* EMOVE.LBUF1EAD-PBA(A4),IOSEAD(A2)LOADPARAMBLKSFORINPUT&OUTPUTFMOVE.LBUF2SAD-PBA(A4),IOSSAD(A3)WITHBUFFEXTENTS(IOSSADFORINPUTBMOVE.LBUF2EAD-PBA(A4),IOSEAD(A3)ISALREADY- SET)&SETUPOUTPUT/MOVE.W#IOREAD,IOSFCT(A3)PARAMBLOCKTOREAD. C******MOVE.LBUF1EAD,A6LOADTHEENDOFINPUTBUFFERFORENDTEST.&*****071184****THISISNOWDONEAT)*THEBEGINNINGOFEACHREAD.THISCHANGE(*WASMADEASPARTOFTHECORRECTIONFOR *SPR711. CLR.LD4INITSECTOR#CLR.LD5INITOFFSET ,VREAD1MOVE.LBUF1SAD-PBA(A4),A2STARTDSK1&MOVE.LBUF2SAD-PBA(A4),A5STARTDSK2@*****************071184**************** ADDED TO CORRECT SPR 7119MOVE.LBUF1EAD-PBA(A4),A6RESTORECORRECTENDINGADDRESSCLR.BCRDERR-PBA(A4)(CLR.BCWRTERR-PBA(A4)CLEARERRORFLAGS/MOVEA.LIOSRRN+RDSKIOS-PBA(A4),A1REMEMBERRRN'*****************071184*****************'****************************************READDSK1INTOFIRSTBUFFER'***************************************9BSRIOSREADGODOREADERRORCHECKINGDONEBYIOSREADIS%*SUFFICIENT,ERRORFIXINGSHOULDNOT!*BETHERESPONSIBILITYOFVERIFY"********************************** *READDSK2"***********************************TST.BFLAG1-PBA(A4)FIRSTTIMEBNE.SVREAD2ANO$BSRVDSKGRCKFORDISKGRCONDITION VREAD2AEQU*BSRIOSWRITEGOREAD2NDDISK*********************************************VERIFYDATAINBUFFERS*********************************************B***************071184******************** ADDED TO CORRECT SPR 711*,*THISROUTINECHECKSFORANYIOSERRORSAND6*ADJUSTSTHELENGTHOFTHECOMPAREBUFFERACCORDINGLY*8TST.BCRDERR-PBA(A4)CHECKFORREADERRORWITHCOPTION/BNE.SVCMP4YES-GETLASTVALIDSECTORNUMBER7TST.BCWRTERR-PBA(A4)CHECKFORREADERRORON2NDDISK%BEQ.SVCMPNO-DOCOMPAREASNORMALCBRA.SVCMP2SINCEONLYERROROCCUREDON2NDDISK,WDSKIOSCONTAINS*LASTSECTORREADJVCMP4MOVE.LRDSKIOS+IOSRRN-PBA(A4),D6RRNOFLASTSECTORREADFROMDISK10TST.BCWRTERR-PBA(A4)CHECKFORWRITEERRORTOO2BEQ.SVCMP5NO,RDSKIOSCONTAINSLASTSECTORREADLEAWDSKIOS(PC),A0CCMP.LIOSRRN(A0),D6COMPAREAGAINSTLASTSECTORREADFROMDISKTWOGBLT.SVCMP5THEREADFROMDISK1WASSHORTER-USETHEINFOINIOSREAD;VCMP2MOVE.LWDSKIOS+IOSRRN-PBA(A4),D6USEINFOINIOSWRITE6VCMP5MOVE.LD6,D0USED0TOCOMPUTENEWSECTORNUMBER'SUB.LSECTNUM-PBA(A4),D0DECREMENTRRN*ADDQ#1,D0SKIPOVERTHEERRONEOUSSECTOR(ADDQ#1,D4INCREMENTTHESECTORCOUNTER6LEAWDSKIOS(PC),A0SOITWILLPOINTTOCORRECTSECTOR3MOVE.LD0,IOSRRN(A0)AFTERINCREMENTINGBYSECTNUMLEARDSKIOS(PC),A0MOVE.LD0,IOSRRN(A0)!SUB.LA1,D6COMPUTESECTORSREAD3BEQ.SVCMP6NOSECTORSWEREREAD-READNEXTTRACK,MULU#SECLEN,D6COMPUTEVALIDBUFFERLENGTHMOVE.LA2,A6BUFFERSTART ADDA.LD6,A6COMPUTEBUFFEREND8*************************071184*************************#VCMPCMPM.L(A2)+,(A5)+CKONEWORDBNE.SVCMPSNOTEQUALADD.W#4,D5ADDOFFSET$VCMP1CMP.W#SECLEN,D5ENDOFSECTORBLTVCMPNO-GETNEXTBYTE*(*****************************************ATENDOFSECTOR/BUFFER(*****************************************CLR.LD5CLEAROFFSETADD.W#1,D4ADDTOSECTOR#*CMP.LA2,A6ENDOFBUFFER BHIVCMPNO:VCMP6MOVE.LSECTNUM-PBA(A4),D0***071184***LABELADDEDLEARDSKIOS(PC),A0(ADD.LD0,IOSRRN(A0)ADDSECTORINCREASEMOVE.LIOSRRN(A0),D1103184+TST.BINFORN-PBA(A4)FOREIGNDISK?1031840BNE.SVCMP7YES,WAITTILLENDOFVOLUME1031849TST.BINALT-PBA(A4)DOINGALTERNATETRACKDISK?<>,ADD.LD0,IOSRRN(A0)SECTOROFFSETFORWRITE TST.BISEND-PBA(A4)EOV?031384#BEQVSETSTOPVERIFYIFEOV031384 BRAVREAD1*/***********************************************+*PROCESSINDIVIDUALBYTESWITHINLONGWORD/************************************************VCMPSMOVE.W#4,D6INITSUB.L#4,A2RESET SUB.L#4,A5!VCMPS1CMPM.B(A2)+,(A5)+CKBYTEBNE.SVPRTNOTSAMEVCMPS2ADD.W#1,D5ADDOFFSETSUB.B#1,D6REDUCECOUNTBEQVCMP1DONEBRAVCMPS1CKNEXT*)******************************************PRINTBYTETHATISDIFFERENT)******************************************8VPRTIF_SETSIZFLAG-PBA(A4)IFOUTPUTDISK>INPUTDISK,=IF.LA2D7THEN.SIFWEHAVEREACHEDTHEAREAWHERETHE=CLR.BSIZFLAG-PBA(A4)SAT'SDIFFER,RESETTHEOUTPUT>INPUT/BRAVNXTSECTFLAGANDSKIPTOTHENEXTSECTOR.ENDI*ENDI* "***********************************CONVERTSECTOR#&PRINT#*************************************/MOVE.LD4,D0CONVERTTHESECTOR#TOHEXASCIIMOVE.L#4,D1*LEAVMS(PC),A0* BSRBINHEX* BSRLEFTJLEFTJUSTIFY<<0111851LEAVMD(PC),A0CONVERTTHESECTOR#TODECASCII BSRBINDEC*MOVE.L#6,D1* BSRLEFTJLEFTJUSTIFY011185>> 'LEAOUT3IOS(PC),A0PRINTTHESECTOR#.LEAVM1(PC),A1*MOVE.LA1,IOSSAD(A0)*LEAVM1E(PC),A1*MOVE.LA1,IOSEAD(A0)*IOSCALL(A0)**)******************************************MOVEOFFSETTOMSG(***************************************** MOVE.LD5,D0 MOVE.L#2,D1LEAVM21(PC),A0BSRBINHEXGOCONVERT*)***************************************** *CONVERTDSK0BYTEFORPRINTING)******************************************CLR.LD0INITMOVE.B-(A2),D0GETDK0BYTEMOVE.LD0,D1LOADREG%BSRASCCKCHECKASCIIPRINTINGRANGE/MOVE.BD1,VMO11-PBA(A4)MOVEASCIICHARTOMSGASR.B#4,D0TOP4BITSLEAVMO1(PC),A0RECADDRMOVE.L#1,D1SIZEBSRBINHEXGOCONVERT*MOVE.B(A2),D0AND.B#$0F,D0LOW4BITSLEAVMO1+1(PC),A0ADDRTORECMOVE.L#1,D1SAZE BSRBINHEXADD.L#1,A2RESETLOCATION*&***************************************CONVERTDSK1FORPRINTING&****************************************MOVE.B-(A5),D0MOVE.LD0,D1INIT BSRASCCK/MOVE.BD1,VMO21-PBA(A4)MOVEASCIICHARTOMSGASR.B#4,D0HI4BITSLEAVMO2(PC),A0ADDRMOVE.L#1,D1SIZE BSRBINHEX*MOVE.B(A5),D0ADD.L#1,A5RESETLOCATIONAND.B#$0F,D0LOW4BITESLEAVMO2+1(PC),A0 MOVE.L#1,D1 BSRBINHEX***************************** *PRINTLINE2****************************LEAOUT3IOS(PC),A0LEAVM2(PC),A1MOVE.LA1,IOSSAD(A0)LEAVM2E(PC),A1MOVE.LA1,IOSEAD(A0)IOSCALL BNEFATALERR "IF_SETTFLAG-PBA(A4)IFOPTIONT, :*ONLYONEMESSAGEISWANTEDPERSECTOR,SOFOOLTHELOOPS7*TOTHINKWEJUSTFINISHEDTHATSECTOR.FIRST,THOUGH,.*WEMUSTADJUSTTHEBUFFERINDICESA2ANDA5.-*THECURRENTOFFSETWITHINTHESECTORISD5,3*BUTA2HASBEENINCREMENTEDONEBYTEBEYONDTHAT,1*TOD5+1.WEWANTTOTAKETHATALLTHEWAYTOAN1*EQUIVALENTOFFSETOFSECLEN,WHICHMEANSADDING0*SECLEN-(D5+1),OR(SECLEN-1)-D5,TOA2ANDA5. ****SKIPTONEXTSECTOR***/VNXTSECTMOVE.L#SECLEN-1,D6D6=(SECLEN-1)-D5 SUBD5,D6 ADD.LD6,A2 ADD.LD6,A5 7*NOWTHATTHAT'STAKENCAREOF,ALLTHATREMAINSISTO1*SETTHELOOPINDICESD5ANDD6SOTHELOOPSARE*IMMEDIATELYTERMINATED. MOVE#1,D6MOVE#SECLEN-1,D5 ENDI BRAVCMPS2CONTINUE**VSETRTSPAGE<*************************************************************0*ROUTINETOSETD7TOTHEMEMORYADDRESSOFTHE0*FIRSTBYTEOFSATTHATDIFFERSBETWEENSINGLE-*ANDDOUBLE-SIDEDDISKS.*<************************************************************ VDSKGR: 8MOVE.B. #1,FLAG1-PBA(A4)TURNOFFTHE'FIRSTTIME'FLAG. 4IF_SETSIZFLAG-PBA(A4)IFOUTPUTDISK>INPUTDISK, 4MOVE.LVIDSAT(A2),D7D7<--STARTINGSECTOROFSAT. "IF.LD7SECTNUM-PBA(A4)OR.B;INFORN-PBA(A4)#0THEN.SIFSATISNOTINTHISBUFFER5CLR.BSIZFLAG-PBA(A4)ORINPUTDISKISFOREIGN,JUST*RESETTHEOUT>INFLAG.-ELSE.SOTHERWISE(IFWECANGETTOTHESAT), 5MULU#SECLEN,D7D7=SATSTARTSECTOR*BYTES/SECTOR&ADD.LA2,D7+STARTADDRESSOFBUFFER-ADD.L#125,D7+OFFSETTO1002ndBITINSAT.ENDI ENDI RTS****8*********************************************************5*ROUTINETOBLANKOUTNON-PRINTABLEASCIICHARACTERS*8******************************************************** ASCCK: IF.BD1#SPACEOR.B8D1#$7FTHEN.SIFWHAT'SIND1ISNOTINTHERANGE6MOVE.B#SPACE,D1$20TO$7F,REPLACEITWITHASPACE.ENDI* RTSPAGE8*********************************************************&*OPTIONR(REORGANIZE)ROUTINEDRIVER*8******************************************************** OPTIONR: 1LEAASM(PC),A0PRINTMESSAGEINDICATINGTHATTHE/LEAASME(PC),A1FILE-BY-FILEBACKUPPROCESSISBSRSENDMSGUNDERWAY. 3LEAOUTFHS(PC),A0RESTORETHEOUTPUTCATALOGNAME.$MOVE.LSOUTCAT-PBA(A4),FHSCLG(A0)*(MOVE.LSOUTCAT+4-PBA(A4),FHSCLG+4(A0)* 6LEACOPAM(PC),A0ASKUSERWHETHERHEWANTSTOBACKUP'LEACOPAME(PC),A1ALLORSELECTFILES.BSRSENDMSGI* &IOSCALLINP4IOS(PC)GETHISRESPONSE.BNEFATALERR* BSRSBARG*BNEFATALERR* BIF.BRETRYB-PBA(A4)#'A'THEN.SIFTHERESPONSEWASNOT'A', 6CMP.B#'Q',RETRYB-PBA(A4)IFITWASA'Q',THENQUIT. BEQTERMP /CMP.B#'S',RETRYB-PBA(A4)WASRESPONSEAN'S'?%BNEOPTIONRNO--GOUPANDASKAGAIN. 5BSRSELOTHERYES--CHECKFOROTHERSELECTIONOPTIONS. ENDI DIF_SET.LRFLAG-PBA(A4)IFTHISISANR-TYPEBACKUP,SETUPNEWVID. BMOVE.L#FOPPR+FOPEREW<<16,D1SETACCESSCODESOFINPUTANDOUTPUT,BSRACCESSDISKS(OUTPUTDISKISALLOURS). (****READTHEVIDOFTHEINPUTDISK***5LEARDSKIOS(PC),A0WEONLYNEEDTOREADSECTOR0,SOEMOVE.LBUF1SAD-PBA(A4),IOSEAD(A0)TEMPORARILYADJUSTTHEBUFFERSIZE(ADD.L#SECLEN-1,IOSEAD(A0)TO1SECTOR. -IOSCALL(A0)READTHEVIDOFTHEINPUTDISK. &IFTHEN.SIFTHEREWASANERROR,4CMP.B#ISTAPC,D0IFITWASN'TAPROTECTCODEERROR,1BNEFATALERRIT'SFATAL;IFITWAS,IT'SNOTHIS4STVIDREQ-PBA(A4)DISK(WRONGUSER#)--FLAGTHATHE#ENDICAN'TDEFAULTVIDUSER#,ETC. DMOVE.LBUF1EAD-PBA(A4),IOSEAD(A0)RESTORETHEORIGINALBUFFERSIZE. *****BUILDTHEVIDOFTHEOUTPUTDISK***%****FROMTHATOFTHEINPUTDISK***1MOVE.LBUF1SAD-PBA(A4),A6CLEARMOSTOFTHEVID.LEAVIDSDS(A6),A0*LEAVIDMAC(A6),A1* REPEAT*CLR.L(A0)+*UNTIL.LA0A1* *BSRFIRSTIOGETVOLUMENAME,USER#,ETC. ?MOVE.LBUF1SAD-PBA(A4),A6PUTINTHESATSTARTSECTOR,THESAT>MOVE.L#1,VIDSAT(A6)LENGTH,&THEVERSION&REVISION#INFO.MOVE.W#1,VIDSAL(A6)*$MOVE.LEVIDVNO-PBA(A4),VIDVNO(A6)* ;ERQ.GTDTIMTABDATE-PBA(A4)GETSYSTEMDATE&TIMEANDMOVE3MOVE.LTABDATE-PBA(A4),VIDDTE(A6)DATETOTHEVID. 4MOVE.L#'EXOR',VIDMAC(A6)NOWTHE'EXORMACS'LABEL.MOVE.L#'MACS',VIDMAC+4(A6)* 8BSRTESTPATMOVETHEDIAGNOSTICTESTPATTERNOUTTHERE. :BSRCHECKSUMTHAT'SEVERYTHING,SOCALCULATECHECKSUMANDDMOVE.LBUF1SAD-PBA(A4),A0WRITEVIDOUTTOSECTOR0OFOUTPUTDISK.?LEASECLEN-1(A0),A0(ENDADDROFVID=STARTADDR+SECLEN-1)LEAWDSKIOS(PC),A1*MOVE.LA0,IOSEAD(A1)* BSRIWRITE* BSRDOSATBUILDSATSECTOR. ENDI &****A&ROPTIONSRECONVENEHERE***3BSRCLOSOUTWEDON'TNEEDTHEOUTPUTDISKASSIGNED3BNEFATALERRANYMORE(IT'SFILEI/OFROMHERE),SO *CLOSEIT. :IF_SETSFLAG-PBA(A4)IFTHERESTARTFLAGISSET,CALLTHE2BSRRESTARTROUTINETOPOSITIONUSATTHECORRECT4BRA.SOPTRCKFILE,ANDJUMP. INTOTHELOOPAFTERTHEENDIDIRECTORYENTRYFETCH. -****FETCHDIRECTORYENTRYONINPUTDISK***RDIRFHSCALLDIRFHS(PC) BEQ.SOPTRCK ****WEGOTANERROR***6CMP.B#FSTAEOD,D0IFWEHITTHEENDOFTHEDIRECTORY,!BEQTERMPJUSTEXITTHEPROGRAM. +BRAFATALERRWASN'TTHEEND,SOERROROUT. +****NOERROR--CHECKTHEENTRYAGAINST***!****THESELECTIONCRITERIA.***LOPTRCKIF.BRETRYB-PBA(A4)#'S'THEN.SIFHEDIDN'TASKFORASELECTIVE0BSRSETNAMESBACKUP,JUSTSETUPNAMESINPARAM(BRA.SOPTRDO1BLOCKSANDSKIPALLTHIS.ENDI* ;IF_SETDATEFLAG-PBA(A4)IFHEMADEADATERANGESELECTION,4BSROPCKDATCHECKTOSEEIFWE'REINRANGE.IFNOT,;TST.BDOKFLAG-PBA(A4)MOVEONTOTHENEXTDIRECTORYENTRY. BEQRDIR*ENDI* ;IF_SETFILEFLAG-PBA(A4)IFHEMADEFILE/FAMILYSELECTIONS,1BSROPCKFILCHECKTOSEEIFWEMATCHANYTHINGIN=TST.BFOKFLAG-PBA(A4)THETABLE.IFNOT,MOVEONTOTHENEXTBEQRDIRDIRECTORYENTRY. 2BSRSETNAMESITPASSEDALLTESTS.SETUPNAMESIN0BRA.SOPTRDO1PARAMETERBLOCKSANDTRYTOCOPY.ENDI* :****WEDIDNOTFAILTHEDATETEST(IFTHEREWASONE),***5****ANDTHEREWASNOFILETEST.IFTHEREWASNO***6****DATETEST(DOKFLAGNOTSET),WEMUSTASKTHE***,****USERIFHEWANTSTOCOPYTHEFILE.***3BSRSETNAMESSETUPNAMESINTHEPARAMETERBLOCKS.0TST.BDOKFLAG-PBA(A4)IFTHEREWASADATETEST,$BNE.SOPTRDO1WEDON'TNEEDTOASK. ****WEHAVETOASK***:BSRPROCITEMREADYTHEOUTPUTFILENAME,&ASKTHEUSERIF?LEACOPOK(PC),A0HEWANTSTOCOPYIT.VALIDANSWERSAREY,N,Q.MOVE.LADDRH1-PBA(A4),A1*BSRGETRESP* %BEQ.SOPTRDO1IFHESAIDY,COPYIT. ?CMP.B#'Q',RETRYA-PBA(A4)IFHESAIDQ,TERMINATETHEPROGRAM. BEQTERMP* 9BRARDIRANYTHINGELSEWEASSUMEISANN--DON'TCOPY,SO&*MOVEONTOTHENEXTDIRECTORYENTRY.**)****OPENSOURCE&DESTINATIONFILES***EOPTRDO1CMP.B#'@',FDFIL(A3)IFTHISISASPOOLERFILEORATEMPORARY&BEQ.SOPTNOCLFILE,WECAN'TCOPYIT.CMP.B#'&',FDFIL(A3)*BEQ.SOPTNOCL* ?MOVE.W#FHASGN,FHSCMD(A5)SETTHECOMMANDTOASSIGN,ACCESSTO=MOVE.W#FOPPR,FHSOPT(A5)PUBLICREAD,ANDSETTHELUFORTHE;MOVE.B#REORGLU,FHSLUN(A5)INPUTFILE.THENDOTHEASSIGN.FHSCALLINFHS(PC)*BEQ.SOPTRAOUT* '****ERRORONASSIGNOFINPUTFILE***OR.WFHSOPT(A5)#FOPCONTHEN.SBMOVE.LBUF1SAD-PBA(A4),FHSSAD(A6)USETHESEGMENTWEGOTALREADY."MOVE.LBUF1EAD-PBA(A4),FHSEAD(A6)ELSE.S=OR.W#FOPABF+FOPADR,FHSOPT(A6)OTHERWISEHAVEFMSALLOCATEA!ENDISHAREDSEGMENTFORTHEI/O. IOPTRALLOMOVE.W#FHALLO+FHASGN,FHSCMD(A6)ALLOCATETHEFILEONTHEOUTPUT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *1/24/84#MOVE.BVELC-PBA(A4),VELC+1-PBA(A4).*MOVETHELOOPCOUNTTOTHEWORKINGBYTELOOP*COUNTX00100:+FHSCALLOUTFHS(PC)EXCLUSIVEWRITEACCESS.BEQ.SALLROK* #****ERRORONASS/ IGNOFOUTPUT***CMP.B#FSTAVOL,D0 BNE.SX00200*JUMPIFNOTAVOLUMEERRORMOVEM.LA0/D0,-(A7)*SAVEREGISTERSMOVE.L#DELAY,D0MOVE.L#DLYTIME,A0TRAP#1*SETFOLLOWING *DIRECTIVE*TIMETODELAY-*DELAYTOALLOWFMSTIMETORECOGNIZEVOLUMEMOVEM.L(A7)+,A0/D0SUB.B#1,VELC+1-PBA(A4) BNE.SX00100*ADJUSTTHELOOPCOUNT"*JUMPIFLOOPCOUNTNOTEXHAUSTEDX00200: *1/24/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<0CMP.B#FSTADNM,D0IFITWASADUPLICATEFILEOR,BEQ.SOPTDUPIFWEHAVEFILLEDTHEDISK,WE3CMP.B#ISTAIDS,D0CANHANDLETHEERROR.OTHERWISE,BEQWCONTMERROR!CMP.B#FSTADS,D0 BEQWCONTM"*BRANCHIFINSUFFICIENTDIRECTORY'*SPACE--GIVEUSEROPTIONTOCONTINUE*ONMULTIPLEVOLUMESBRAFATALERR* ****DUPLICATEFILEERROR***:OPTDUPTST.BNFLAG-PBA(A4)IFNFLAGISSET,SKIPTHEFILE. BNERWENDI* 4TST.BYFLAG-PBA(A4)IFYFLAGISSET,COPYTHEFILE.BNE.SOPTDUPC* .BSRPROCITEMNEITHERNFLAGNORYFLAGWASSET,3LEADUPMSG(PC),A0SOASKTHEUSERWHETHERHEWANTS>MOVE.LADDRH1-PBA(A4),A1TOCOPYIT.VALIDANSWERSAREY,N,Q.BSRGETRESP* )BEQ.SOPTDUPCIFHEANSWEREDY,COPYIT. 2CMP.B#'Q',RETRYA-PBA(A4)IFHEANSWEREDQ,QUIT. BEQTERMP* 5BRARWENDIANYTHINGELSEWEASSUMEISANN.SKIPIT.**9OPTDUPCLEAOUTFHS(PC),A0INORDERTOCOPY,WEDELETETHE=MOVE.W#FHDELT,FHSCMD(A0)OLDFILEFIRSTANDSTARTOVERWITH&FHSCALL(A0)THEALLOCATEANDASSIGN.BNEFATALERR*BRAOPTRALLO***/****OUTPUTFILEALLOCATEDANDASSIGNEDOK***8ALLROKLEARDSKIOS(PC),A0LOADADDRESSESOFREAD&WRITE%LEAWDSKIOS(PC),A1PARAMETERBLOCKS. AMOVE.B#REORGLU,IOSLUN(A0)SETTHELUFORREAD,ANDTHELOCATIONBMOVE.LFHSSAD(A6),IOSSAD(A0)OFTHEBUFFERFORREAD&WRITE(TAKE?MOVE.LFHSSAD(A6),IOSSAD(A1)ADDRESSESFROMOUTPUTFHSBLOCK).MOVE.LFHSEAD(A6),IOSEAD(A0)* THEN.SENDOFFILE, "****WRITETOTHEOUTPUTFILE***2LEARDSKIOS(PC),A0COMPUTETHEENDADDRESSOFTHE6LEAWDSKIOS(PC),A1I/OBUFFERANDPUTITINTHEWRITE&MOVE.LIOSSAD(A0),D0PARAMETERBLOCK.ADD.LIOSLEN(A0),D0*SUB.L#1,D0*MOVE.LD0,IOSEAD(A1)* 'IOSCALLWDSKIOS(PC)PERFORMTHEWRITE.%IFTHEN.SIFTHEREISANERROR,&CMP.B#ISTAIDS,D0IFIT'SENDOFDISK.BEQWCONTGOTOMULTIPLEOUTPUTDISKROUTINE.*BRAFATALERRANYOTHERERRORISANERROR!ENDI* /BRAOPTRREADGOBACKUPFORNEXTRECORD/BLOCK.ENDI* -****ENTIREFILETRANSFERRED--WRAPITUP****BSRCLOSOUTTRYTOCLOSETHEOUTPUTFILE. $IFTHEN.SIFTHERE'SANERROR,'CMP.B#ISTAIDS,D0IFIT'SENDOFDISK,.BEQWCONTGOTOMULTIPLEOUTPUTDISKROUTINE.*BRAFATALERRANYOTHERERRORISANERROR!ENDI* 6BSRPROCITEMREADYTHEOUTPUTFILENAMEFORPRINT,AND5LEACOPOKB(PC),A0LOGITTOTHELISTINGFILE/DEVICE.MOVE.LADDRH1-PBA(A4),A1*BSRSENDPRT* 5RWENDIBSRCLOSINCLOSETHEINPUTFILEANDMOVEONTOBRARDIRTHENEXTONE.PAGE=**************************************************************-*ROUTINETOZEROSECTORFORSECTALLOCTABLE*=************************************************************* BUFFCLR: ;MOVE.LBUF1SAD-PBA(A4),A0SINCESATISATTHEBEGINNINGOF7LEASECLEN-1(A0),A6BUFFER1,LOADEXTENTOFBUFFER1. )REPEATCLEARLONGWORDSFORTHEEXTENTOFCLR.L(A0)+THESECTOR.UNTIL.LA0A6* RTS****>***************************************************************#*WRITEASECTORTOTH/ EOUTPUTDISK*>************************************************************** IWRITE: BSRIOSWRITEDOTHEWRITE. /LEAWDSKIOS(PC),A0MOVEONTOTHENEXTSECTOR.ADD.L#1,IOSRRN(A0)* RTSPAGE9**********************************************************/*ROUTINETOCHECKWHETHERORNOTTHEDIRECTORY+*ENTRYISWITHINTHESPECIFIEDDATERANGE.*9********************************************************* OPCKDAT: =CLR.BDOKFLAG-PBA(A4)INITDATESELECTFLAGTOOUT-OF-RANGE. 7LEADIRBLK(PC),A0D2<--THEDATEOFTHISDIRECTORYENMOVE.WFDDTEC(A0),D2* "IF.WD2SAVEFM-PBA(A4)AND.W=D2SAVETO-PBA(A4)THEN.SIFTHAT'SBETWEENTHEFROMANDCMOVE.B#1,DOKFLAG-PBA(A4)TODATES(INCLUSIVE),SETTHE'OK'FLAG.ENDI RTSPAGE:***********************************************************/*ROUTINETOCHECKWHETHERORNOTTHEDIRECTORY/*ENTRYMATCHESONEOFTHEFILE/FAMILYENTRIES.*:********************************************************** OPCKFIL: 9CLR.BFOKFLAG-PBA(A4)INITFILESELECTFLAGTONO-MATCH.4MOVE.BFILEFLAG-PBA(A4),D0LOAD#OFTABLEENTRIES.6LEAFILEAREA(PC),A2POINTA2TOTHETOPOFTHETABLE. ?OPCKFIL1LEADIRBLK(PC),A0POINTA0TOTHEDIRECTORYENTRY,AND,MOVE.LA2,A1A1TOTHECURRENTTABLEENTRY. 2CMP.W(A0)+,(A1)+CHECKUSER#OFTABLEENTRYFOR2BEQ.SOPCKFIL2TRUEMATCHORWILDCARDMATCH(-2).CMP.W#-2,-2(A1)*BNE.SOPCKFIL5* 5OPCKFIL2MOVE.W#17,D7CHECKCATALOGUE,FILENAME,AND@OPCKFIL3CMP.B(A0)+,(A1)+EXTENSIONFIELDS(TOTALOF18BYTES).1BEQ.SOPCKFIL4EACHBYTEMUSTEITHERMATCHORBECMP.B#'*',-1(A1)A'*'.BNE.SOPCKFIL5*OPCKFIL4DBFD7,OPCKFIL3**AMOVE.B#1,FOKFLAG-PBA(A4)IFWEFALLTHROUGHTOHERE,WEMATCHED2BRA.SOPCKFEXALLFIELDS.SETFILESELECTFLAGTO*GOT-MATCHANDRETURN.*;OPCKFIL5LEA20(A2),A2DIDN'TMATCHTHATTABLEENTRY.POINT2SUB.B#1,D0TOTHENEXTONEANDCHECKITIFTHEREBNEOPCKFIL1AREANYLEFT. OPCKFEXRTSPAGED*********************************************************************3*SETUPNAMESININPUTANDOUTPUTPARAMETERBLOCKS*D******************************************************************** SETNAMES: 5LEADIRBLK(PC),A3LOADADDRESSESOFDIRECTORYENTRY,5LEAINFHS(PC),A5INPUT,ANDOUTPUTPARAMETERBLOCKS.LEAOUTFHS(PC),A6* :IF.BFDWCD(A3)#$FFTHEN.SIFTHEWRITEPROTECTCODE+CLR.BFDWCD(A3)IS$FF,CHANGEITTOZERO.ENDI* *****MOVEFIELDSFROMDIRECTORYPARAM***%****BLOCKTOINPUTPARAMBLOCK.***#MOVE.WFDUSN(A3),FHSUSN(A5)USER#$MOVE.LFDCLG(A3),FHSCLG(A5)CATALOG"MOVE.LFDCLG+4(A3),FHSCLG+4(A5)*%MOVE.LFDFIL(A3),FHSFIL(A5)FILENAME"MOVE.LFDFIL+4(A3),FHSFIL+4(A5)*&MOVE.WFDEXT(A3),FHSEXT(A5)EXTENSION5MOVE.WFDWCD(A3),FHSWCD(A5)READ/WRITEPROTECTCODES ****OUTPUTPARAMETERBLOCK***9IF_SETRFLAG-PBA(A4)IFTHISISANR-TYPEBACKUP,CHANGEEMOVE.LVOLR-PBA(A4),FHSVOL(A6)THEVOLUMENAMETOMATCHTHENEWVID.ENDI* 8IF_SETFAMUSN-PBA(A4)IFTHEFAMILYUSER#FLAGISSET,>MOVE.WFHSUSN(A5),FHSUSN(A6)COPYTHEINPUTUSER#TOOUTPUT.ENDI* 9IF_SETFAMCAT-PBA(A4)IFTHEFAMILYCATALOGFLAGISSET,?MOVE.LFHSCLG(A5),FHSCLG(A6)COPYTHEINPUTCATALOGTOOUTPUT.#MOVE.LFHSCLG+4(A5),FHSCLG+4(A6)*ENDI* DMOVE.LFHSFIL(A5),FHSFIL(A6)MOVETHEINPUTFILENAME&EXTENSIONTO=MOVE.LFHSFIL+4(A5),FHSFIL+4(A6)THEOUTPUTPARAMETERBLOCK.MOVE.WFHSEXT(A5),FHSEXT(A6)* FMOVE.WFDWCD(A3),FHSWCD(A6)GETTHEPROTECTCODESFROMTHEDIRENTRY. RTSPAGE3****************************************************)*ROUTINETOHANDLEMULTIPLEOUTPUTDISK.'*REQUIREDBECAUSEINPUTDISKTOOLARGE*3***************************************************3***************************************************WCONT: BSRCLOSOUTCLOSEOUTPUTBNEFATALERR* 4LEAOUTFHS(PC),A0DELETETHEFILEWEWERE0 TRYINGTOTHEN.SIFHEDIDN'TSAYY,7CMP.B#'N',RETRYA-PBA(A4)ANNMEANSHEWANTSTOQUIT;'BEQTERMPANYTHINGELSEWASAMISTAKE,BRAWCONTMSOASKAGAIN.ENDI* 2BSRMOVNAMFSAVEDIRECTORYFILENAME;REPLACEWITH-BSRCLOSININPUTFILENAME.CLOSEINPUTFILE. -LEAINFHS(PC),A0CLOSETHEDIRECTORYVOLUME.MOVE.B#DSKLUI,FHSLUN(A0)* BSRCLOSIN* :WCONTM1LEACONTM2(PC),A0PROMPTUSERTOLOADNEWDISKAND*LEACONTM2E(PC),A1ENTERITSVOLUMENAME.BSRSENDMSGI*-IOSCALLINP5IOS(PC)RECEIVETHEVOLUMENAME.BNEFATALERR* BSRSBARG*BNEFATALERR* 6LEADESCANS(PC),A0IFHEDIDN'TENTERANYTHING(FIRST2CMP.B#CR,(A0)CHARACTERACARRIAGERETURN),THEN#BEQWCONTM1GOBACKANDASKAGAIN. CMP.B#'#',(A0)+DEVICEBEQ.SCONT2YESLEA3(A0),A1SETENDWCONT1ACMP.B#CR,(A0)ENDBNE.SWCONT1BNOWCONT1MC MOVE.B #CR,1(A0)MOVE.B#':',(A0)INDICATEVOLBRA.SWCONT1C#WCONT1BCMP.B#':',(A0)+TERMINATORBEQ.SWCONT1CYESCMP.LA0,A1ATENDBHIWCONT1ANOBRAWCONT1MCSETEND*WCONT1CTST.BRFLAG-PBA(A4)REORGFLAGSETBEQ.SCONT2NOLEACONTM3(PC),A0LEACONTM3E(PC),A1*BSRGETRESPSENDSWITCHTOAPPENDOPTMSG BNEWCONTM1 CLR.BRFLAG-PBA(A4)CLEARREORGMOVE.B#1,AFLAG-PBA(A4)*CONTINUEPROCESSING(CONT2LEADESCANS(PC),A0VERIFYVOLNAMELEAOUTFHS(PC),A60MOVE.WFHSUSN(A6),L1USN-PBA(A4)SAVEOLDUSER#O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *1/24/84!MOVE.LFHSVOL(A6),X10000-PBA(A4)*SAVEOLDVOLUMENAME *1/24/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< BSREDITFILE BPL.SCONT3CONT2ERBSRINVALSENDERRMSGBRAWCONTM1TRYAGAIN*CONT3BTST#1,D0DEVICEBEQ.SCONT3ANOMOVE.B#1,IOTYPE-PBA(A4)LEAOUTFHS(PC),A6MOVE.LFHSVOL(A6),D4BSRCKTABGETVOLNAME/MOVE.WL1USN-PBA(A4),FHSUSN(A6)RESETUSERNUM BRA.SCONT3BCONT3ABTST.L#22,D0VOLNAMEBEQCONT2ERNO CONT3B:O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *1/24/84 BSRX10010.*ForceFHStorecognizethatanewvolumehas*beeninputintothesystem *1/24/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6LEAINFHS(PC),A0SETUPTHEINPUTPARAMBLOCKTOASSIAMOVE.W#FHASGN,FHSCMD(A0)THENEWVOLUME.THECOMMANDISASSIGN,8MOVE.L#'',D1ANDTHECATALOG,FILENAME,ANDEXTENSION(MOVE.LD1,FHSCLG(A0)FIELDSARESPACES.MOVE.LD1,FHSCLG+4(A0)*MOVE.LD1,FHSFIL(A0)*MOVE.LD1,FHSFIL+4(A0)*MOVE.WD1,FHSEXT(A0)* FHSCALL(A0)ASSIGNVOLUME BNEFATALERR9MOVE.B#REORGLU,FHSLUN(A0)SETUPNEWLOGUNITFORFILES-BSR.SMOVNAMBREADLASTNAMEANDRESETTABLE&BRAOPTRCKSTARTPROCESSINGNEXTDISKPAGE8*********************************************************%*MOVEFILENAME(VOL,USN,CAT,FIL,EXT)*FROM(A0)TO(A1).*8******************************************************** MOVEVOL: MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0)+,(A1)+MOVE.L(A0),(A1) RTS****7********************************************************%*SAVEDIRECTORYFILENAME&PUTINPUT$*FILENAMEINFETCHPARAMETERBLOCK.*7******************************************************* MOVNAMF: THEN.SIFTHEREWASANERROR,4CMP.B#FSTAEOD,D0IFITWASENDOFDIRECTORY,'FILE,BEQNOTFNDNOTFOUND'ERROR.OTHERWISE,JUST0BRAFATALERRLETERRORMESSAGEHANDLERHAVEIT.ENDI* 6LEABUFFMULT(PC),A0RESTORETHESAVEDDIRECTORYENTRY5LEADIRFHSV(PC),A1FILENAMEFROMTHEHOLDINGBUFFER.BSRMOVEVOL* RTSPAGE3***************************************************"*ROUTINEFOROTHERSELECTOPTIONS*DATERANGEANDFILESELECTION'*PARAMETERSARESETUPINTHISROUTINE7******************************************************* SELOTHER: TODATE?BGTSELERNO--ERROR.*SEL4MOVE.WD0,SAVETO-PBA(A4)SAVETODATE-MOVE.B#1,DATEFLAG-PBA(A4)SETDATESELFLAG*7******************************************************* *BUILDFILETABLEFORSELECTION7*******************************************************9SELFILLEASELM2(PC),A0ASKIFFAMILY/FILESELECTIONSARE4LEASELM2E(PC),A1WANTED;EXITIFHEDOESN'TSAYY.BSRGETRESP*BNESELEXIT* THEN.SIFTHEREWASANERROR,5SELFERBSRINVALPRINT'INVALIDENTRY'ANDTRYAGAIN. BRASELF1*ENDI* >LEAINFHS(PC),A2IFTHEVOLUMENAMEENTEREDDIFFERSFROMTHATCLEADUMMY1 FHS(PC),A6OFTHEINPUTDISK,SIGNALERRORANDTRYAGAIN.MOVE.LFHSVOL(A2),D2*CMP.LFHSVOL(A6),D2* BNESELFER* 4BTST#19,D0IFFILENAMEANDEXTENSIONWERENOTBOTH'BEQSELFERSPECIFIED,THAT'SANERROR!BTST#18,D0* BEQSELFER* !****THEENTRYISACCEPTABLE***3ADD.B#1,FILEFLAG-PBA(A4)INCREMENTENTRYCOUNTER. CMOVE.LADDRH2-PBA(A4),A0MOVETHEFILENAMETOTHECURRENTENTRYIN3LEAFHSUSN(A6),A1THEFILE/FAMILYSELECTIONTABLE.MOVE.W(A1)+,(A0)+USER#MOVE.L(A1)+,(A0)+CATALOGUEMOVE.L(A1)+,(A0)+CATALOGUMOVE.L(A1)+,(A0)+FILEMOVE.L(A1)+,(A0)+FILEMOVE.W(A1)+,(A0)+EXT AIF.BFILEFLAG-PBA(A4)#10THEN.SIFTHEREAREFEWERTHAN10?MOVE.LA0,ADDRH2-PBA(A4)ENTRIES,SAVETHECURRENTLOCATIONIN+BRASELF1THETABLEANDGETANOTHERENTRY.ENDI* SELEXITRTSPAGE3****************************************************$*RESTARTROUTINEWILLSTARTONFILE*ENTEREDANDWALKFORWARD*4**************************************************** RESTART: /LEARESTM(PC),A0PROMPTUSERFORFILENAMEWITH$LEARESTME(PC),A1WHICHTORESTART.BSRSENDMSG**IOSCALLINP9IOS(PC)RECEIVETHEFILENAME.BNEFATALERR* BSRSBARG*BNEFATALERR* 1LEAINBUF(PC),A0CHECKTHEINPUTUSINGEDITFILE.LEAINFHS(PC),A6*BSREDITFILE*&IFTHEN.SIFIT'SBAD,GOUPANDBSRINVALASKAGAIN.BRARESTART*ENDI* =BSRMOVNAMFSAVETHEDIRECTORYENTRYFILENAME&REPLACEWITH9BSRMOVNAMBTHATJUSTENTERED.DOFETCHTOTHATFILENAME*&RESTOREORIGINAL. RTSPAGEB*******************************************************************,*CONVERTOUTPUTFILENAMETOREADABLEFORMAT*INDIRMSGBUFFERFORPRINT.*B****************************************************************** PROCITEM: 5LEAOUTFHS(PC),A6MOVEVOLUMENAMEFROMOUTPUTPARAM2MOVE.LFHSVOL(A6),VOLPRT-PBA(A4)BLOCKTOBUFFER. ,CLR.LD0CONVERTUSER#TOASCIIINBUFFER.MOVE.WFHSUSN(A6),D0*LEAL1USN(PC),A0* BSRBINDEC* DMOVE.LFHSCLG(A6),L1CAT-PBA(A4)MOVECATALOG,FILENAME,&EXTENSION/MOVE.LFHSCLG+4(A6),L1CAT+4-PBA(A4)TOBUFFER."MOVE.LFHSFIL(A6),L1FIL-PBA(A4)*&MOVE.LFHSFIL+4(A6),L1FIL+4-PBA(A4)*"MOVE.WFHSEXT(A6),L1EXT-PBA(A4)* 7LEADIRMSG(PC),A1MOVETHEFILENAMEFROMTHEBUFFERTO6LEACOPOKB(PC),A2THEPRINTLINE,COMPRESSINGSPACES.MOVE.L#DIRMSGL,D1*BSR.SSPCOMP* 3MOVE.B#'',(A2)FOLLOWTHEFILENAMEWITHASPACE. -MOVE.LA2,A1SAVETHELOCATIONFOLLOWINGTHE#MOVE.LA2,ADDRH1-PBA(A4)FILENAME. RTSPAGE>***************************************************************+****MOVEABUFFER,COMPRESSINGSPACES**** *ONCALL:)*A1.L<--STARTADDRESSOFSOURCEBUFFER)*A2.L<--STARTADDRESSOFTARGETBUFFER"*D1.L<--LENGTHOFSOURCEBUFFER *ONRETURN:**A2.LPOINTSJUSTAFTERTHETARGETBUFFER*>************************************************************** SPCOMP:3K%R-R5O=SEFMMU>]EeZm REPEAT 6IF.B(A1)+#SPACETHEN.SIFTHECHARACTERISNOT&MOVE.B-1(A1),(A2)+ASPACE,MOVEIT.ENDI* "SUB.W#1,D1REPEATFORTHEENTIREUNTILSOURCEBUFFER. RTSPAGE6*******************************************************0*ROUTINETOSETUPSECTORALLOCATIONTABLEWHIC/*RESIDESONPHYSICALSECTOR2OFDISK(ADDR1)*7*THECORRECTBITSMUSTBETURNEDONOROFFTOINDICATE*WHICHSECTORSAREAVAILABLE5*THISROUTINEISFORSINGLE&DOUBLESIDEDDISKETTES*6****************************************************** DOSAT: BSRBUFFCLRCLEARSECTOR  0************************************************!*SETUPSIDEONEOFTHEDISKETTE,******************************************** 1  .MOVE.LSAVESIZE-PBA(A4),D6GETNUMOFSECTORS(DIVU#SECT2048,D6#POFBITSPERSECTORCLR.LD1INIT MOVE.WD6,D1 MOVE.LD1,D2TST.WD6OVER2SIDESBNE.SBIGLOPYES@MOVE.B#1,ONESECT-PBA(A4)SETFLAGONLYONESECTORWILLBEUSED BRA.SDOREM*&*ROUTINEFOR>THANDOUBLESIDEDDISK* BIGLOPEQU*BSRIWRITEWRITESECTOR$SUB.W#1,D1ATENDOFWHOLESECTORSBNEBIGLOPNO* DOREMEQU*SWAPD6GETREMAINDERTST.WD6ISIT0BEQ.SDOFIRSTYES*CLR.LD1INIT******************************************* *PROCESSREMAINDEROFLASTSIDE*******************************************MOVE.WD6,D1GETREMAINDERDIVU#8,D1GETTOTALBYTES CLR.LD6 MOVE.WD1,D6 AMOVE.LBUF1SAD-PBA(A4),A0A0<--STARTADDRESSOFSATINBUFFER.9LEASECLEN-1(A0),A2A2<--ENDADDRESSOFSATINBUFFER. ADD.LD6,A0ADDOFFSETSWAPD1GETREMAINDERMOVE.WD1,D6GETREMAINDERLEABITSON(PC),A1INITTABLEMOVE.B0(A1,D6),D60MOVE.BD6,(A0)+SETBITFORLASTBYTEAVAILABLE BITLOOPEQU*CMP.LA0,A2ATENDBCS.SLSTWRTYESMOVE.B#$FF,(A0)+SETBITSON BRABITLOOP%LSTWRTBSRIOSWRITEWRITELASTSECTOR ADD.W#1,D2INCFORLASTSECTOR*-*********************************************&*TURNONBITSINSATFORSECTORSUSED-********************************************* DOFIRSTEQU*)TST.BONESECT-PBA(A4)ONLYONESECTUSEDBNE.SSETRRNYESBSRBUFFCLRCLEARSECTOR SETRRNEQU*LEAWDSKIOS(PC),A0%MOVE.L#1,IOSRRN(A0)SETUPSECTOR#,MOVE.LBUF1SAD-PBA(A4),A0INITBUFFPOINTER CMP.W#7,D2 BCS.SBITL BHI.SBITH*EQUAL BITEEQU*MOVE.B#$FF,(A0)BRA.SDOSATEXEXIT *LESSTHEN7 BITLEQU*LEABIT1(PC),A1INITTABLE BITMEQU*MOVE.B0(A1,D2),D2GETBITSMOVE.BD2,(A0)!DOSATEXBSRIOSWRITEWRITESECTORRTS***/************************************************&*GREATERTHAN7-1STBYTEPROCESSING*.**********************************************BITH: SUB.W#7,D2 BITH1MOVE.B#$FF,(A0)+ CMP.W#8,D2BEQBITEEQUAL BHI.SBIT8H******************* *LESSTHEN8*******************LEABIT2(PC),A1 BRABITM**********************GREATERTHAN8*********************BIT8HSUB.W#8,D2 BRABITH1PAGE **********************************HELPOPTION-ADDED071184* ********************************!LISTHCLR.LD1CLEARLINECOUNTER7ADDQ.B#1,D1INCREMENTFORUTILITYIDENTIFICATIONLINE&LEAHELPMSG-1(PC),A1STARTOFMESSAGE%LEAHELPLEN(PC),A2LINELENGTHTABLE.PLINEADDQ.W#1,A1POINTTOSTARTOFNEXTLINE)MOVEA.LA1,A0A0POINTSTOMESSAGESTARTCLR.LD0CLEARLENGTHREGISTERMOVE.B(A2)+,D0GETLENGTHTST.LD0CHECKFORZEROLENGTH-BEQ.SHELPEXITENDOFMESSAGE-EXITPROGRAM)ADDA.WD0,A1A1POINTSTOENDOFMESSAGEBSR.SSENDMSGPRINTTHELINE"ADDQ.B#1,D1INCREMENTLINECOUNT!CMP.B#23,D1CHECKFORFULLPAGEBLTPLINENO-PRINTNEXTLINE#MOVEM.LA1,-(A7)SAVELINEPOINTER7LEAQUERYS(PC),A0STARTOF'FORNEXTPAGE'PROMPT LEAQUERYE(PC),A1ENDOFPROMPTBSR.SSENDMSGISENDMESSAGE#IOSCALLINP4IOS(PC)GETTHEANSWERBNEFATALERR* BSRSBARG*BNEFATALERR*)CMP.B#'N',RETRYB-PBA(A4)CHECKFOREXIT/BEQ.SHELPEXITABORTLISTINGANDLEAVEROUTINE3CLSCRLEACLS(PC),A0BEGINNINGOFCLEARSCREENCODEMOVEA.LA0,A1-ADDQ#1,A1POINTTOENDOFCLEARSCREENCODE BSR.SSENDMSGICLEARTHESCREEN&MOVEA.L(A7)+,A1RESTORELINEPOINTERCLR.LD1CLEARLINECOUNTBRAPLINEPRINTNEXTPAGE7HELPEXITBRATERMPEXITPROGRAMWITHNORMALTERMINATION PAGE8********************************************************+*SENDMESSAGEANDGETRESPONSEINTORETRYA8********************************************************GETRESP:BSR.SSENDMSGI!IOSCALLINP3IOS(PC)GETRESPONSE BNEFATALERR BSRSBARG BNEFATALERR 5CMP.B#'Y',RETRYA-PBA(A4)TESTRESPONSEAGAINST'Y'. RTSRETURN**&***************************************SEND2 OUTPUTTOLU3&**************************************SENDPRT:0MOVE.LA0,D0A0<--ADDRESSOFIOSPARAMBLOCK.6LEAOUT3IOS(PC),A0D0&A1AREMESSAGESTARTANDEND. DSENDCOMNMOVE.LD0,IOSSAD(A0)STUFFTHESTARTANDENDADDRESSESINTOTHEN.SFILLITWITHSPACES.BINHEX2MOVE.B#'',-(A0)*DBFD1,BINHEX2*ENDI*3MOVEM.L(A7)+,D0-D3/A0-A4RESTOREREGISTERS011185 RTSRETURN   C***********************************************************<<011585*$****LEFTJUSTIFICATIONOFDATA****3*SEARCHESFIELDIDENTIFIEDBYA0ANDD1FORBLANKS/*ORZEROESANDDELETESALL,SAVETHELASTONE.* *ONCALL:*D1.L<--LENGTHOFFIELD,*A0.L<--ADDRESSOFLEFTMOSTBYTEOFFIELD*!*REGISTERUSAGE:01234567 *D*** *A*****@**************************************************************** LEFTJ: &MOVEM.LD3/A1-A4,-(A7)SAVEREGISTERS)MOVE.LD1,D3LEFTJUSTIFYANDBLANKFILLLEA-1(A0,D1),A4#LJH0CMP.B#$30,(A0)LEADINGZERO?BEQ.SLJH00YES,REMOVE CMP.B#'',(A0)LEADINGBLANK?BNE.SLJH5NO,DATALJH00SUB.L#1,D3 BEQ.SLJH4 MOVE.LA0,A2 LEA1(A2),A3LJH1MOVE.B(A3)+,(A2)+ CMP.LA4,A3 BLS.SLJH1MOVE.B#'',-1(A0,D1) BRA.SLJH0LJH4MOVE.B#'0',(A0)-LJH5MOVEM.L(A7)+,D3/A1-A4RESTOREREGISTERS RTS011185>>PAGE+*********************************************BUILDTESTPATTERNINVID*+******************************************* TESTPAT: 1LEADIAGPAT1(PC),A0A0<--STARTOFTESTPATTERNBMOVE.LBUF1SAD-PBA(A4),A1A1<--LOCATIONFORTESTPATTERNINVIDLEAVIDDTP(A1),A18MOVE.B#15,D0D0<--LENGTHOFPATTERNINLONGWORDS-1 FTESTPATLMOVE.L(A0)+,(A1)+MOVETHETESTPATTERNIN164-BYTECHUNKS.DBFD0,TESTPATL* RTSRETURNFROMTESTPATPAGE/*************************************************CALCULATECHECKSUMPROCESSING*0************************************************* CHECKSUM:-*IFTHEINPUTDISKISFOREIGN,WEDON'TWANT*TOCALCULATEACHECKSUM!!*6TST.BINFORN-PBA(A4)IFINPUTDISKISNOTFOREIGN,...IFTHEN.S*@MOVE.LBUF1SAD-PBA(A4),A0A0<--STARTINGADDRESSOFVIDBUFFER8LEASECLEN-1(A0),A1A1<--ENDINGADDRESSOFVIDBUFFERCLR.WVIDCHK(A0)ZEROCHECKSUMMOVE.L#$FFFFFFFF,D0CHECK1MOVE.B(A0)+,D1 EOR.BD1,D0SWAPD0MOVE.B(A0)+,D1 EOR.BD1,D0SWAPD0CMP.LA1,A0FINALLBYTES?BLS.SCHECK1NO3 ,MOVE.LBUF1SAD-PBA(A4),A0YESSAVECHECKSUMMOVE.BD0,VIDCHK(A0)SWAPD0MOVE.BD0,VIDCHK+1(A0)*ENDI*RTSPAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *1/24/84**Thefollowingroutine>*willforceFHStorecognizethatanewvolumehasbeeninput?*intothesystem.ThisbecamenecessarybecauseaproductlikeC*theVMES10whichhasonlyonefloppydiskdrivedoesnotgenerate<*aninterruptwhenthefloppydisketteisremovedandanew?*oneisinserted.TheusercurrentlyhastousetheMTandDMT<*utilitytochangediskettes.Thisbecomesaproblemonthe>*VMES10sincethereisonlyoneterminalanditisbeingused@*potentiallyinteractivelythusdenyingtheuserthecapability"*tousetheMTandDMTutilities.*E*ThustheuserwhowantstoBACKUPhisharddisktothefloppymediaA*hasaproblemwhentheharddiskcontainsmoredatathancanbe'*accomodatedonasinglefloppymedia.*D*Toeleminatethisproblemthisroutinewillperformthefollowing:=*Assignthevolumeinthefloppymediausingthelastvolume*namethatFHSdoesrecognize-*PerformaRandomRecordreadonsectorzero.*PerformaRandomRecordwriteonsectorzero*Closethevolumeassignment?*TheabovesequenceofeventswillforceFHStorecognizethatA*anewvolumeassignmentnowexistinthesystem,thenewvolumeC*thatthebackupshouldcontinueon,thuseleminatingtheneedfor+*theusertousetheMTandDMTutilities.**Call *BSRX10010**Input8*X10000-Containsthelasttargetvolumerecognizedby *thesystem(*A4-Containstheprogrambaseaddress**Output*N/A**Registeralteration*D0-Destroyed**ConditionCodes(*Non-zero-Errorconditionencountered*Zero-SuccessfulcompletionI*----------------- It should be noted that even though error detection isK*----------------- performed in the routine and the error value is returnedI*----------------- in register D0 the user CANNOT go to the error messageL*----------------- handler to output the message because the parameter blockK*----------------- has been restored to its original value. If this becomesD*----------------- necessary it will become necessary to install theO*----------------- appropriate parameter blocks and modify the code accordingly*-----------------*X10000: DC.B'')*LasttargetvolumerecognizedbysystemX10001:DC.L0*ReservedforerrorreturnX10010:MOVEM.LA0-A1,-(A7)*SaveregistersX10100: BSRX10600&*SaveOUTFHSparameterblockonstackMOVE.W#FHASGN,FHSCMD(A0)MOVE.L#'',D0MOVE.LD0,FHSCLG(A0)MOVE.LD0,FHSCLG+4(A0)MOVE.LD0,FHSFIL(A0)MOVE.LD0,FHSFIL+4(A0)MOVE.WD0,FHSEXT(A0)*Initializerespectively*code/cmd-assign *catalogue *filename *extension!MOVE.LX10000-PBA(A4),FHSVOL(A0)*SetthevolumenametoassignMOVE.W#FOPEREW,FHSOPT(A0)*Settheassignoptions *Publicread*Publicwrite FHSCALL(A0).*Assignthevolumeusingthelastvolumename*recognizedbythesystem BEQ.SX10200*JumpifsuccessfulCMP.B#FSTAVOL,D0 BEQ.SX10400**Jumpifthevolumetobeassignedisnot-*found.Probablymeanswehavehardwarethat**generatesaninterruptwhichhasalready,*causedFHStorecognizethatwehaveanew *volume. BRAX11200X10200: BSR.SX10800'*SaveWDSKIOSparameterblockonstackMOVE.W#IOREAD,IOSFCT(A0)(MOVE.W#IOPRAN+IOPBLK+IOPIMG,IOSOPT(A0)CLR.LIOSRRN(A0)$*Thefollowinghasbeenestablished*cmd/function-read *options*randomrecordread *blocki/o*imageformat*randomrecordtoreadMOVE.LBUF1SAD-PBA(A4),A1MOVE.LA1,IOSSAD(A0)ADD.L#SECLEN-1,A1MOVE.LA1,IOSEAD(A0)2*EstablishthestartandendaddressforthereadIOSCALLWDSKIOS(PC)*Readsectorzero BNE.SX11400*BranchiferrorencounteredMOVE.W#IOWRIT,IOSFCT(A0)*Establishthe*cmd/3 function-writeIOSCALLWDSKIOS(PC)*Writesectorzerobackout BNE.SX11400*BranchiferrorencounteredX10300: BSR.SX10900!*RestoreWDSKIOSparameterblock BSRCLOSOUT*ClosethevolumeassignmentX10400:CLR.LX10001-PBA(A4)*Forceagoodreturn BSR.SX11100 *RestoreOUTFHSparameterblockX10500:MOVEM.L(A7)+,A0-A1*RestoreregistersMOVE.LX10001-PBA(A4),D0*SetreturnconditionsRTS*X10600:MOVE.L(A7)+,A1*SavereturnaddressLEAOUTFHS+OUTFHSSZ-PBA(A4),A0*A0=AddressmovefromMOVE.B#(OUTFHSSZ/2),D0*D0=NumberofwordstomoveX10700:MOVE.W-(A0),-(A7) SUB.B#1,D0 BNE.SX10700*SaveparameterblockonstackMOVE.LA1,-(A7)*RestorereturnaddressRTSX10800:MOVE.L(A7)+,A1*SavereturnaddressLEAWDSKIOS+WDSKSZ-PBA(A4),A0*A0=AddresstomovefromMOVE.B#(WDSKSZ/2),D0*D0=Numberofwordstomove BRA.SX10700*RestoreparameterblockX10900:MOVE.L(A7)+,A1*SavereturnaddressMOVE.B#(WDSKSZ/2),D0LEAWDSKIOS(PC),A0*D0=Numberofwordstomove*A0=AddressmovetoX11000:MOVE.W(A7)+,(A0)+ SUB.B#1,D0 BNE.SX11000*RestoreparameterblockMOVE.LA1,-(A7)*RestorereturnaddressRTSX11100:MOVE.L(A7)+,A1*SavereturnaddressLEAOUTFHS-PBA(A4),A0*A0=AddresstomovetoMOVE.B#(OUTFHSSZ/2),D0*D0=Numberofwordstomove BRA.SX11000X11200:MOVE.LD0,X10001-PBA(A4)*SaveerrorcodetoreturnX11300: BSR.SX11100 *RestoreOUTFHSparameterblock BRA.SX10500X11400:MOVE.LD0,X10001-PBA(A4)*Saveerrorcodetoreturn BSR.SX10900!*RestoreWDSKIOSparameterblock BRA.SX11300 *1/24/84O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ENDBEGPROC=/* =/*BREAK.AF=/*G=/* Chain file to assemble BREAK which is an associated support program=/* for the TRANSFER utility=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to BREAK.LS=/*=/IFC \1=ARGBREAK.LS=/ENDIF=/* =ASM BREAK.SA,BREAK.RO,\1;RZ=106=/*{ Included files are:=/*9995.&.IOE.EQ=/*9995.&.TR1.EQ=/*}=/*=END4 u=/* =/*BREAK.LF=/*&=/* Link chain file to create BREAK.LO=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to BREAK.LL=/*=/IFC \1=ARGBREAK.LL=/ENDIF=/*=LINK ,BREAK.LO,\1;HAMIXATTRIBUTES S PSEG SEG0:0,14 $0INPUT BREAK.ROLIB 0.&.UTILIB.ROEND=/*=END~BREAKIDNT04,00BREAKUTILITY<*************************************************************BREAKERFAKERPROGRAM-****REVISIONHISTORY122084*****THECODEWASMADEPOSITIONINDEPENDENT*&*BYREVISINGALLLEAINSTRUCTIONTO**LO4 ADOFFTHEPC.*** *THISPROGRAMGETSAROUNDTHE*8*PROBLEMOFNOTBEINGABLETOSENDABREAKTHROUGHAN*/*MCCMPORT.THEPROGRAMWILLQUEUETOEETAN*7*ATTENTIONEVENTINDICATINGABREAKONTHEINDICATED*0*PORT.THEPROGRAMTHENTERMINATES.THISWILL*8*'FAKE'THESYSTEMOUTTOTHINKTHATABREAKACTUALLY*:*OCCURREDONTHEPORT.TOEFFECTTRANSPARENTMODE,THIS*9*PROGRAMMUSTBEMANUALLYSTARTEDONTHEHOSTEXORMACS**UNDERUSERNUMBER0.*9*THETRANSFERPROGRAMMAYTHENBESTARTEDONTHEOTHER*6*SYSTEM.NOTETHATWHENLINKINGTHISPROGRAM,ITIS*8*NECESSARYTOSETTHESYSTEMATTRIBUTESOPTIONINTHE*7*LOADERINFORMATIONBLOCK.THISCANBEDONEBYSPEC-*2*IFYINGTHE'ATTRIBUTESS'OPTIONWHENLINKING.*** *SYNTAX:**BREAK<#CNXX>***9*#CNXXISTHEDEVICEMNEMONICFORTHEPORTWHICHISTO*9*FAKETHEBREAK.ADEFAULTPORTMNEMONICISUSEDIFNO*$*EXPLICITPORTNUMBERISENTERED.*<**************************************************************XREFPARSE,EDITFILE*INCLUDE9995.&.IOE.EQ*INCLUDE9995.&.TR1.EQNOLISTINCLUDE9995.&.IOE.EQINCLUDE9995.&.TR1.EQLIST SECTION0DEQU*BASEOFSEGMENTDC.B'1220844'(DEFPORTEQU'CN20'DEFAULTPORTMNEMONICDS.L40 STACKEQU*!INITREGSEQU*SAVEFORREGISTERSDS.L1 SESNUMDS.L1DS.L1USERNUMDS.L1 CATNAMDS.L1DS.L1DS.L1DS.L1+PARSAREGDS.L2SAVEFORA-REGSAFTERPARSE*QE1EQU*EVENTPARAMETERBLOCK"DC.B'&EET'TASKTORECEIVEEVENTDC.L2SESSIONCODE-DC.W0OPTIONS(NOALTERNATESERVICEVECTOR)2ATTNPTDC.L0POINTERTOATTENTIONEVENT(DYNAMIC)*ATTNEQU*ATTENTIONEVENTDC.B8LENGTH DC.B6CODECK/9ATTNDEVDC.LDEFPORTDEVICENUMBERDYNAMICALLYSTUCKHEREDC.W0DC.L0 CLGHEQU$A0CLINECOMLINECLGH*$* FHS PARAMETER BLOCK TO ASSIGN PORT FHS1EQU*DC.W$40ASSIGN(OPEN)DC.W0PUBLICREADDC.B0STATUS DC.B1PORTLOGICALUNITNUMBERDC.B''VOLUMEDC.B''USERNUMBERDC.B''CATALOGUENAMEDC.B''FILENAMEDC.B''EXTENSIONDC.W0RESERVED DC.B0WCODE DC.B0RCODEDC.W0RECORDLENGTHDC.L0SIZE/POINTER*'* ERROR MESSAGE HANDLER PARAMETER BLOCK*4ERRPBLKDC.L0USERREGD0CONTAINSERRMSGKEYVALUE-DC.L0USERREGA0POINTSATI/OCONTROLBLK,DC.B0ERROROPTIONS[BIT0=QUERYRESPONSE]'DC.BLDFLUNUSERLDFLUNLUNFORSCREENDC.B0QUERYRETURNCHARACTER%DC.BCDFLUNUSERCDFLUNFORKEYBOARD(DC.L0BEGINNINGOFUSERTEXTPLUGPOOL"DC.L0ENDOFUSERTEXTPLUGPOOL* * I/O BUFFER BUFFDS.B1 BUFFEEQU*-1DS0* BREAKEQU** * INITIALIZE#LEASTACK(PC),A7SETSTACKPOINTER%LEAD(PC),A6USEA6ASBASEREGISTER4MOVEM.LD0-D7,INITREGS-D(A6)SAVEINITIALREGISTERSLEAATTN-D(A6),A06MOVE.LA0,ATTNPT-D(A6)SETPOINTERTOATTENTIONEVENT** PARSE THE COMMAND LINE(LEACLINE-D(A6),A0COMMANDLINEADDRESS BSRPARSE TST.LD00BPL.SCMLOK1BRANCHIFNOERRORONCOMMANDLINE4CLERRMOVE.L#EM_NVE,D0COMPLAINOFBADCOMMANDLINE BSR.SERRMSG BRABREAKX*6* FILL IN DEVICE MNEMONIC FOR ATTENTION EVENT ON BREAK?CMLOK1MOVEM.LA1-A2,PARSAREG-D(A6)SAVERETURNREGSFROMPARSESWAPD0(CMP.B#$40,D0WASTHEREANINPUTFIELD?0BEQ.SCMLOK2BRANCHIFNO-MNEMONICALREADYIN(LEACLINE-D(A6),A0COMMANDLINEADDRESS[,]***?***whereloadmodulehasdefaultextension.LO,butmaybe***C***either.LOor.SY,andS-recordfilehasdefaultextension*** ***.MX.***G********************************************************************** REVISIONHISTORY:%??/??/??InitialwritingbyFloydB..2/18/82VERSAdos3.0releasebySteveFranck:1Fixedproblemw/crossoverfrom16-bitto24-bit addresses.+Putincheckfornosourcefilespecified.'Putincheckforexistingoutputfile.et.al..9/01/82VERSAdos4.0releasebySteveFranck:2Allow.SYaswellas.LOextensiononloadmodule./Fixedproblemw/DOYOUWISHTOOVERWRITE?and,%;3203 /chainfiles(answernotreadincorrectlyfromachainfile).#Addedheaderandrevisionhistory.>12/20/84OPTAaddedtoassemblyroutinesandcodetestedand0showntobepositionindependent.PeggyHassett }CONST REVISION='122086 44';S1RECSIZE=32;@ABORTCF=-16384;{VALUETOPUTINDIAGNOSTICREGISTERTOABORTACHAINFILE};NOABORTCF=0;{VALUETOPUTINDIAGNOSTICREGISTERTONOTABORTACHAINFILE} TYPE%{$A=2USE2-BYTEINTEGERARITHMETIC}INTEGER=-32767..32767;INTEGER2=-32768..32767;FILENAME=STRING[30];4FILESTAT=(FOUND,PROTECT,NOTFOUND,INVALID,UNABLE);(EXTENSION=PACKEDARRAY[1..2]OFCHAR;&LINT=PACKEDARRAY[1..3]OFINTEGER;'SECTOR=PACKEDARRAY[0..255]OFCHAR;LOADMOD=FILEOFSECTOR; VAR'LO')AND/(COPY(FNAME,LENGTH(FNAME)-1,2)<>'SY')THENBEGIN=WRITELN('ERROR--INPUTFILEMUSTHAVEEXTENSION.LOOR.SY'); HALT(0);END;-IFCOPY(FNAME,LENGTH(FNAME)-4,2)='.&'THENBEGIN/WRITELN('ERROR--NOINPUTFILEWASSPECIFIED'); HALT(0);END;RESET(LOADMODULE); *{CHECKFOREXISTINGOUTPUTFILE&OPEN}%P$RDEFAULT(LOADMODULE,SRECORD,'MX');FNAME:=P$1FNAME(SRECORD);FSTATUS:=P$LOOKUP(FNAME);1IF(FSTATUS=FOUND)OR(FSTATUS=PROTECT)THENBEGINAWRITE('FILEEXISTS--OKTOOVERWRITE(Y/N)?');P$FORCE(OUTPUT);READLN(ANSWER);,IF(ANSWER<>'Y')AND(ANSWER<>'y')THENDONE:=TRUE;END;IFNOTDONETHENREWRITE(SRECORD); END;{$E}.(*FUNCTIONTOMAKEINTEGERFROMTWOBYTES*)8FUNCTIONMAKEINT(INDEX:INTEGER;VAL:SECTOR):INTEGER; BEGIN 7MAKEINT:=INT(VAL[INDEX])*256+INT(VAL[INDEX+1]) END;{$E}4PROCEDURE MAKE_LINT(DATA:INTEGER;VAR RESULT : LINT);TYPEMAGICREC=RECORDCASEBOOLEANOFTRUE:(INTPART:INTEGER);FALSE:(CHPART1:CHAR;CHPART2:CHAR)END;(*MAGICRECORD*)VAR MAGIC:MAGICREC; BEGIN MAGIC.INTPART:=DATA;RESULT[3]:=0;!RESULT[2]:=INT(MAGIC.CHPART1);!RESULT[1]:=INT(MAGIC.CHPART2);END;{$E}.PROCEDUREMULT_LINT_BY_256(VARRESULT:LINT);BEGIN RESULT[3]:=RESULT[2];RESULT[2]:=RESULT[1];RESULT[1]:=0;END;{$E}6PROCEDUREINC_LINT(VARRESULT:LINT;DATA:INTEGER); VAR I:0..3; C:INTEGER;TEMP:INTEGER; BEGIN I:=0; C:=DATA; REPEAT I:=I+1;TEMP:=RESULT[I]+C;C:=TEMPDIV256;IFC>0THENTEMP:=TEMP-256;RESULT[I]:=TEMP UNTIL(I=3)OR(C=0) END;{$E}-PROCEDURE WRITES0REC(LOADINFOBLOCK : SECTOR); VAR I:INTEGER;CHK6 SUM:INTEGER;  BEGIN *CHKSUM:=16#07;(*HEXREPRESENTATION*)WRITE(SRECORD,'S0070000'); FORI:=0TO3DO(EMITBYTE(INT(LOADINFOBLOCK[I]),CHKSUM); 2EMITBYTE(255-CHKSUM,CHKSUM);(*PUTOUTCHKSUM*) ;WRITELN(SRECORD);(*WRITELNACTUALLYWRITESTHERECORD*)END;{$E}DPROCEDURE WRITES2REC(VAR WORKING_ADR : LINT; CURRDATASECTOR:SECTOR); VARINDEX,CHKSUM:INTEGER; BEGIN >WRITE(SRECORD,'S224');(*PUTOUTIDENT&CARDSIZEINHEX*) CHKSUM:=36;(*INITCHKSUM*) 0)OR(END_ADR<>-1))DO BEGIN "MAKE_LINT(START_ADR,WORKING_ADR);MULT_LINT_BY_256(WORKING_ADR); #FORADR:=START_ADRTOEND_ADRDOIFEOF(LOADMODULE)THENBEGIN2WRITELN('ERROR--INPUTFILEISNOTALOADMODULE'); HALT(0);ENDELSEBEGIN!READ(LOADMODULE,CURRDATASECTOR);$IF(ADR>=0)AND(ADR<=255)THEN'WRITES1REC(WORKING_ADR,CURRDATASECTOR)ELSE'WRITES2REC(WORKING_ADR,CURRDATASECTOR)END; MEM_ICNT:=MEM_ICNT+1;MEM_IPTR:=MEM_IPTR+4;.START_ADR:=MAKEINT(MEM_IPTR,LOADINFOBLOCK);0END_ADR:=MAKEINT(MEM_IPTR+2,LOADINFOBLOCK); ENDEND;{$E}1PROCEDURE WRITES9ORS8REC(LOADINFOBLOCK : SECTOR); VARI,CHKSUM:INTEGER;START:INTEGER;  BEGIN #IFINT(LOADINFOBLOCK[23])=0THEN,BEGIN{ADDRESSFITSIN16BITS--USES9REC}WRITE(SRECORD,'S903'); CHKSUM:=3; START:=24;ENDELSE-BEGIN{ADDRESSTAKESUP24BITS--USES8REC}WRITE(SRECORD,'S804'); CHKSUM:=4; START:=23;END; FORI:=STARTTO25DO(EMITBYTE(INT(LOADINFOBLOCK[I]),CHKSUM); EMITBYTE(255-CHKSUM,CHKSUM);6WRITELN(SRECORD);(*WRITEOUTTHES9ORS8RECORD*) END;{$E}BEGIN(*MAIN*) &WRITELN('BUILDSREVISION',REVISION);*INIT;(*PERFORMINITALIZATIONROUTINE*) IFNOTDONETHEN IFEOF(LOADMODULE)THENWRITELN('LOADMODULEISEMPTY')ELSEBEGIN READ(LOADMODULE,LOADINFOBLOCK);7WRITES0REC(LOADINFOBLOCK);(*PROCESSTHES0RECORD*)5WRITES1ANDS2REC;(*PROCESSTHES1ANDS2RECORDS*)>WRITES9ORS8REC(LOADINFOBLOCK);(*PROCESSTHES9ORS8REC*)END; 7P$SETDIAG(NOABORTCF);{SETUPTONOTABORTCHAINFILE} E7 ND. =/* =/*CONFIG.LF=/*'=/* Link chain file to create CONFIG.LO=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to CONFIG.LL=/*=/IFC \1=ARGCONFIG.LL=/ENDIF=/*=LINK ,CONFIG.LO,\1;AHMIX ATTRIBUTES PSINPUT CONFIG.ROINPUT CONFIG.BIN2ASCI.ROINPUT CONFIG.CFIGDATA.ROINPUT CONFIG.CLSDASGN.ROINPUT CONFIG.CNFGTBLS.ROINPUT CONFIG.FORCE.ROINPUT CONFIG.GETMEMCB.ROINPUT CONFIG.GETSTRCB.ROINPUT CONFIG.HEX2ASCI.ROINPUT CONFIG.INITLIZE.ROINPUT CONFIG.MODMEMCB.ROINPUT CONFIG.MODSTRCB.ROINPUT CONFIG.PRINT.ROLIB 0.&.PASVMDOS.ROEND=/*=END=/* =/*CONFIG.PF=/*I=/* Chain file to compile CONFIG utility and assemble associated routines=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to CONFIG.LS=/*@=/*NOTE:Thischainfilerequiresthepascalcompilerresideon9=/*thesystemdefault.Thecompilerisnotprovidedwith7=/*thisproduct,thereforethischainfilewillabort.=/*=/IFC \1=ARGCONFIG.LS=/ENDIF=/*)=PASCAL CONFIG.SA,CONFIG.PC,TEMP1.LS;Z=70=/*{ Included files are:=/*--none--=/*}=/* =POPTIM CONFIG.PC,CONFIG.PO;Z=70=PASCAL2 CONFIG.PO=COPYTEMP1.LS,TEMP2.LS;Y=/*=/*5=ASM CONFIG.BIN2ASCI.SA,CONFIG.BIN2ASCI.RO,TEMP1.LS;R=/*{ Included files are:=/*--none--=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*9=ASM CONFIG.CFIGDATA.SA,CONFIG.CFIGDATA.RO,TEMP1.LS;RZ=70=/*{ Included files are:=/*9995.&.EXE.EQ=/*9995.&.IOE.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*9=ASM CONFIG.CLSDASGN.SA,CONFIG.CLSDASGN.RO,TEMP1.L7 S;RZ=70=/*{ Included files are:=/*9995.&.IOE.EQ=/*9995.&.NIO.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*9=ASM CONFIG.CNFGTBLS.SA,CONFIG.CNFGTBLS.RO,TEMP1.LS;RZ=70=/*{ Included files are:=/*9995.&.IOE.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*3=ASM CONFIG.FORCE.SA,CONFIG.FORCE.RO,TEMP1.LS;RZ=70=/*{ Included files are:=/*--none--=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*9=ASM CONFIG.GETMEMCB.SA,CONFIG.GETMEMCB.RO,TEMP1.LS;RZ=70=/*{ Included files are:=/*9995.&.IOE.EQ=/*9995.&.TR1.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*5=ASM CONFIG.GETSTRCB.SA,CONFIG.GETSTRCB.RO,TEMP1.LS;R=/*{ Included files are:=/*--none--=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*5=ASM CONFIG.HEX2ASCI.SA,CONFIG.HEX2ASCI.RO,TEMP1.LS;R=/*{ Included files are:=/*--none--=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*:=ASM CONFIG.INITLIZE.SA,CONFIG.INITLIZE.RO,TEMP1.LS;RZ=100=/*{ Included files are:=/*9995.&.IOE.EQ`'=/*9995.&.RMA.EQ=/*9995.&.TR1.EQ=/*9995.&.TR1RTCD.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*:=ASM CONFIG.MODMEMCB.SA,CONFIG.MODMEMCB.RO,TEMP1.LS;RZ=100=/*{ Included files are:=/*9995.&.IOE.EQ=/*9995.&.NIO.EQ=/*9995.&.RMA.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*5=ASM CONFIG.MODSTRCB.SA,CONFIG.MODSTRCB.RO,TEMP1.LS;R=/*{ Included files are:=/*--none--=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*3=ASM CONFIG.PRINT.SA,CONFIG.PRINT.RO,TEMP1.LS;RZ=70=/*{ Included files are:=/*9995.&.IOE.EQ=/*}=/*=COPYTEMP1.LS,TEMP2.LS;A=/*=/*=COPYTEMP2.LS,\1;Y=DELTEMP1.LS;Y=DELTEMP2.LS;Y=/*=ENDPROGRAM CONFIG (input,output);  {$I-, O+, D+, W+.I-Commandlinenotscannedforexternalfile9O+Sourcestatementsincludedascommentsinasmlisting7D+Iferrorconditionexistsatruntime,D1<--unit#-W+Warningfornon-standardPascalgenerated.R+Verifiesindicesandsubrangeareinrange CONTENTS N The CONFIG banner with the most current date string can be found in PROCEDURE/ WrMsg under the enumerated varaible, "banner". @The following list names and is ordered after CONFIG's contents: CONSTants Data Structure TYPEs Global VARiables External PROCEDUREsFORCE INITLIZE GETMEMCB MODMEMCB BIN2ASCI HEX2ASCI GETSTRCB MODSTRCBPRINT CLSDASGN Minor PROCEDUR8 EsInitializationPROCEDUREs DoHeader FixScreen InitTblPtrs GenScrnFixes InitFlds InitAttrVals Dec2ASCI Int2ASCIZeroCBGrpBitsGrp InitParmVals BldScrns+BldCnfgScrn(locatedwithReadProcedures) WritePROCEDUREs StopScreenWrMsg WrMiscMenu WrHelpMenu WrValMenu)PrintCopy(locatedwithReadProcedures) ReadPROCEDUREsSetMsg SkipBlnks RdDevNameStoreChGoodCh BldCnfgScrn SaveStars InstallStars RdChoice PrintCopy RdNewVal ConversionPROCEDUREs CkValbuf CTRL2bin ASCI2bin GetBaudRate ModStrVal GetBaudCodeModAttrChgAttr awd2ASCInInt Major PROCEDUREs Initialize GetDevName GetCBType ModParms DoConfig CopyNewCB Main PROCEDURE}{$E}  CONST?astrkcol=36;{colwhereasteriskisplacedforvaluechange}3attrbits=17;{numberofbitsinattributesword}0attwrdrow=0;{screenrowforattributesword}8attrvallen=16;{lengthofoneASCIIattributesvalue}+baudlen=10;{lengthofbaudratestring}:baudrate=13;{positionofbaudrateinparameterslist} blank='';blank5='';blank10='';blank20='';blank30=''; col2=36;m9:E7=&1.C6M>IFINLVY^BfGnPv4~@FAeiKCOPRUMK0dcol=4;{colwheretargetdevicenamebegins}=EXORterm=0;{codeforEXORterminterminaltypefldinCB}0headercol=48;{#ofcolsinparm/attrheader}7Hcol=3;{colwhere"H.Help"begins,usedassignal}(helpcols=64;{#ofcolsinhelpmenu}2helprows=13;{#ofrowsreservedforhelpmenu}?lastgrploc=14;{locationoffirstbitinlastgroupofbits}Amaxdecloc=10;{maximum#ofdecimaldigitsallowedininteger}@maxhexloc=8;{maximum#ofhexidecimalitsallowedininteger}1misccols=52;{#ofcolsinmiscellaneousmenu};miscrows=7;{#ofrowsreservedformiscellaneousmenus}numbitsgrp=4;{numberofbitsgroupedtogetherfordisplay},numcodes=16;{currentmaxbaudratecode}.numgrps=4;{numberofgroupsinbitstring}>numscrncol=72;{numberofprintablecolsinparm/attrmenu}7scrnrows=20;{#ofrowsreservedforparm/attrmenu}-star='*';{toidentifychangedparameters} sz4=4; sz5=5; sz8=8;:valcol=38;{colwherevaluesforparm/attrmenusbegin}?vallen=33;{#ofcharinvalbufforASCIIvalueinp/amenu}/XON=6;{bitwhereXONisinparametersmask}  {devicetypecodesfromDCB} fdisk=1; hdisk=2; term=3; prnter=4; magtape=5;{$E} {DATASTRUCTURES}    TYPE  9{The first three types below allow integers in the Pascal9datastructurestobethedeclaredwiththepropernumber4of bytes for use in parameter blocks in the assembly routines.} *smallint=-128..127;{1byteofstorage}-medint=-32768..32767;{2bytesofstorage}8longint=-2147483648..2147483647;{4bytesofstorage}  {STRINGS}  'strg4=PACKEDARRAY[1..sz4]OFCHAR; 'strg8=PACKEDARRAY[1..sz8]OFCHAR; .namestrg=PACKEDARRAY[1..namelen]OFCHAR; +strg33=PACKEDARRAY[1..vallen]OFCHAR;{$E}  ${TABLESUSEDFORBUILDINGSCREENS}   8{The record, parmtable, is used to hold the names of the8parameters fields and other information used in building2theparametersscreen.Thetableisinitializedas4constant in an assembly routine by means of a macro.4Parmtable is really a set of 5 tab8 les, one table for7eachdevicetype.Thenumberofentriesforeachofthe7device tables is calculated and inserted into the table4head at assembly time so that any table additions or4deletions at a later time will not require recoding.,Each table varies for the number of entries.4The order of the tables in the set follows the order9ofthedevicetypecodefoundintheDCBforeachdevice;Oi.e. the first table is for hard disks, the second for floppy disks, and so on.3The field information in each table is ordered with6respect to the DCB as described in the Data ManagementKManual; e.g., with terminals, the attributes word is followed by line width7and lines per page in the DCB, the table and the menu.}  parminfo=PACKEDRECORD(name:namestrg;{holdsparametername}1size:smallint;{#ofbytesinparametervalue}5base:CHAR;{baseparameterisdisplayedonscreen}1offset:longint;{offsetintoCBforparameter}END;  ,parmtblptr=^parmtable;{addressoftable} parmtable=PACKEDRECORD&numparm:smallint;{#rowsintable}(entrylen:smallint;{#ofbytesinrow}2parmrow:PACKEDARRAY[0..scrnrows]OFparminfo;END; K{This pointer points to the string 'NOT MODIFIABLE' which has enough blanks- to make the string length equal to namelen.} 0notmodstrg=PACKEDARRAY[1..nomodln]OFCHAR;notmod=^notmodstrg; 8 {-----------------------------------------------------} 4{The record, attrtable, is used to hold the names of6the attributes fields corresponding to the bits in the3attributesword.Thenamesareusedinbuildingthe3attributesscreen.Itisinitializedandorderedin$the same manner as parmtable above.}  ,attrtblptr=^attrtable;{addressoftable} attrtable=PACKEDRECORD)numattr:smallint;{#ofrowsintable})entrylen:smallint;{#ofbytesinrow}>attrrow:PACKEDARRAY[0..scrnrows]OFnamestrg;{attrname}END;   8 {-----------------------------------------------------} 5{The record, valtable, is used to hold the attributes6values for the attributes word and is used in building6theattributesscreen.Itisinitializedandorganized+inthesamemannerasparmtableabove.Each3entry has two values for each bit in the attributes7word; one for when the bit equals zero and one for when5thebitequalsone.Onlyonevalueforeachbitfield*appears in the attributes menu at a time.}  +valtblptr=^avaltable;{addressoftable} Ibothvals=PACKEDRECORD{val0=attrvalifbit=0;val1=attrvalifbit=1}-val0:PACKEDARRAY[1..attrvallen]OFCHAR;-val1:PACKEDARRAY[1..attrvallen]OFCHAR;END; avaltable=PACKEDRECORD%numattr:smallint;{#rowsintable}(entrylen:smallint;{#ofbytesinrow}1valrow:PACKEDARRAY[0..scrnrows]OFbothvals;{attributevalues}END;   7{-----------------------------------------------------}  A{The table, baudtbl, has the legal baud rates and their characterJrepresentations arranged in the order of the baud rate codes for the DCB.} 'baudstrg=array[1..baudlen]OFCHAR; baudinfo=RECORDrate:longint;{baudrate}8ASCIbaud:baudstrg;{charrepresentationofbaudrate}END; Hbaudtbl=array[0..numcodes]OFbaudinfo;{baudrate&itsASCIIstrg} ;baudtblptr=^baudtbl;{pointstoheadofbaudratetable}{$E}  {MENUS&SCREENS}    *{The record, scrnimage, is an image of the*parameters or attributes screen in memory.-Parmscrn is built from parmtable and attrscrnCisbuiltfromattrtableandavaltable.Oncebuilt,theyarekeptinDmemoryandmodifiedastheuserentersnewvalues.WhenanewtargetDdevice name is entered by the user, these two menus are built anew.} 5headerptr=^rowimage;{pointstotheheaderstring} 1rowimage=PACKEDARRAY[1..numscrncol]OFCHAR;{1rowofascreen} scrnimage=PACKEDRECORD#header:rowimage;{screenheader}19 scrnln:PACKEDARRAY[0..scrnrows]OFrowimage;#{attributes/parameterscreenrows}END;  7 {----------------------------------------------------}  0{The matrix, misctable, is a set of tables which-contain the images of all the screens for the&various selection menus except for the,parameters screen and the attributes screen.,Thereisonetableforeachmenu.Eachtable)is initialized as constant in an assembly,routine.Eachtableispointedtobyitsown/pointer so that it can be written out directly..All of the tables are the same number of rows.+Each of these tables is stored separately.}  0miscptr=^misctable;{pointertoamenuinthe abovetable} Imiscline=PACKEDARRAY[1..misccols]OFCHAR;{miscellaneousmenuline} Imisctable=PACKEDARRAY[1..miscrows]OFmiscline;{miscellaneousmenu} 8 {-----------------------------------------------------} E{The record, helpimage, contains the help screen that is presented toDtheuserwhen"H"isselectedonamenu.ThereareasmanydifferentDhelpscreensastherearemenus,onehelpscreenforeachmenu.TheyGare initialized as constant in an assembly routine, and their addressesBarepassedbackintheirrespectivepointers.TheyarewrittenoutEthroughtheuseoftheirpointers.Eachofthesehelpmenusisstored separately.}  -helpptr=^helpimage;{pointertohelpmenu} lngwrd11:longint;{thananycurrentlyusedforconfigure/}?lngwrd12:longint;{statusrequests.Inthefuture,however,}>lngwrd13:longint;{thesizeoftheparameterblockusedto}Elngwrd14:longint;{accepttheinfoforaconfigure/statusrequest}>lngwrd15:longint;{shouldgrowtobelargerthantheCBblk}Flngwrd16:longint;{datastructure,someofthereturnedinfowill}Glngwrd17:longint;{writeoverpartoftheRMA,corruptingaddresses}>lngwrd18:longint;{andcausingCONFIGtocrashinaPascal}/lngwrd19:longint;{runtimelibraryroutine.}lngwrd20:longint; END;{CBblk}{$E}   {REGISTERS&DEVICES}   E{The register values maintained by SCT will be stored in this record.DIt is initialized in an assembly routine at the beginning of CONFIG.FIts values are obtained from the Pascal Runtime Maintenance Area, RMA,Cwhere they were stored by the Pascal runtime library routine, INIT,?whenCONFIGwascalled.Thelengthoftheoptionsfieldandthe>optionsfromthecommandlineareintheRMAalso.Theycanbe:added to the record at a future time if it is decided that8options should be included; e.g., a scroll mode option.}  regsavarea = PACKED RECORD(montaskname:strg4;{monitortask,D0}3monsessnum:longint;{monitorsessionnumber,D1}+udefvol:strg4;{userdefaultvolume,D2},udefnum:medint;{userdefaultnumber,D3}.udefcat:strg8;{userdefaultcatalog,D4-5}.cmdlength:medint;{commandlinelength,D6})LUN:longint;{logicalunitnumber,D7}%devid:strg4;{devicemnemonic,A1}*ulognum:medint;{userlogonnumber,A2}END;  8 {-----------------------------------------------------}  8{The values in this record will be used in making menus.:They will determine how the screen is cleared and how manyline feeds will be printed.}  userdev = PACKED RECORD"termtype:smallint;{0=EXORterm}(devtype:smallint;{logondevicetype}3numlines:longint;{numberoflinesonlogonCRT}END; 8 {-----------------------------------------------------} <{This record holds the name of the device to be reconfiguredand its device type.}   trgtdev = PACKED RECORD*name:strg4;{devicetobereconfigured}%devtype:smallint;{typeofdevice}END;{$E} "{GLOBALVARIABLES}   VAR <{The following variables are the global variables in CONFIG.2Most of them are of the user defined types above.}  ({CB,residesintheglobaldataarea.It>receives the values for the devices to be reconfigured throughCan IOS configure/status request, or performs configurations through?configure defaults and configure commands in assembly routines.=Its address is passed to an assembly routine where it is usedAas the address of the parameter block for the configure commands.BCB is also modified by the user's new values for reconfiguring thetarget devices.} %CB:CBblk;{CBinfoforalldevicesdescribedaboveinCBblk} DCB:CBblk;{DCBinfo} CCB:CBblk;{CCBinfo}8 {-----------------------------------------------------} 5asmmem:longint;{usedtostoreaddressofassembly#datasectionwithparameterblocksforFHS&IOScalls} 3attrscrn:scrnimage;{imageofanattributemenu;builtanewwheneveranewtargetdeviceischosen}6numattrlns:smallint;{#oflinesinattributemenu;changeswheneveranewtargetdeviceischosen} 0clrscrn:strg8;{arrayfortheescapesequencetoclearthescreen;itislargeenoughtoholdtheescapesequenceforany terminal} 4duration:cnfgtime;{indicatesifconfigurationis configuredefaultsorconfigure request} 3goodbye:BOOLEAN;{indicateswhenCONFIGisreadytoterminate} 9twicenumlns:integer;{usedtodecideifanylinefeedscanbein: sertedbetweenthefieldsintheparametersandattributesscreens} 2logondev:userdev;{storesinfoabouttheuser'slogondevice;describedabove inuserdev} 3menu:menutype;{indicateswhichmenutodisplay; holdstheenumeratedtypevalueusedinselectingwhichmajorprocedurereceivescontrol} (msg:msgtype;{anenumeratedtypethatpointstooneofanumberofmessagesfordisplay;ifnomessageisnecessaythenithasavalueinitwhichindicatesthereisnomessage} 2parmscrn:scrnimage;{imageofaparametermenu;builtanewwheneveranewtargetdeviceischosen}6numparmlns:smallint;{#oflinesinparametermenu;changeswheneveranewtargetdeviceischosen}   )prntname:strg4;{printerforhardcopy} 1regsav:regsavarea;{hasD0-D7,A1-A2;describedaboveinregsavarea} :trgteqlg:BOOLEAN;{reportsiftargetdevice=logondev} .target:trgtdev;{devicetobereconfigured;describedaboveintrgtdev} +userbuf:strg33;{preservesuser'sinput} ,valbuf:strg33;{ASCIIstringforavalue}{$E}  {POINTERS}   2parmhdr:headerptr;{pointstoheaderstringforbuildingparmscrn}2attrhdr:headerptr;{pointstoheaderstringforbuildingattrscrn}2nomod:notmod;{pointstoNOTMODIFIABLEstring} -ptptr:parmtblptr;{pointerto1sttableinparmtablesetoftables;valueneverchanges}2parmptr:parmtblptr;{pointertospecificdevicetableinparmtableset;itsvaluechangeswheneveranewtargetdeviceis choosen} 8 {-----------------------------------------------------}  1atptr:attrtblptr;{pointerto1sttableinsetofattrtable;itvalueneverchanges} 2attrptr:attrtblptr;{pointertospecificdevicetableinattrtableset;itsvaluechangeswheneveranewtargetdeviceischosen} 8 {-----------------------------------------------------}  0vtptr:valtblptr;{pointerto1sttableinsetofvaluetables;itsvalueneverchanges} 1avalptr:valtblptr;{pointertospecificdevicetableinavaltable;itsvaluechangeswheneveranewtargetdeviceischosen} 8 {-----------------------------------------------------}  C{Each pointers below points to a specific menu in the set of menus,6misctable.Thevaluesinthesepointersneverchange.} 2dnmmnptr:miscptr;{pointertoDeviceNameMenu}7bfmmnptr:miscptr;{pointertoBootfile/memoryMenu}(CBmnptr:miscptr;{pointertoCBMenu}0cfgmnptr:miscptr;{pointertoConfigureMenu}.cpymnptr:miscptr;{pointertoCopyCBMenu} 8 {-----------------------------------------------------} H{The pointer below point to the help menus for the various miscellaneous"menus such as the configure menu.} 2CBthelp:helpptr;{pointstothehelpscreenforDCB/CCBmenu}2bfmhelp:helpptr;{pointstothehelpscreenforbootfile/memorymenu}3parmhelp:helpptr;{pointstothehelpscreenforparametersmenu}3attrhelp:helpptr;{pointstothehelpscreenforattrributesmenu}3cnfghelp:helpptr;{pointstothehelpscreenforconfiguremenu}3copyhelp:helpptr;{pointstothehelpscreenforhardcopymenu}  F{--------------------------------------------------------------------} :baudptr:baudtblptr;{pointstoheadofbaudratetable}{$E}   {MASKS}   1attrmask:mask;{attributesmaskforthetargetdevice;itsvaluechangesonlywhenanewtargetdevice ischosen} .amask:mask;{attributesmaskforthetargetdevice;itsvaluechanges whentheusergivesanewvalue$toitorthetargetdevicechanges} 8 {-----------------------------------------------------} 7Caword,Daword:mask;{attributeswordforthetargetdevice;thevaluechangeswheneveranewtargetdeviceischosenandpossiblybytheuserbeforeconfiguration} 6attrword:mask;{attributeswordusedtobuildmenu} 8 {: -----------------------------------------------------}  1parmmask:mask;{parametersmaskforthetargetdevice;itsvaluechangeswheneveranewtargetdeviceischosen;itgetsrevisedinreadtimeout/writetemeoutfieldsfortemporaryconfiguration}.pmask:mask;{parametersmaskforthetargetdevice;itsvaluechangesonlywhenanewtargetdeviceischosen;itisacopyoftheoriginalparametersmaskvalueforthetargetdevice}{$E}    '{EXTERNALPROCEDURES}   I{The following procedures are written in M68000 assembly and are includedat link time.}  *PROCEDURE FORCE (VAR fil : text); FORWARD;J{Forces the output buffer to be written in a WRITE call without a carriagereturn.}   FORi:=0TOnumparmlns-1DO{fillmenuwiththeparameters}FORj:=1TOnamelenDO>parmscrn.scrnln[i,j]{copyfieldforparmmenufromparmtbl} :=parmptr^.parmrow[i].name[j]; ;numattrlns:=attrptr^.numattr;{getnumberofattributes}>FORi:=0TOnumattrlns-1DO{attributescountstartedat1}FORj:=1TOnamelenDO8attrscrn.scrnln[i,j]{copyattrtblrowintoattrmenu}:=attrptr^.attrrow[i,j] END;{InitFlds}{$E}  PROCEDURE InitAttrVals; 9{InitAttrValsputstheattributesvaluesintoattrscrn.} VARbit:selection;i,j:integer; BEGIN{InitAttrVals} *bit:=zero;{startatbit0inattrmask} )IFduration=per; m{ifchangeistoDCB}+THENattrword:=Daword{useDCBattrword}1ELSEattrword:=Caword;{elseuseCCBattrword} 8FORi:=0tonumattrlns-4DO{novaluesforhelp/quit}BEGIN{forloop},IFbitINattrword{bit=1;useval1values}!THENFORj:=1TOattrvallenDOattrscrn.scrnln[i,j+valcol]5:=avalptr^.valrow[i].val1[j]{copyvalueintomenu}:ELSEFORj:=1TOattrvallenDO{bit=0;useval0values}attrscrn.scrnln[i,j+valcol]6:=avalptr^.valrow[i].val0[j];{copyvalueintomenu} $bit:=succ(bit);{gotonextbit}END;{forloop} {putnotmodifiableintomenu} bit:=zero;1FORi:=0TOnumattrlns-4DO{checkeachfield}#BEGIN{findnotmodifiablefields};IFNOT(bitINattrmask)THEN{bit=0meansnotmodifiable}1FORj:=1TOnomodlnDO{copy'notmodifiable'}.attrscrn.scrnln[i,j+notmodcol]:=nomod^[j];$bit:=succ(bit);{gotonextbit}END;   END;{InitAttrVals}{$E}  %PROCEDURE Dec2ASCI (value : longint); {DEC2ASCIchangesthe8binarynumberinvalueintoadecimalcharacterstring.7Itdoesthisbytakingthevalueanddividingby10to6gettheremainderandconvertingtheremainderintoa4character.Thisisrepeatedwiththequotientuntil6thequotient=0.Thisworksbecausetheprocedureis7writteninPascalandgivesdecimalarithmeticresultswithconversion.} CONST$divisor=10;{baseforconversion} VAR7buf:strg33;{temporarystroageforconverteddigits}%i,j:INTEGER;{indicestobuffers})quot:INTEGER;{nextnumbertoconvert}*rem:INTEGER;{thisisdigittoconvert} BEGIN {Dec2ASCI} 'IFvalue<>0THEN{numbertoconvert} BEGIN{value<>0}4i:=0;{pointtobeforestartoftemporarybuffer}+quot:=value;{initializefirstdividend}-REPEAT{getremaindersandconverttoASCII}0rem:=quot;{preservequotforlaterdivision}/rem:=remmod10;{getdigittobeconverted}"i:=i+1;{pointtobuflocation}/buf[i]:=chr(rem+ord('0'));{storechar}.quot:=quotDIVdivisor;{getnextdividend}-UNTILquot=0;{lastremainderjuststored} ){popcharactersoutoftemporarystorage&andputinvalbufinforwardposition1ipointstoendofbufwhere1stdigitisstored4jpointstowherefirstnumbershouldgoinvalbuf} #j:=2;{startdigitsafterblank}REPEATvalbuf[j]:=buf[i]; j:=j+1; i:=i-1; UNTILi=0;END{value<>0} ELSEvalbuf[2]:='0'; END;{Dec2ASCI}{$E}   CPROCEDUREInt2ASCI(base:CHAR;size:smallint;value:longint);  ${Int2ASCIchangesanintegerintoa7characterstringbycallingtheappropriateroutine.} VARi:integer;{index} BEGIN{Int2ASCI} CASEbaseOF/'B':BIN2ASCI(valbuf,value,size);{binary}"'D':Dec2ASCI(value);{decimal}4'H':HEX2ASCI(valbuf,value,size);{hexadecimal}&'N':BEGIN{novalueforthisfield} value:=0;FORi:=1TOvallenDOvalbuf[i]:=blank;END; END;{case} END;{Int2ASCI}{$E}  PROCEDURE ZeroCB; E{ZeroCBzeroesouttheCBrecordbeforeaconfigurestatusrequest.} BEGIN{ZeroCB} WITHCBDOBEGIN{CB=0})staterr:=0;{devicestatus/errorcode}/chancode:=0;{channelcodeforabovestatus}-devcode:=0;{devicecodeforabovestatus}-drvcode:=0;{drivercodeforabovestatus}!attrmask:=0;{attributesmask} parmmask:=0;{parametermask}!attrword:=0;{attributesword}1lngwrd0:=0;{otherfields+16reservedbytes}lngwrd1:=0;lngwrd2:=0;lngwrd3:=0;lngwrd4:=0;lngwrd5:=0;lngwrd6:=0;lngwrd7:=0;,lngwrd8:=0;{WARNING!!!!!!}lngwrd9:=0;7lngwrd10:=0;{NOTE:Thisparameterblockislarger}9lngwrd11:=0;{thananycurrentlyusedforconfigure/}:lngwrd12:=0;{statusrequests.Inthefuture,however,}9lngwrd13:=0;{thesizeoftheparameterblockusedto}@lngwrd14< :=0;{accepttheinfoforaconfigure/statusrequest}9lngwrd15:=0;{shouldgrowtobelargerthantheCBblk}Alngwrd16:=0;{datastructure,someofthereturnedinfowill}Blngwrd17:=0;{writeoverpartoftheRMA,corruptingaddresses}9lngwrd18:=0;{andcausingCONFIGtocrashinaPascal}*lngwrd19:=0;{runtimelibraryroutine.}lngwrd20:=0;END;{CB=0} WITHCCBDOBEGIN{CCB=0})staterr:=0;{devicestatus/errorcode}/chancode:=0;{channelcodeforabovestatus}-devcode:=0;{devicecodeforabovestatus}-drvcode:=0;{drivercodeforabovestatus}!attrmask:=0;{attributesmask} parmmask:=0;{parametermask}!attrword:=0;{attributesword}1lngwrd0:=0;{otherfields+16reservedbytes}lngwrd1:=0;lngwrd2:=0;lngwrd3:=0;lngwrd4:=0;lngwrd5:=0;lngwrd6:=0;lngwrd7:=0;,lngwrd8:=0;{WARNING!!!!!!}lngwrd9:=0;7lngwrd10:=0;{NOTE:Thisparameterblockislarger}9lngwrd11:=0;{thananycurrentlyusedforconfigure/}:lngwrd12:=0;{statusrequests.Inthefuture,however,}9lngwrd13:=0;{thesizeoftheparameterblockusedto}@lngwrd14:=0;{accepttheinfoforaconfigure/statusrequest}9lngwrd15:=0;{shouldgrowtobelargerthantheCBblk}Alngwrd16:=0;{datastructure,someofthereturnedinfowill}Blngwrd17:=0;{writeoverpartoftheRMA,corruptingaddresses}9lngwrd18:=0;{andcausingCONFIGtocrashinaPascal}*lngwrd19:=0;{runtimelibraryroutine.}lngwrd20:=0;END;{CCB=0} WITHDCBDOBEGIN{DCB=0})staterr:=0;{devicestatus/errorcode}/chancode:=0;{channelcodeforabovestatus}-devcode:=0;{devicecodeforabovestatus}-drvcode:=0;{drivercodeforabovestatus}!attrmask:=0;{attributesmask} parmmask:=0;{parametermask}!attrword:=0;{attributesword}1lngwrd0:=0;{otherfields+16reservedbytes}lngwrd1:=0;lngwrd2:=0;lngwrd3:=0;lngwrd4:=0;lngwrd5:=0;lngwrd6:=0;lngwrd7:=0;,lngwrd8:=0;{WARNING!!!!!!}lngwrd9:=0;7lngwrd10:=0;{NOTE:Thisparameterblockislarger}9lngwrd11:=0;{thananycurrentlyusedforconfigure/}:lngwrd12:=0;{statusrequests.Inthefuture,however,}9lngwrd13:=0;{thesizeoftheparameterblockusedto}@lngwrd14:=0;{accepttheinfoforaconfigure/statusrequest}9lngwrd15:=0;{shouldgrowtobelargerthantheCBblk}Alngwrd16:=0;{datastructure,someofthereturnedinfowill}Blngwrd17:=0;{writeoverpartoftheRMA,corruptingaddresses}9lngwrd18:=0;{andcausingCONFIGtocrashinaPascal}*lngwrd19:=0;{runtimelibraryroutine.}lngwrd20:=0;END;{DCB=0} END;{ZeroCB}{$E}  PROCEDURE GrpBits; E{GrpBits takes an ASCI string and divides it into groups of bits with$blanks inserted between the groups.} VAR9times:integer;{controlsnumberoftimesforFORloop}write('***ERROR***ONLYUSER0CANPERFORMACONFIGURE');writeln('DEFAULTS');END; badval:BEGINwrite('***ERROR***');FORi:=1tovallenDOwrite(userbuf[i]);"writeln('ISANINVALIDVALUE');END; cnfgdone:BEGINwrite('***NOTE***#');FORi:=1TOsz4DOwrite(target.name[i]);"writeln('HASBEENCONFIGURED');END; cnfgnow:BEGINwrite('***NOTE***#');FORi:=1TOsz4DOwrite(target.name[i]);)writeln('ISREADYFORCONFIGURATION');END; devbusy:BEGINwrite('***SORRY***#');FORi:=1tosz4DOwrite(target.name[i]);>writeln('ISBUSYANDCANNOTBERECONFIGUREDATTHISTIME');END; prntout:BEGINwrite('***NOTE***');%writeln('PRINTCOMMANDEXECUTED');END; nolbsign:BEGINwrite('***ERROR***');Awriteln('DEVICENAMEMUSTBEPRECEDEDBYTHEPOUNDSIGN,"#"');END; nospace:BEGINwrite('***SORRY***#');FORi:=1tosz4DOwrite(target.name[i]);@writeln('CANNOTBERECONFIGUREDUNTILMOREMEMORYISFREED');END; nosuchdev:BEGINwrite('***ERROR***#');FORi:=1tosz4DO-IFmenu=deviceTHENwrite(target.name[i])ELSEwrite(prntname[i]);writeln('DOESNOTEXIST');END; notcnfg:BEGINwrite('***SORRY***#');FORi:=1tosz4DOwrite(target.name[i]);#writeln('CANNOTBECONFIGURED');END; notrdy:BEGINwrite('***SORRY***#');FORi:=1tosz4DOwrite(target.name[i]);.writeln('NOTREADYORPOSSIBLYNOTTHERE');END;  prntbusy:BEGINwrite('***SORRY***#');FORi:=1tosz4DOwrite(prntname[i]);writeln('ISBUSY')END;   spoolup:BEGINwrite('***ERROR***#');FORi:=1tosz4DOwrite(target.name[i]);Ewriteln('CANNOTBERECONFIGUREDUNTILTHESPOOLERISDEACTIVATED')END; END;{case} 4msg:=none;{msgisout;wipetheslatecleannow} END;{WrMsg}{$E}  =PROCEDURE WrMiscMenu (menuptr : miscptr; choice : selection); ?{WrMiscMenuwritesthedevicenamemenu,theDCB/CCBmenu,the>congigurationmenuandtheprintmenuonthescreen.IfthereBwasanerrorduringthelastselection,itredisplaysthecurrentEdevicename,CB,ConfigureorCopymenuwithanerrormessageatthetop.} VARi,j:integer;{indices}  BEGIN {WrMiscMenu} $write(clrscrn);{clearthescreen} .IFlogondev.termtype<>0THEN{0=EXORterm}0FORi:=1TO20DO{clearnon-EXORtermscreen} writeln; EIFms= g<>noneTHENWrMsg(choice);{ifthere'serrormsg,writeit} FORi:=1TO5DO writeln; HFORi:=1TOmiscrowsDO{allmiscellaneousmenushavesame#ofrows}BEGIN)IF(menu<>device)AND(menu<>CBtype)>THENwrite(blank20){positionmiscellaneousmenusonscreen}ELSEwrite(blank10);HFORj:=1tomisccolsDO{allmiscellaneousmenushavesame#ofcols}=write(menuptr^[i,j]);{writemiscellaneousmenupointedto} writeln;CIFmenu<>deviceTHENwriteln;{doublespaceallbutdevicemenu}END; CASEmenuOF device:BEGINwrite(blank10);?write('Enterdevicenameorhitcarriagereturntoexit:');END;0CBtype:write(blank10,'Enterselection:');1OTHERWISEwrite(blank20,'Enterselection:'); END;{case} force(output); END; {WrMiscMenu}{$E}  *PROCEDURE WrHelpMenu (helpmenu : helpptr); ({WrHelpMenupresentsanexplanationfor7thevariouschoicesthatappearonamenu.Itgetsthe6numberofrowsinthemenuandthenusingthepointer*tothemenu,writesoutalloftherows.} VARi,j:integer;{indices}ch:char;{input} BEGIN{WrHelpMenu} $write(clrscrn);{clearthescreen} .IFlogondev.termtype<>0THEN{0=EXORterm}0FORi:=1TO20DO{clearnon-EXORtermscreen} writeln; writeln;writeln(blank30,'HELP');FORi:=1TO3DO writeln;DFORi:=1TOhelprowsDO{allhelpmenushavesamenumberofrows}BEGIN/write(blank5);{positionhelpmenuonscreen}GFORj:=1tohelpcolsDO{allhelpmenushavesamenumberofcolumns}9write(helpmenu^[i,j]);{writeouthelpmenupointedto} writeln;END; writeln;writeln;writeln;Ewrite(blank5,'Hitcarriagereturntoreturntopreviousmenu:');=force(output);{forcebuffertobewritten,waitforinput} %IFNOTeoln(output)THENread(ch);#readln;writeln;{finishoffread} END;{WrHelpMenu}{$E}   APROCEDURE WrValMenu (VAR screen : scrnimage; choice : selection); 7{WrValMenudisplaysonthescreenthepreviouslybuilt8menuwhichcontainsthefieldsandtheirvaluesforthe3targetdevice.Halfnumlnscalculatedpreviouslyisusedtocontrollinefeeds.} VARi,j:INTEGER;{indices}Ddoublespace:BOOLEAN;{indicatesifdoublespacingisappropriate}3numlns:integer;{numberoflinesforthescreen} BEGIN {WrValMenu} 1{clearthescreenandwriteanymessagepending}write(clrscrn); .IFlogondev.termtype<>0THEN{0=EXORterm}0FORi:=1TO20DO{clearnon-EXORtermscreen} writeln; #IFmsg<>noneTHENWrMsg(choice) ELSEwriteln;{forcesclrscrn}; 5IFscreen=parmscrn{getnumberoflinesinscreen};THENnumlns:=numparmlns{#oflinesforparametersmenu}(numlns+4)*2GTHENdoublespace:=true{#oflinesonscreenenoughtodoublespace}ELSEdoublespace:=false;IFdoublespaceTHENwriteln; ?FORi:=1TOnumscrncol-2DO{omitcarriagereturn/linefeed}write(screen.header[i]); writeln; IFdoublespaceTHENwriteln; FORi:=0TOnumlns-1DOBEGIN?FORj:=1TOnumscrncol-2DO{omitcarriagereturn/linefeed}write(screen.scrnln[i,j]); writeln;IFdoublespaceTHENwriteln;END;write('Enterselection:');force(output); END; {WrValMenu}{$E}  +{ PROCEDURE PrintCopy (VAR ok : BOOLEAN); } { Inserted after RdDevName }{$E}   {READPROCEDURES} 7PROCEDURE SetMsg (VAR ok : BOOLEAN; message : msgtype); G{SetMsgisusedbyRdDevNameandRdChoicetosetthebooleanok(whichIstopstherepeatloop)tofalse.Itpointsmsgatthecorrectmessageto*displayatthetopoftherepeatedmenu.} BEGIN ok:=false;BIFmsg=none{nomessageinhereyet,soyoucanput> oneinnow}THENmsg:=message;END;{$E}   $PROCEDURE SkipBlnks (VAR ch : CHAR); ={SkipBlnksreadsuntilanon-blankcharacterisfoundortheendoflineisencountered.} BEGIN {SkipBlnks} read(ch);/WHILE((ch=blank)AND(NOTeoln(input)))DO read(ch); END; {SkipBlnks}{$E}  :PROCEDURE RdDevName (VAR ok : BOOLEAN; VAR dname : strg4); {RdDevNamereads6theuser'sresponsetotherequestforadevicename.2ItiscalledbyGetDevNametogetthenameofthe6devicetobereconfiguredandbyPrintCopytogetthe8thenameoftheprinteronwhichtoprintthevaluesof7thereconfigureddevice.RdDevNamecheckstheresponse3forasyntacticallyvalidname.Ifthenameisnot3valid,itreturnsthatpieceofinformationtothe4callingmodulewhichwilldisplayanerrormessage. 4Ifacarriagereturnisenteredforthedevicename4whenthedevicemenuisactive,thenexitissetto1truebecausetheuserissignallingtermination. *Ifthedevicenameis"#"thenthetarget+deviceisassumedtobethelogondevice.}  VARch:CHAR;{input}i:INTEGER;{index}last:BOOLEAN;  BPROCEDURE StoreCh (VAR dname : strg4; ch : char; VAR i : integer); E{StoreCh puts the character read for the device name into its array.} BEGINIF('a'<=ch)AND(ch<='z')BTHENch:=chr(ord(ch)-32);{changelowercasetouppercase}dname[i]:=ch;{storechar}"i:=i+1;{gotonextlocation}END;   &FUNCTION GoodCh (ch : char) : BOOLEAN; K{GoodCh checks that the character read for the device name is alphnumeric.}  BEGIN{GoodCh} (GoodCh:=(('0'<=ch)AND(ch<='9'))!OR(('A'<=ch)AND(ch<='Z'))!OR(('a'<=ch)AND(ch<='z'))OR(ch=blank); END; {GoodCh}   BEGIN {RdDevName}%ok:=true;{startwithcleanslate}:last:=false;{assumetargetdeviceisnotlogondevice} D{CRisnotalegaldevicenamebutitisequaltoanexitsignalifJitoccurswhenthedevicemenuisup;CRonlyisnotvalidforcopymenu.;Thesearetheonlytwomenuswhichsolicitadevicename.} %IFeoln(input){checkforexit=CR}THEN8IFmenu=device{onlydevicemenuhasCRasexitsign}*THENgoodbye:=true{userwantstoexit}ELSEBEGIN6SetMsg(ok,badname);{can'thaveCRasprintername}readln;{finishoffread}END; FORi:=1TOsz4DO+dname[i]:=blank;{blankoutdevicename} MIFNOTgoodbyeANDokTHEN{userdoesn'twanttoexit&mayhavevalidname}BEGIN{noteoln} SkipBlnks(ch); &{devicenamemustbeprecededby"#"}+IF(ch<>'#')THENSetMsg(ok,nolbsign); IFok{notlogondevice}THEN{readname}BEGIN{readname}i:=1;=WHILE(NOTeoln(input)AND(i<=4)ANDokANDNOTlast)DOBEGIN{while} read(ch);:IFGoodCh(ch){checkthatcharisalphanumericorblank}THENStoreCh(dname,ch,i))ELSESetMsg(ok,badname);{invalidchar}!IFch=blankTHENlast:=true; END;{while} >{devicehasmaximumof4charsinnameandnoembeddedblanksblankTHENSetMsg(ok,badname);END;  3IFokAND(dname[1]=blank)THEN{only#online}FORi:=1TOsz4DO4dname[i]:=regsav.devid[i];{nameoflogondevice} END;{readname} readln;{finishoffread}END;{noteoln} END;{RdDevName}{$E}  PROCEDURE BldCnfgScrn; @{BldCnfgScrnbuildsanewparametersscreenafterconfiguration?isperformed.Thenewscreenisbuiltwiththevaluesthatare>nowintheCCBortheDCBdependingonwhichwasconfigured.} VAR?starset:mask;{keepstrackofparameterswhichwerechanged} *PROCEDURESaveStars(VARstarset:mask); @{SaveStarsmakesarecordofthevaluesthattheuserchanged.} VAR#bit:selection;{enumerate> dtype}i:integer;{index} BEGIN{SaveStars}starset:=[]; bit:=zero;FORi:=0TOnumparmlns-4DOBEGIN'IFparmscrn.scrnln[i,astrkcol]=star!THENstarset:=starset+[bit];bit:=succ(bit);END;END;{SaveStars} -PROCEDUREInstallStars(VARstarset:mask); A{InstallStarsputsastarintheparametersmenuinfrontofthevaluesthattheuserchanged.} VAR#bit:selection;{enumeratedtype}i:integer;{integer} BEGIN{InstallStars} bit:=zero;FORi:=0TOnumparmlns-4DOBEGINIFbitINstarset+THENparmscrn.scrnln[i,astrkcol]:=star;bit:=succ(bit);END;END;{InstallStars} BEGIN {BldCnfgScrn}BSaveStars(starset);{turnonbitswhereparameterswerechanged} 4ZeroCB;{preparecnfgblockstorecievenewvalues} 0{re-initializepointerstobeginningoftables} InitTblPtrs; {getconfiguredvalues}BGETMEMCB(target,regsav.ulognum,CCB,DCB,amask,pmask,Caword,1Daword,parmptr,attrptr,avalptr,asmmem,msg); &{initializeCBforbuildingparmscrn}IFduration=permTHENCB:=DCBELSEBEGIN CB:=CCB;-parmmask:=parmmask-[two];{readtimeout}0parmmask:=parmmask-[three];{writetimeout}6IFtarget.devtype=termTHEN{needtoturnoffbits}BEGIN!attrmask:=attrmask-[twelve];#attrmask:=attrmask-[thirteen];#attrmask:=attrmask-[fourteen];"attrmask:=attrmask-[fifteen];END;END; $BldScrns;{getnewparametersmenu} ,{putstarsinfrontofvaluesuserchanged}InstallStars(starset); END;{BldCnfgScrn}{$E}  'PROCEDURE PrintCopy (VAR ok : BOOLEAN); C{PrintCopygetsthenameofthedisplaydeviceandoutputsthenewmenu.} VAR!pname:strg4;{nameofprinter}Bnumbytes:integer;{numberofbytesindatapartofparmscreen}8nochoice:selection;{dummyneededforprocedurecall}i:integer;{index}:same:boolean;{printingdeviceissameaslogondevice} BEGIN{PrintCopy} writeln;+write('Enternameofdisplaydevice:');force(output); RdDevName(ok,pname);writeln;{finishoffwrite} IFokTHENBEGIN>IFpname=regsav.devid{seeiflogondevice=outputdevice}THENsame:=trueELSEsame:=false; ${printmenuwithconfiguredvalues}2PRINT(asmmem,parmscrn,pname,CB,numparmlns-2,numscrncol,same,msg);#IFmsg=none{printingwentwell}THENBEGINmsg:=prntout;)IFsame{logondevice=printingdevice}THENStopScreen;ENDELSEBEGINFORi:=1TOsz4DOok:=false;{somethingwrong}%{ifaspecialmessagethenwriteit}*IFmsg<>stopscrnTHENWrMsg(nochoice);,StopScreen;{stopscreenafteranymessage}END;END;END;{PrintCopy}{$E}   >PROCEDURE RdChoice (VAR ok : BOOLEAN; VAR choice : selection); B{RdChoicereadstheuser'smenuselection,andcheckstherestof2thelineforgarbage.Theselectionsarefiltered4throughembeddedcasestatementstodeterminewhich-enumeratedvaluewillbeassignedtochoice. 5Thisprocedureisusedtoreadtheselectionforallmenus.} VARch:char;{userinput}i:integer;{index} BEGIN{RdChoice} %ok:=true;{startwithcleanslate}, IF eoln (input) THEN SetMsg (ok, badchoice) ELSEBEGIN{noteoln}1SkipBlnks(ch);{readfirstnon-blankcharacter}AIFch=blankTHENSetMsg(ok,badchoice);{onlyblanksonline} "IFokTHEN{foundnon-blankchar}CASEchOF{legalfirstchars}'0':choice:=zero;'1':IFeoln(input)THEN{only1char}choice:=oneELSE{morecharstoread}BEGINread(ch);{readsecondchar} CASEchOF{legalsecondchars}blank:choice:=one;'0':choice:=ten;'1':choice:=eleven;'2':choice:=twelve;'3':choice:=thirteen;'4':choice:=fourteen;'5':choice:=fifteen;'6':choice:=sixteen;'7':choice:=seventeen;!OTHERWI? SE{illegalcharpresent}SetMsg(ok,badchoice);END;{innercase}END;{elsemorechars}'2':choice:=two;'3':choice:=three;'4':choice:=four;'5':choice:=five;'6':choice:=six;'7':choice:=seven;'8':choice:=eight;'9':choice:=nine;&'C','c':choice:=cnfg;{configure}1'D','d':choice:=nextdev;{gotonextdevice}2'P','p':choice:=hrdcpy;{getusercopyofCB}<'H','h':choice:=help;{displayappropriatehelpscreen}5'Q','q':choice:=quit;{gobacktopreviousmenu}0'E','e':choice:=exiting;{terminateCONFIG}!OTHERWISE{illegalcharpresent}SetMsg(ok,badchoice);END;{outercase} 0{anyothercharactersonthelinearecomments}IFNOTeoln(input)THENBEGIN read(ch);IFch<>blankTHENSetMsg(ok,badchoice);END;END;{noteoln} readln;END;{RdChoice}{$E}  :PROCEDURE RdNewVal (VAR ok : BOOLEAN; choice : selection); 3{RdNewValwritesthefieldnameandapromptbelow5"EnterSelection"togetthenewvalueforthefieldfromtheuser.} VAR"ch:CHAR;{inputcharfromuser}i:INTEGER;{index} BEGIN{RdNewVal} ?{blankoutvalbufanduserbufwhichwillreceiveuser'sinput}FORi:=1TOvallenDOBEGINvalbuf[i]:=blank;userbuf[i]:=blank;END; ){writefieldnameandmessageonscreen}FORi:=1TOnamelenDO6write(parmscrn.scrnln[ord(choice),i]);{fieldname}!write('-Enternewvalue:');force(output);{writebuffer} :IFNOTeoln(input)THEN{morethancarriagereturninput}BEGIN{noteoln}&SkipBlnks(ch);{skipleadingblanks}7IF(ch=blank)ANDeoln(input){onlyblanksonline}THENSetMsg(ok,badval); +IFokTHEN{morethanjustblanksonline} BEGIN{ok}i:=1;{indextovalbuf}9{readuntilendoflineorendofinputbufferorblank}?WHILE(NOTeoln(input)AND(iblank))DOBEGINvalbuf[i]:=ch; i:=i+1; read(ch);END;valbuf[i]:=ch; ,IF((valbuf[1]='C')OR(valbuf[1]='c'))-AND((valbuf[2]='T')OR(valbuf[2]='t'))-AND((valbuf[3]='R')OR(valbuf[3]='r'))-AND((valbuf[4]='L')OR(valbuf[4]='l'))ANDNOTeoln(input)THENBEGIN read(ch);valbuf[6]:=ch;END; D{ifendofdatareached&stillnoteolnthenblankmustcomenext}(IF(NOTeoln(input))AND(ch<>blank)THENSetMsg(ok,badval); END;{ok} ,FORi:=1TOvallenDO{saveuser'sinput}userbuf[i]:=valbuf[i]; END{noteoln} 9ELSESetMsg(ok,badval);{onlycarriagereturnentered} readln;{finishoffread} END;{RdNewVal}{$E}   +{CONVERSIONPROCEDURES}  >PROCEDURE CkValbuf (VAR choice : selection; VAR ok : BOOLEAN); 8 {CkValbuf tests each location in the buffer to see that4onlylegalcharactersforthatbasearepresent.If8 the string is decimal or hexadecimal then the number of6digitsiscountedtomakecertainthatthevaluewill5notbetoolarge.Decimalswillneedafurthercheck8 later in ASCI2bin to be certain that the value will not5overflow.Binaryintegerscannotbetoolargesince only 32 maximum are read.} VARi:INTEGER;{index}%first:CHAR;{firstcharinvalbuf} BEGIN {CkValbuf} %{startsearchforcontrolcharacter}*IF(valbuf[2]='T')OR(valbuf[2]='t'))THENi:=6{controlcharinlocation6}*ELSEi:=2;{controlcharinlocation2} C{ifbaudrate=134.5thismustbehandledasaspecialcasesince?itisarealnumberandvalueisaninteger;wefoolPascalby:changingittoanintegerhereanddoingtherestofthis>procedure;notethat134.5isinthebaudratetableas1345} 8IF(ord(choice)=baudrate)AND(target.devtype=term)THEN,IF(valbuf[1]='1')AND(valbuf[2]='3')-AND(valbuf[3]='4')AND(valbuf[4]='5')THENSetMsg(ok,badbaud)ELSE,IF(valbuf[1]='1')AND(valbuf[2]='3')-AND? (valbuf[3]='4')AND(valbuf[4]='.')AND(valbuf[5]='5')THENBEGINvalbuf[4]:=valbuf[5];valbuf[5]:=blank;END; IFokTHEN BEGIN{OK}"first:=valbuf[1];{selectbase}CASEfirstOF'%':{checkrestofbuffer} BEGIN{%}i:=2;{firstchar=%}!{vallen-lastallowablelocation}#WHILE((valbuf[i]<>blank)ANDokAND(iblank)ANDok)DOIF(('0'<=valbuf[i])AND(valbuf[i]<='9'))THENi:=i+1ELSESetMsg(ok,badval); END;{digit} '$':{checkrestofbuffer} BEGIN{$}i:=2;${maxhexloc-lastallowablelocation}'WHILE((valbuf[i]<>blank)ANDok)DOIF(('0'<=valbuf[i])AND(valbuf[i]<='9'))OR(('A'<=valbuf[i])AND(valbuf[i]<='F'))OR(('a'<=valbuf[i])AND(valbuf[i]<='f'))THENi:=i+1ELSESetMsg(ok,badval); END;{$} $'C','c':IF((valbuf[2]<>'T')OR(valbuf[2]<>'t'))AND((valbuf[3]<>'R')OR(valbuf[3]<>'r'))AND((valbuf[4]<>'L')OR(valbuf[4]<>'l'))AND((valbuf[5]<>'-')OR(valbuf[5]<>'/')OR(valbuf[5]<>blank))AND((valbuf[6]chr(16#7F)))THENSetMsg(ok,badval);!'^':IF((valbuf[2]chr(16#7F))OR L7R<CGGF'1/D7<??GHOEW(valbuf[3]<>blank))THENSetMsg(ok,badval);OTHERWISESetMsg(ok,badval); END;{case} END;{OK} END;{CkValbuf}{$E}  ;PROCEDURE CTRL2bin (VAR value : longint; VAR ok : BOOLEAN); B{CTRL2binconvertstheASCIIcharacterintheCTRLstringentered6bytheuserintohexadecimalbysubtracting$40.Leftjustifythenumber.} VARch:CHAR;{charinbuffer} BEGIN{CTRL2bin} AIFvalbuf[1]='^'{^indicatescontrolchar,elseCTRLisused}FTHENch:=valbuf[2]{^-->controlchar;chinlocation2ofbuffer}IELSEch:=valbuf[6];{CTRL-->controlchar;chinlocation6ofbuffer}#IFch>'_'{ch=$60through$7F}7THENch:=chr(ord(ch)-32);{ch-->$40through$5F}?value:=ord(ch)-ord('@');{controlchar=$00through$1F} END;{CTRL2bin}{$E}  9PROCEDURE ASCI2bin (VAR value : longint; size : smallint;+VARchoice:selection;VARok:BOOLEAN); C{ASCI2bin converts the ASCII string value typed in by the user intoCaninteger.Whenvalbufreachesthisprocedure,thefirstcharacterCin the buffer is known to be valid and all the other characters areHknown to be in agreement with the base expressed by the first character.HNo more than the maximum number of characters for the respective base isIinthebuffer.Thus,overflowwillnotoccur,exceptpossiblyinthecaseIof decimal digits where the value for the maximum number of digits may beHtoolarge.ThiscaseischeckedforneartheendoftheprocedureastheGintegervalueisbeingbuilt.Whenthisprocedureends,valueholdstheinteger. Algorithm: 31.Determinethebaseandsetthebasemultipliers.2.Countthenumberofdigits.M3.Beginningattheright-handsideofthebuffer;convertthedigitsintoanHintegerintheproperbase,raiseittoitscorrectplacevalueandadd ittovalue.K4.Inthecaseofdecimalintegers,checkthesizeofvaluejustbeforetheKdigitinlocation1isaddedontomakesurethatoverflowdoesnotoccur.JAlso,checkthefirstlocationtomakesureitisnotadigitthatissoo!largethatoverflowwouldoccur.:5.Checksizeofintegerwithsizefromparameterstable.} @ CONST /{maximum positive decimal integer = 4294967295} 7loc1=1;{locationofmostsignificantdecimaldegit}4maxdecidgt=10;{maximunnumberofdecimaldigits}Bmax9chval=294967295;{maxvaluethat9leastsignificantdigits*canhaveifthemostsignificantdigit=4}?maxsigdgt='4';{maxvaluemostsignificantdigitcanhaveif&9leastsignificantdigits=max9chval}  VARdigit:char;base:longint;placeval:longint;temp:longint;left:integer;right:integer;count:integer; i:integer;decimal:boolean; BEGIN{ASCI2bin} ?{baudrate=134.5isaspecialcaseofarealnumber;wefool5Pascaltypingbychangingitintoaninteger=1345}9IF(ord(choice)=baudrate)AND(target.devtype=term)THEN+IF(valbuf[1]='1')AND(valbuf[2]='3'),AND(valbuf[3]='4')AND(valbuf[4]='.')AND(valbuf[5]='5')THENBEGINvalbuf[4]:=valbuf[5];valbuf[5]:=blank;END; ${identifybaseandsetmultipliers}decimal:=false;CASEvalbuf[1]OF '%':BEGIN left:=2; base:=2;END; '$':BEGIN left:=2; base:=16;END;OTHERWISEBEGIN left:=1; base:=10;decimal:=true;END; END;{CASE} placeval:=base; {countnumberofdigits} i:=left; count:=0;3WHILE((valbuf[i]<>blank)AND(i0{thereexistsatleastonedigit}THEN{count>0}BEGIN{count>0} value:=0;6right:=left+count-1;{startatrightofvalbuf}5IF('0'<=valbuf[right])AND(valbuf[right]<='9')THEN'value:=ord(valbuf[right])-ord('0')ELSE5IF('a'<=valbuf[right])AND(valbuf[right]<='f'),THENvalue:=ord(valbuf[right])-ord('W')-ELSEvalue:=ord(valbuf[right])-ord('7');9FORi:=right-1downtoleftDO{movetoleftofvalbuf}BEGIN{convert}-IF('0'<=valbuf[i])AND(valbuf[i]<='9')THEN"temp:=ord(valbuf[i])-ord('0')ELSE,IF('a'<=valbuf[i])AND(valbuf[i]<='f')'THENtemp:=ord(valbuf[i])-ord('W')(ELSEtemp:=ord(valbuf[i])-ord('7'); {checkforoverflowondecimal}3IFdecimalAND(i=loc1)AND(count=maxdecidgt)THEN9IF((value>max9chval)AND(valbuf[loc1]>=maxsigdgt))OR(valbuf[loc1]>maxsigdgt)THENSetMsg(ok,badrange); .{multiplybyplacevalue,addtoaccumulator}IFOKTHENBEGIN$value:=value+(temp*placeval);placeval:=placeval*base;END;END;END{count>0}&ELSE{count=0}SetMsg(ok,badval); %IF(NOT((target.devtype=term)AND((ord(choice)=baudrate)))ANDokTHEN CASEsizeOF/1:IFvalue>255THENSetMsg(ok,badrange);12:IFvalue>65535THENSetMsg(ok,badrange);74:BEGINEND;{thevaluefor4bytesischeckedabove,becauseitneedsspecialoverflowhandling}END; END;{ASCI2bin}{$E}  ;PROCEDURE ModStrVal (choice : selection; VAR ok : BOOLEAN); 1{ModStrValtakesthestringinthevaluebuffer,3checkstoseethatonlythecorrectcharactersare7presentandchangeseachcharactertoanintegertype.8Theintegervalueischeckedagainsttherangeforthat4field.Ifitisnotwithinrange,thenOKissetto7falsesothatanerrorcanbereported.Otherwise,the4offsetfortheparameterfieldindexedbychoiceis0obtainedfromtheparametertablepointedtoby5parmptr.Theassemblyprocedure,MODSTRCB,iscalled7toputthenewvalueintoCBinCONFIG'sstoragearea. 5Thevaluerangesobtainedfromthetablewillbethe6upperandlowerboundsonthesizeofthenumberthat/thefieldcanhold.Noattemptwillbemadeto1determineifthenumberis"sensible".Itisnot3withintherealmofCONFIGtocensorthesevalues.3Thisactivityisproperlylefttotheuserandthe drivers.} VAR+offseti:longint;{offsettofieldinCB}+sizei:smallint;{sizeo@ ffieldinbytes}8value:longint;{valuewhichvalbufstringrepresents}i,j:INTEGER;{index}'ch:CHAR;{aninputcharfromvalbuf} >PROCEDURE GetBaudCode (VAR value : longint; VAR ok : BOOLEAN); D{GetBaudCodesearchesthroughthebaudratetableforthebaudrateCthattheuserinput.Ifitisfound,thenvaluetakesonthetableCindexwhichcorrespondstothebaudratecode.Otherwise,theuser=hasinputaninvalidbaudrateandanerrormessageisset.} VAR6found:BOOLEAN;{indicatesifbaudrateisintable}-code:longint;{indexintobaudratetable} BEGIN {GetBaudCode} code:=0;found:=false;,WHILE(NOTfoundAND(code<=numcodes))DOIFvalue=baudptr^[code].rateTHENBEGINfound:=true;value:=code;ENDELSEcode:=code+1; (IFNOTfoundTHENSetMsg(ok,badbaud); END;{GetBaudCode}   BEGIN{ModStrVal} CWITHparmptr^.parmrow[ord(choice)]DO{getinfofromparmtable}BEGIN2offseti:=offset;{offsetintoCBforparameter}-sizei:=size;{#ofbytesintheparameter}END; ;ch:=valbuf[1];{getfirstcharinbufforcheckingbase}BIF(('0'<=ch)AND(ch<='9'))OR(('A'<=ch)AND(ch<='F'))=OR(('a'<=ch)AND(ch<='f'))OR(ch='%')OR(ch='$')OR(ch='^')THENBEGIN{validfirstchar}>CkValbuf(choice,ok);{checkrestofbufferforvalidchars} (IFok{bufferhasallvalidcharacters}THEN#BEGIN{sendtoconversionroutine}1IF(((valbuf[1]='C')OR(valbuf[1]='c'))AND*((valbuf[2]='T')OR(valbuf[2]='t')))OR(valbuf[1]='^'):THENCTRL2bin(value,ok){gethexcodeforcontrolchar}@ELSEASCI2bin(value,sizei,choice,ok);{bin,hexordecimal} 9IF(ord(choice)=baudrate)AND(target.devtype=term)THENGetBaudCode(value,ok); IFok{numberconvertedok}THEN!BEGIN{putvalueintoPascalCB}&MODSTRCB(CB,offseti,sizei,value);,IF(valbuf[1]='$')OR(valbuf[1]='%')THENj:=valcol-1ELSEBEGIN j:=valcol;"parmscrn.scrnln[ord(choice),j] :=blank;END;9FORi:=1TOvallenDO{putnewvaluestringinscreen}$parmscrn.scrnln[ord(choice),j+i]:=userbuf[i];%{markscreenwherevalueischanged}1parmscrn.scrnln[ord(choice),astrkcol]:=starEND{putvalueinCB}0ELSESetMsg(ok,badrange){#notconvertedOK} END{allvalidcharacters}ELSESetMsg(ok,badval) END+ELSESetMsg(ok,badval);{1stcharvalid}  END;{ModStrVal}{$E}   +PROCEDURE ModAttr (VAR cnfgtime : BOOLEAN); 9{ModAttrwilldisplaytheattributesmenuforthetarget9Aftertheusertypes"Q",thetargetdevice'sparameters5menuwillberedisplayedwiththerevisedattributes?word.If"C"ischosenthentheconfigmenuwillbedisplayed,$skippingovertheparametersmenu.} VARFoldattr:mask;{unalteredattributeswordusedforlatercomparison}@value:medint;{binaryvalueofattributesword,sizedforCB}i,j:integer;{index}%ok:BOOLEAN;{controlsrepeatloop}%choice:selection;{menuselection}*offset:longint;{offsettofieldinCB}*size:smallint;{sizeofselectedfield}  'PROCEDURE ChgAttr (choice : selection);B{Chgattrchangesthebitintheattributeswordandputsthenew!valueintotheattributesmenu.} BEGIN{ChgAttr} attrwordTHEN{changewasmade}BEGIN'parmscrn.scrnln[0,astrkcol]:=star; :{changeattrwordintoASCIIstringandcomputeitsvalue}awd2ASCInInt; ;GrpBits;{groupsattrwordinvalbufinto4groupsofbits} ,{putASCIIstringintotheparametersmenu}FORj:=1TOvallenDO.parmscrn.scrnln[0,j+valcol-1]:=valbuf[j]; {putvalueintoCB}CB.attrword:=value; END;{changewasmade} END;{ModAttr}  I{=======================================================================}  !{MAJORPROCEDURES}  E{The following procedures are called directly by the main procedure.}  PROCEDURE Initialize; A{InitializecallsprocedureswhichinitializemanyoftheglobalCvariables.INITLIZEinitializesregsavandCB.ItalsoinitializesGthepointerswhichpointtothetablesforbuildingtheparametersandCattributesscreens,themiscellaneous,menusandthehelpscreens.EDoHeaderputstheheaderintotheparametersandattributesscreens.3Fixscreentakescareoftheclearscreencommand.} BEGIN {Initialize} EINITLIZE(regsav,CB,ptptr,atptr,vtptr,asmmem,parmhdr,attrhdr,8nomod,dnmmnptr,bfmmnptr,CBmnptr,cfgmnptr,cpymnptr,&CBthelp,bfmhelp,parmhelp,attrhelp,(cnfghelp,copyhelp,logondev,baudptr); DoHeader; FixScreen; END; {Initialize}{$E}  BPROCEDURE GetDevName (var menu : menutype; var goodbye : BOOLEAN); N{GetDevNamegetsthenameofthedevicewhichtheuserwishestoreconfigure.GIftheuser'sresponseisacarriagereturn,thenCONFIGterminatesA byKsettinggoodbyetotrueanddroppingoutofthecasestatementuponreturnItomain.IfthedevicenamehasinvalidsyntaxorifthedevicedoesnotMexistorifthetargetdeviceisaprinterandthespoolerisactive,ortheKdeviceisbusy,thenmessageisselectedfordisplayandtheBOOLEANokisHsettofalsesothatamessageisprintedandanewrequestforavalidGdevicenameispresented.TheprocedurewillcontinuetodisplayerrorMmessageandaskforadevicenameuntileitheragoodnameisenteredortheGusertypesacarriagereturntoexit.Attheendoftheprocedure,theAmenuissettocontrolthecallingofthenextmajorprocedure.} VAR1ok:BOOLEAN;{indicatesifuserinputisvalid}Bnochoice:selection;{undefined,neededonlyforprocedurecall}i:integer;{index}+dname:strg4;{arrayforthedevicename} BEGIN {GetDevName} EInitTblPtrs;{initpointerstosetsoftablesusedtobuildscreens}LCLSDASGN(asmmem,duration);{closeanyoutstandingassignmenttoadevice} CREPEAT{writemenu&getnameuntilnameisokoruserterminates} !WrMiscMenu(dnmmnptr,nochoice); 0RdDevName(ok,dname);{gettargetdevicename} ,IFokANDNOTgoodbyeTHEN{gettargetDCB}BEGINFORi:=1tosz4DOBtarget.name[i]:=dname[i];{devicenamegoesintotargetrecord}CIFtarget.name=regsav.devid{targetdeviceisalsologondevice}THENtrgteqlg:=trueELSEtrgteqlg:=false;target.devtype:=0;ZeroCB;,GETMEMCB(target,regsav.ulognum,CCB,DCB,amask,pmask,Caword,Daword,)parmptr,attrptr,avalptr,asmmem,msg);?IFmsg<>noneTHENok:=false;{somethingwronginGETMEMCB}IFmsg=stopscrn9THENStopScreen;{stopscreenforerrormessagereading}IF(target.devtype=fdisk)OR(target.devtype=hdisk)THENBEGINmsg:=notcnfg; ok:=false;END;END; 'UNTILgoodbyeORok;{endrepeatloop} ,menu:=CBtype;{nextmenutobedisplayed}END; {GetDevName}{$E}  *PROCEDURE GetCBType (var menu : menutype); M{GetCBTypedeterminesiftheuserwantstomodifytheDCBortheCCB.IftheMusermakesaninvalidselectionorwantstomodifytheDCBandisnotuser0Lthenmsgissetappropriatelyandanerrormessagewillbedisplayedatthe'topofanewpresentationofthemenu. (Choiceholdstheuser'smenuselection. BIftheusermakesvalidselections,thenattheendofGetCBType,GBldScrnsiscalledtoconstructthenecessarymenusfordisplayingthe>fieldsandvaluesinCB.Thenextmenu,parms,isassignedto@turncontrolovertothenextmajorprocedure,ModParms.IftheCuserselected"Q",however,executionismovedbacktogettingthe(devicenamebysettingmenutodevice.} VAR)choice:selection;{user'smenuchoice},ok:BOOLEAN;{indicatesifinputisvalid} BEGIN {GetCBType} N{fix masks to accept valid letter choices for parameters and attributes menus}+pmask:=pmask+[help]+[cnfg]+[quit];+amask:=amask+[help]+[cnfg]+[quit]; REPEAT 3WrMiscMenu(CBmnptr,choice);{writeCBtypemenu}3RdChoice(ok,choice);{getuser'smenuselection} HIFokAND((choice=one)OR(choice=two){usermadevalidselection}'OR(choice=help)OR(choice=quit))THENBEGIN{goodchoice}parmmask:=pmask;attrmask:=amask;CASEchoiceOF(one{perm}:BEGIN{configuredefaults}1IFregsav.ulognum=0{user0isrunningCONFIG}THENBEGIN*duration:=perm;{configuredefaultsok} CB:=DCB;END,ELSE{onlyuser0candoconfiguredefaults}SetMsg(ok,baduser);END;'two{temp}:BEGIN{configurerequest}duration:=temp; CB:=CCB;.parmmask:=parmmask-[two];{writetimeout}/parmmask:=parmmask-[three];{readtimeout}IFtarget.devtype=termTHENBEGIN!attrmask:=attrmask-[twelve];#attrmask:=attrmask-[thirteen];#attrmask:=attrmask-[fourteen];"B attrmask:=attrmask-[fifteen];END;END;3help:WrHelpMenu(CBthelp);{displayhelpscreen}0quit:menu:=device;{gobacktodevicemenu}"OTHERWISESetmsg(ok,badchoice); END;{case}END{goodchoice}ELSESetMsg(ok,badchoice); (UNTILokAND(choice<>help);{repeat} ;IF(choice=one)OR(choice=two){confreqorconfdef}THENBEGIN1menu:=parms;{givecontroltoparametersmenu}!BldScrns;{makeparametersmenu}END; END; {GetCBType}{$E}  )PROCEDURE ModParms (VAR menu : menutype); 4{ModParms(varmenu:menutype)callsproceduresto2writethedeviceparametersmenu;read,checkand6converttheuser'sresponsetoaninteger;andrevise6thetarget'sfieldvaluesinCBandonthescreen.If5theattributeswordischoosenforrevision,itwill2callaproceduretodosimilaroperationsfortheattributesword. ModParmsworksasfollows. 3Afterthemenuiswrittenandtheuser'schoiceis7read,thechoicemustbecheckedtodetermineifitis1avalidchoiceforthatscreen.Ifthechoiceis7valid,thenitmustbedeterminedifthetargetdevice7isaterminal.Ifitisaterminalthenchoicemustbe1adjustedifthechosenfieldisafterXOFF.This8occursbecauseintheparametersmask,XOFF/XONarethe6samebit;butfortheuser'sconveniencethetwohave7beensplitintotwofieldsintheparametersmenuwith4differentselectionnumberstoidentifythem.Thus,8anyfieldchoiceaftertheXOFFchoiceonaterminalisoffbyoneuntiladjusted. 3Onceavalidchoiceismadeandtheabovehasbeen7performed,acasestatementisenteredtogivecontroltotheproperprocedure. 5Iftheattributeswordisselectedformodification,6whencontrolreturnstoModParms,theparametersmenu4isreadyfordisplaywiththeattributeswordfield6modified.ThesamelogicapplieswhencontrolreturnsfromModStrVal.} VAR7choice,adjchoice:selection;{user'smenuselection}5notdone:BOOLEAN;{attributesmenuselectedsignal} cnfgtime:BOOLEAN;{configure}:ok:BOOLEAN;{keepsrepeatloopgoinguntilvalidinput} BEGIN {ModParms}%OK:=true;{startwithcleanslate}cnfgtime:=false;{configure} REPEATIFcnfgtimeTHENBEGIN+menu:=cnfig;{printconfiguremenunext}@choice:=cnfg;{configurechoseninattributesmenuselection}END ELSE{configurenotchosenyet} BEGIN{parametersmenu}0notdone:=true;{attributesmenunotselected} {displayparametersmenu}WrValMenu(parmscrn,choice); RdChoice(ok,choice); @{ifinputisvalidthencheckifchoiceisvalidforthismenu}AIFokAND((choice=cnfg)OR(choice=quit)OR(choice=help)!OR(ord(choice){iftargetisterminalandchoiceisbetweenXONandterminal;codeinclusivethenadjustchoiceforXOFF/XONassamebit inparmmask}0IF((target.devtype=term)AND(choice>five)AND(choice<=sixteen)) THENadjchoice:=pred(choice)ELSEadjchoice:=choice; 7{iftargetisaharddiskorafloppydiskthenbit15AcontrolsbothreducedwritecurrentcylindernumberandECCdataCburstlengthwhichareseparateparametersintheCBandthemenu};IF(((target.devtype=hdisk)OR(target.devtype=fdisk))AND(choice=seventeen))$THENadjchoice:=pred(adjchoice); IFadjchoice=zeroTHENBEGIN4ModAttr(cnfgtime);{thisisalwaysavalidchoice}notdone:=false;ENDELSE?{moveadjchoicedownbyonetocorrespondtobitsinparmmask;;zeroisattributeswordinmenubutattributeswordisnotpartofrealparmmask};IFadjchoice<=sixteenTHENadjchoice:=pred(adjchoice); 6IFnotdoneTHENBEGIN{notattributeswordselection}){determineifchoiceismodifablefield}9IFadjchoiceINparmmask{bit=1,sofieldismodifiable}(THEN{choiceismodifableaB ndinrange} CASEadjchoiceOF{validcases} {modifyparametervalue}6zero,one,two,three,four,five,six,seven,eight,8nine,ten,eleven,twelve,thirteen,fourteen,fifteen, sixteen:BEGINRdNewVal(OK,choice);"IFokTHENModStrVal(choice,OK);END;"cnfg:menu:=cnfig;{configure}help:WrHelpMenu(parmhelp);/quit:menu:=CBtype;{returntogetCBtype} END{case}+ELSESetMsg(ok,badnum);{notmodifiable}$END{notattributeswordselection}END{validchoice}1ELSESetMsg(ok,badchoice);{nosuchselection} END{configurenotchosenyet} 3UNTILokAND((choice=cnfg)OR(choice=quit)); &IFchoice=cnfgTHENmsg:=cnfgnow; END;{ModParms}{$E}  )PROCEDURE DoConfig (VAR menu : menutype); {DoConfigprintsandreadsthe6ConfigureMenutomakecertainthattheuserwantsto4installthenewconfiguration.Iftheusermakesan4invalidselectiontheConfigureMenuisredisplayed"withanerrormessageatthetop. 7Iftheuserchoosestoconfigurethedevice,MODMEMCB,.anassemblyroutinedoestheconfiguration.}  VAR%ok:BOOLEAN;{controlsrepeatloop}+choice:selection;{user'smenuselction}2nochoice:selection;{neededforprocedurecall}  BEGIN{DoConfig} REPEATWrMiscMenu(cfgmnptr,choice);RdChoice(ok,choice);.IFokAND((choice=cnfg)OR(choice=help)OR(choice=quit))THENCASEchoiceOFcnfg:BEGIN{cnfg}MODMEMCB(asmmem,target,CB,msg,trgteqlg,duration);&IFmsg<>none{somethingwentwrong}THENBEGIN)IFmsg<>stopscrn{msgnotprintedyet}"THENWrMsg(nochoice);{printit}*StopScreen;{stopscreentoreadmessage}#menu:=parms;{gotolastscreen}ENDELSEBEGIN"menu:=copy;{gotonextscreen}msg:=cnfgdone;END; END;{cnfg}help:WrHelpMenu(cnfghelp);quit:menu:=parms; END{case}ELSESetMsg(ok,badchoice); UNTILokAND(choice<>help); END;{DoConfig}{$E}  APROCEDURE CopyNewCB (VAR menu : menutype; VAR goodbye : BOOLEAN); ?{CopyNewCBinquiresiftheuserwantsacopyoftheparameters/menuforthereconfigureddevice.Ifacopyis.desired,thenaqueryfortheprinternameis5presented.Otherwise,theusercangoontothenextdeviceorexit. 7Ifacopyisdesiredandthenamefortheprinterthat4theuserentersdoesnotexistorisbusy,anerror5messageisputoutbytheErrorMessageHandler.The5copymenuisredisplayedtoobtainfurtherdirection3fromtheuserandtoallowtheusertotryagain.} VAR.ok:BOOLEAN;{usedtoterminaterepeatloop},choice:selection;{user'smenuselection} BEGIN{CopyNewCB} 8BldCnfgScrn;{makenewparmscrnwithconfiguredvalues} REPEAT WrMiscMenu(cpymnptr,choice);RdChoice(ok,choice);0IFokAND((choice=hrdcpy)OR(choice=help)-OR(choice=nextdev)OR(choice=exiting))THENCASEchoiceOFhrdcpy:PrintCopy(ok);help:WrHelpMenu(copyhelp);nextdev:menu:=device;exiting:goodbye:=true; END{case}ELSESetMsg(ok,badchoice); 9UNTILokAND((choice=exiting)OR(choice=nextdev)); END;{CopyNewCB}  F{====================================================================} {MainProcedure} N{The main procedure calls Initialize to initialize tables, menus and pointers.LAfter this is accomplished, main enters a repeat loop, doing major procedureMcallstodisplaymenusforthepurposeofcollectinguserinput.TheinputisEapplied and at the end of each procedure a new menu is assigned whichGdetermineswhatprocedureiscallednext.ThiscontinuesuntiltheuserEchooses to exit CONFIG, at which time the repeat loop ends and CONFIG terminates.} BEGIN {main} Initialize;Agoodbye:=false;{goodbyemeansuserwantstoterminateCONFIG}1menu:=device;{deviceisfirstmenutoappear}6duration:=perC m;{firstclosedonedoesn'tkeepCCB}1msg:=banner;{putsoutCONFIGversionmessage} NREPEAT{usescurrentlyassignedmenutochoosemajorprocedureforexecution} CASEmenuOF8device:GetDevName(menu,goodbye);{getsdevicename}:CBtype:GetCBType(menu);{selectsconfreqorconfdef},parms:ModParms(menu);{changesCBvalue}2cnfig:DoConfig(menu);{performsconfiguration};copy:CopyNewCB(menu,goodbye);{givesusercopyofDCB}END; )UNTILgoodbye;{userwantstoterminate} D{ifatemporaryconfigurationwaslastperformedandtheassignmentCstillexists,closetheassignmentwithbit3setsothatFHSwillCnotfindtheassignmentandcloseitwithoutthebitsetcausinga5reconfigurationofthedevicetoitsdefaultvalues} CLSDASGN(asmmem,duration);write(clrscrn);writeln; END.=/*=/*CONNECT.AF=/*@=/* Chain file to assemble modules making up the CONNECT utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to CONNECT.LS=/*=/IFC \1=ARGCONNECT.LS=/ENDIF=/*,=ASM CONNECT1.SA,CONNECT1.RO,TEMP1.LS;RZ=106=/*{ Included files are:=/*9995.&.UTILITY.MC=/*9995.&.TR1.EQ=/*9995.&.IOE.EQ=/*9995.&.CONNECT.EQ=/*}=/*,=ASM CONNECT2.SA,CONNECT2.RO,TEMP2.LS;RZ=106=/*{ Included files are:=/*9995.&.UTILITY.MC=/*9995.&.STR.EQ=/*9995.&.CONNECT.EQ=/*}=/*=COPYTEMP2.LS,TEMP1.LS;A=COPYTEMP1.LS,\1;Y=DELTEMP1.LS=DELTEMP2.LS=/*=END_!C =/*=/*CONNECT.LF=/*&=/* Chain file to link CONNECT utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to CONNECT.LL=/*=/IFC \1=ARGCONNECT.LL=/ENDIF=/*=LINK ,CONNECT.LO,\1;HAMIXSATTR PSSEG CONN:0-15 $0INPUT CONNECT1.ROINPUT CONNECT2.ROLIB 0.&.UTILIB.ROEND=/*=ENDh3CONNECT1IDNT1,1PartofVERSADOSutilityCONNECT.O*v*****************************************************************************O*******************************************************************************O*************************************************************************************J***FILENAME:CONNECT1--USERMODEPARTOFVERSADOSUTILITY'CONNECT'.*********3***ENVIRONMENT:RunsasataskunderVERSAdos.*********H***FUNCTION:Toconnecttwoportssuchthatcharacterscominginon***2***onearesenttotheother,andviceversa.*********G***NOTES:Inordertoachievehighthroughput,partoftheutility***C***(CONNECT2)runsinsupervisormodeandatinterruptlevels.*********,***EXTERNALDATASTRUCTURESREFERENCED:***D***Addressesoftransparentmodeinterfacetablesarepassedto***)***thedriversfortheserialports.*********)***EXTERNALENTRYPOINTSREFERENCED:*********"***SERVICESCALLEDVIATRAPS:***'***FHSAssignofLUtoaterminal.******FHSCloseofsame.***G***IOSChangeDefaultConfigurationtoset/resettransparentmode.***(***TRAP#1calltoWaitforWakeup.*********O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*Revisionhistory(addnewchangestotop).*DateAuthorChangesG*-------------------------------------------------------------------8*1/14/85SteveLudwigAddchecktonotconnecttoself.3*12/20/84PeggyHassettMadepositionindependent.<*7/27/83SteveFranckChangednamefromTM;addedoptionL.'*6/3/83StD eveFranckInitialwriting. * *XDEF's.*1XDEFDATATheaddrofthedataareaforCONNECT.G?@I>;Q)*driverforport2.  *0*XREF's(indicatewheretheXDEFis,ifknown).*5XREFTBL1,TBL2Transparentmodeinterfacetablesfor(*ports1and2.Theseareinthemodule%*containingthesupervisormodecode*forthisutility.0XREFPARSERoutinesfromUTILIBforparsingthe6XREFEDITFILEcommandline,analyzingafilename,andXREFOPTIONanalyzingoptions.  **Equatefilesincluded:0*UTILITY.MCUtilitymacros(likePUSHandPOP).**TR1.SAEquatesforexeccalls(TRAP#1).'*IOE.EQEquatesforFHSandIOScalls.@*CONNECT.EQEquatesforCONNECT'sdataarea(thisgetslisted).*NOLISTINCLUDE9995.&.UTILITY.MCINCLUDE9995.&.TR1.EQINCLUDE9995.&.IOE.EQLISTINCLUDE9995.&.CONNECT.EQ  *J*DIEmacro--causesthetasktoabortwithanillegalinstructionerror.*DIE[]G*Iftheconditioncodesarespecified,thetaskwillabortonlyiftheJ*specifiedconditioncodeistrue.Ifnoconditioncodeisspecified,the#*taskwillalwaysabort.Examples: *DIE*DIE* DIEMACRO IFC'\1','' DC.W$FFFFMEXITENDCIF<\1>THEN.S DC.W$FFFFENDIENDMPAGEO******************************************************************************** *MACROSFOREASYSEQUENTIALI/O*O******************************************************************************* *A*WRITELABELoutputsLABELtoLABELEusingparamblockWRITEIOS.>*READLABELinputsLABELtoLABELEusingparamblockREADIOS;*SBARGiscalledontheinput.D*DISPLAY<'ABC'>outputstheliteralABCusingparamblockDISPIOS.H*ASK<'Name?'>,REPLYoutputstheliteralName?usingWRITEIOSandgets.*aresponseinREPLYtoREPLYEusingREADIOS;*SBARGiscalledontheinput.* WRITEMACROLEAWRITEIOS(PC),A0 PEA\1(PC)MOVE.L(SP)+,IOSSAD(A0) PEA\1E(PC)MOVE.L(SP)+,IOSEAD(A0)TRAP#2BNE.LFATAL_ERRORENDM READMACROLEAREADIOS(PC),A0 PEA\1(PC)MOVE.L(SP)+,IOSSAD(A0) PEA\1E(PC)MOVE.L(SP)+,IOSEAD(A0)TRAP#2BNE.LFATAL_ERROR BSR.LSBARGBNE.LFATAL_ERRORENDM DISPLAYMACROLEADISPIOS(PC),A0 PEA\@1(PC)MOVE.L(SP)+,IOSSAD(A0) PEA\@2(PC)MOVE.L(SP)+,IOSEAD(A0)TRAP#2BNE.LFATAL_ERROR BRA.S\@3 \@1DC.B\1 \@2EQU*-1\@3DS0ENDM ASKMACROLEAWRITEIOS(PC),A0 PEA\@1(PC)MOVE.L(SP)+,IOSSAD(A0) PEA\@2(PC)MOVE.L(SP)+,IOSEAD(A0)TRAP#2BNE.LFATAL_ERROR BRA.S\@3 \@1DC.B\1 \@2EQU*-1\@3DS0READ\2ENDMPAGEK**************************************************************************** *EQUATES*K*************************************************************************** *F*EquatesdescribingthepartoftheCSBusedwhensettingTRANSPARENTH*MODE.WepassthedrivertheaddressofourbranchtableandhepassesI*usbacktheaddressofhisbranchtable,thevalueweshouldhaveinA5G*whenwecallhim,andtheSRthatweshoulduse.Actually,wemayuseG*adifferentSRaslongasthesupervisorbitissetandtheinterrupt9*levelisnotlowerthantheoneintheSRhepassesus.*7OFFSETIOSTTMThisstuffwillbeintheCSBatIOSTTM.9IOSTMUDS.B4Heretheuserwillstore,beforemakingthe&*CHANGEDEFAULTScall,theaddressof*histableofbranches. 7OFFSETIOSTTMThisstuffwillbeintheCSBatIOSTTM.9IOSTMDDS.B4theaddrofthedriver'stableofbranches;/IOSTMADS.B4thevaluethedriverwantsinA5;5IOSTMSDS.B2theSRwiththD eMINIMUMinterruptlevel*set.  *5*EquatesdefiningbitsinD0asreturnedfromPARSE.*8NULL_INPUTEQU22Setiftherewasnoinputfieldinthe*commandline.:NULL_OUTPUTEQU14Setiftherewasnooutputfieldinthe*commandline.;NULL_OPTIONSEQU6Setiftherewasnooptionsfieldinthe*commandline. *8*EquatesdefiningbitsinD0asreturnedfromEDITFILE.*1DEVICEEQU1Setifthefieldspecifiesadevice. *6*EquatesdefiningbitsinD0asreturnedfromOPTION.*3END_OPTIONSEQU6Setiftherearenomoreoptions.8FMT_EQUALEQU4SetiftheformatislikeL=.7NONNUMERICEQU3Setiftheisnotnumeric.-FMT_MINUSEQU2Setiftheformatislike-L.  **Otherequates.*3TRUEEQU$FFFlagsareFALSEiftheyare0andTRUE FALSEEQU0iftheyarenonzero. &CREQU$0DASCIIcarriagereturnchar. LFEQU$0AASCIIlinefeedchar. ;LO_MSG_LINEEQU10Thesevaluesrefertothelinenumberon:HI_MSG_LINEEQU32whichtheremindermessageistobeput9DEF_MSG_LINEEQU25foroptionL.ThesearetheLOandHI%*validlinenumbers,andtheDEFault%*touseifhesays;Lbutnot;L=nn. 5LINE_1EQU$20TheEXORterm155specifiersforline1COLUMN_1EQU$20andcolumn1. ;DEF_CHAREQU.B'V'Defaultexitcharspecifier.Thecorres-%*pondingcontrolchar,whentypedon!*port1,willcauseanexitfrom*CONNECTmode. CMD_LINECOMLINE80Thiswillcontainthedevicenameforport#*2and,optionally,theexitchar.  *L*SpaceforabunchofdatatobesharedbyCONNECT1andCONNECT2,forwhich"*thedefinitionisinCONNECT.EQ.*DATADS.BDATA_SIZE  *G*CharacterswhichwillresetthescreenonanEXORterm155andVME/10.:*YouhavetodelayafterwritingthistoanEXORterm155!*6RESETDC.B$F7CommandtoresettheVME/10's25lines.3DC.B$F1CommandtoresettheEXORterm's24lines.RESETEEQU*-1  *L*RemindermessagetowriteoutifthisisanEXORterm155oraVME/10(that*is,ifoptionLisused).*2WABSDC.B$1B,$4ASETBOTTOMVIRTUALLINEcommand.:WABS_LN1DC.B'*'Spaceforbottomvirtuallinespecifier.%DC.B$1B,$4EWRITEABSOLUTEcommand.&DC.B$1B,$5DSTARTOFDATAindicator.-WABS_LN2DC.B'*'Spaceforline#specifier.&DC.BCOLUMN_1Specifierforcolumn1.DC.B'CONNECTedto#'@WABS_PORTDC.B'****'Spacefornameofportwe'reCONNECTedto.DC.B'--TypeCTRL-'5WABS_CHARDC.B'*'Spacefortheexitcharspecifier.DC.B'toexit.'$DC.B$1B,$5EENDOFDATAindicator. WABSEEQU*-1  *A*Messagetowriteoutifthisisn'tanEXORterm155oraVME/10.*DS0GO_MSGDC.B'TypeCTRL-';GO_CHARDC.BDEF_CHARThiswillbetheexitcharspecified.DC.B'toexit.',CR,LFGO_MSGEEQU*-1  DS0&SYNTAXDC.B'Correctsyntaxis:',CR,LFCDC.B'CONNECT[,][;L[=]]',CR,LFBDC.B'isthedevicenameoftheterminalport',CR,LF1DC.B'towhichyouwanttobeCONNECTed.',CR,LF@DC.B'isaletter(A..Z);thecorresponding',CR,LF>DC.B'coE ntrolchar,whentypedonthisterminal,will',CR,LF@DC.B'terminateCONNECTmode.Theexitcharisoptional',CR,LF@DC.B'anddefaultsto',DEF_CHAR,'(CTRL-',DEF_CHAR,').',CR,LFDDC.B'OnlyuseoptionLifthisterminalisanEXORterm155',CR,LFBDC.B'orVME/10.isoptionalanddefaultsto25;',CR,LFCDC.B'itistheline#onwhichtoputaremindermessage.',CR,LFSYNTAXEEQU*-1  *J*IOSparamblockforusewithWRITEmacrotodoimageoutputtoterminal.*DS0IOS.WRITEIOWRIT,IOPIMG,LDFLUN *N*IOSparamblockforusewithREADmacrotodoformattedinputfromterminal.*IOS.READIOREAD,IOPFOR,CDFLUN *N*IOSparamblockforusew/DISPLAYmacrotodoformattedoutputtoterminal.*IOS.DISPIOWRIT,IOPFOR,LDFLUN  *3*FHSparamblockforassignmentofport2toaLU.*FHS.ASGNFHASGN,,1 *&*FHSparamblockforcloseofport2.*FHS.CLOSEFHCLOS,,1 *=*IOSparamblockforCHANGEDEFAULTCONFIGURATIONofport1.*IOS.CHD1IOCHDC,,LDFLUN *=*IOSparamblockforCHANGEDEFAULTCONFIGURATIONofport2.*IOS.CHD2IOCHDC,,1 *$*Configure/StatusBlockforport1.*CSB1:DC.B0,0,0,09DC.W1<DS.BIOSTLN-(*-CSB1)(TakeupspacetilltheendoftheCSB.) *$*Configure/StatusBlockforport2.*CSB2:DC.B0,0,0,09DC.W1<DS.BIOSTLN-(*-CSB2)(TakeupspacetilltheendoftheCSB.)  *K*ParameterblockforcallingtheErrorMessageHandler(partofthetrap4D*servertask).InputwillbefromLUNCDFLUN,outputtoLUNLDFLUN.*9EMH_PBLKDC.L0Errormessagekeyvalue(D0fromIOS/FHS).DC.L0A0fromIOS/FHS.2DC.B0<<0Options:bit0=0(noqueryresponse).DC.BLDFLUNLUNforoutput.DC.B0Queryreturncharacter.DC.BCDFLUNLUNforinput.+DC.L0Startaddrforusertextplugpool.)DC.L0Endaddrforusertextplugpool.PAGEO*v********************************************************************************?***CONNECT1--STARTOFPROGRAMTOCONNECTUSTOANOTHERPORT.***B***FUNCTION:HerewehookourselvesintothedriversforboththeC***portsinvolved.Therestwillbehandledbythesupervisormode-***routineswhichgetcalledbythedrivers.*** ***NOTES:******ENTRYCONDITIONS:E***LU6isanassignmenttotheterminalfromwhichwewereinvoked.6***RegistersareloadedwiththeusualinfofromSCT.***O*^***************************************************************************** SECTION0OPTBRS CONNECT: *'*Setupastackandsomeinitialdata.*)LEASTACK(PC),SPLoadthestackpointer.7LEADATA(PC),A6A6<--addressofthedataareaweshare*withCONNECT2.AMOVEM.LD0-D7/A0-A5,SCT_REGISTERS(A6)Savethedatapassedtous*bySCTinregisters.  EPUT_ADDRTBL1,TBL1ADDR-DATA(A6)Puttheaddrofourtransparentmode'*tableforport1intotheport1CSB. EPUT_ADDRTBL2,TBL2ADDR-DATA(A6)Puttheaddrofourtransparentmode'*tableforport2intotheport2CSB.  1WRITEOPENERTelltheuserhe'srunningCONNECT. *1*Initializesomethingsintheshareddataarea.*;LEAPORT1_QUEUE(A6),A0A0<--addressofqueueforport1.;MOVE#Q_MAX,GET(A0)InitializestheGETandPUTindexesto3MOVE#Q_MAX,PUT(A0)theirhighestvaluestostart. ;LEAPORT2_QUEUE(A6)E ,A0A0<--addressofqueueforport2.;MOVE#Q_MAX,GET(A0)InitializestheGETandPUTindexesto3MOVE#Q_MAX,PUT(A0)theirhighestvaluestostart. /SFREADY(A6)Markthatwe'renotreadyforthe*supervisormodecodetorun. AMOVE.B#DEF_CHAR-$40,EXIT_CHAR(A6)Setupthedefaultexitchar. 3SFACTIVE(A6)Markthatthesupervisormodecode's*backgroundisnotactive. 1CLRWORK(A6)Markthatthereisnoworkpending. 5SFWAIT1_FLAG(A6)Cleartheflagsthattellwhatthe8SFWAIT2_FLAG(A6)transmittersarebusydoing,sinceof,CLRBREAKS(A6)coursethey'renotbusyyet. **Makesurewe'reuser0.*&TSTSCT_LUSN(A6)Ifwe'renotuser0,IFTHEN* 2DISPLAY<'ERROR--ONLYUSER0MAYRUNCONNECT.'>)BRA.LERROR_EXITcomplainandterminate. ENDI *3*Parsethecommandlinetogetthevariousfields.*:MOVE.LSCT_COML(A6),D6D6<--lengthofthecommandline.3BEQ.LER_NO_DEVICEIfit'sempty,that'sanerror. 5LEACMD_LINE(PC),A0A0<--addrofthecommandline.+BSR.LPARSEParseitandcheckforerrors. TST.LD0*BMI.LER_INV_ENTRY* ?BTST#NULL_OPTIONS,D0Checkwhethertherewasanoptionsfield;SEQANY_OPTIONS(A6)andsettheflagaccordingly.SavetheBMOVE.LA2,PTR_OPTIONS(A6)addroftheoptionsfieldjustincase. @BTST#NULL_OUTPUT,D0Ifthereissomethingintheoutputfield,IFTHEN* 8MOVE.B(A1),D1D1<--the1stcharintheoutputfield.>IF.BD1#'A'OR.BD1#'Z'THENIfit'snotinA..Z, ?DISPLAY<'ERROR--THEEXITCONTROLCHARMUSTBEALPHABETIC.'>BRA.LFAILthat'sanerror. ENDI :LEAGO_CHAR(PC),A0It'sinA..Z,soputitinthemessage3MOVE.BD1,(A0)wemaysendoutwhenweconnectup.3SUB.B#$40,D1Also,savethecorrespondingcontrolAMOVE.BD1,EXIT_CHAR(A6)characterwherewecancheckagainstit. ENDI  *.*FigureoutwhatporthewantstoCONNECTto.*LEAASGNFHS(PC),A6A6<--addrofFHSparamblockforassign.9BSR.LEDITFILECallEDITFILEtoloadtheparameterblock%*fromtheinputfieldtheusergave..MOVE.LFHSVOL(A6),D1Savedevicename1/14/85'LEADATA(PC),A6Restorebaseregister.TST.LD0Checkforerrors.BMI.LER_INV_ENTRY* :BTST#DEVICE,D0Ifitdidnotspecifyadevice,that'sanBEQ.LER_NO_DEVICEerror. >CMP.LSCT_TERM(A6),D1Areweconnectingtoourselves?1/14/85/BEQ.LER_USR_TERMYes,that'snogood.1/14/85 **AssignthatporttoaLU.*;LEAASGNFHS(PC),A0A0<--addrofparamblockforASSIGNc#TRAP#3CallFHStodotheassign.BNE.LFATAL_ERROR* *(*LookforoptionLonthecommandline.*6SFEXORTERM(A6)Beginbyassumingwe'renotona155. 5TST.BANY_OPTIONS(A6)Iftherewasnooptionsfield,BEQGOskipallthis. BSR.LOPTIONProcessanoption.TST.BD0Checkforerrors.BMI.LER_INV_ENTRY* 1BTST#END_OPTIONS,D0Iftherereallywasn'tone,BNEGOskipallthis. 'CMP.B#'L',D1Makesureit'soptionL.BNE.LER_INV_OPTION* TST.LD1Ifitisn't-L,IFTHEN* :STEXORTERM(A6)Rememberthatwe'reonanEXORterm155orEMOVE.B#DEF_MSG_LINE,MSG_LINE(A6)VME/10,andinitializethemessage*line#toitsdefault. -BTST#FMT_EQUAL,D0IfhesaidL=,IFTHEN* ;BTST#NONNUMERIC,D0Makesuretheisanumber.BNE.LER_INV_ENTRY* ?CMP.L#LO_MSG_LINE,D3Ensurethattheline#isinrange--i.e.BLO.LER_BAD_LINE*=CMP.L#HI_MSG_LINE,D3*LO_MSG_LINE<=line#<=HI_MSG_LINEBHI.LER_BAD_LINE* 5MOVE.BD3,MSG_LINE(A6)Savetheline#hespecified. ENDI ENDI 'BSR.LOPTIONCheckforanotheroption.TST.BD0Checkforerrors.BMI.LER_INV_ENTRF Y* ;BTST#END_OPTIONS,D0Ensurethatthereweren'tanyothers.BEQ.LER_INV_OPTION* *5*Tellhimthatwe'reCONNECTingandhowhecanexit.*=GOTST.BEXORTERM(A6)IfthisisanEXORterm155oraVME/10,IFTHEN* 6WRITERESETIssuethecommandtoresetthescreenand7ERQ.DELAY#RESET_DELAYwaitfortheterminaltodoit. :MOVEQ#LINE_1-1,D0Settheline#specifierfortheWRITE9ADD.BMSG_LINE(A6),D0ABSOLUTEoftheremindermessage=1LEAWABS_LN2(PC),A0*specifierforline1-1+)MOVE.BD0,(A0)*line#ofmessageline. 1SUB.B#1,D0Settheline#specifierfortheSETTHEN /SAVED0/A0Saveinfoabouttheoriginalerror./LEACSB1(PC),A0A0<--addrofCSBforport1.CBCLRW#IOATRM,IOSATW(A0)CleartheTRANSPARENTMODEattributebit.9LEACHD1IOS(PC),A0MaketheCHANGEDEFAULTScalltoIOS. TRAP#2*$DIEDieiftherewasanerror.8RESTORED0/A0Restoreinfoabouttheoriginalerrorand BRA.LFATAL_ERRORgoreportit. ENDI *E*DeterminewhichrunsatthehigherinterruptlevelandsavehisSR.*,MOVESR_1-DATA(A6),D0D0.W<--port1'sSR.DIFSR_2-DATA(A6)D0THENIfport2'sinterruptlevelishigher-MOVESR_2-DATA(A6),D0replacetheoneinD0.ENDI* =MOVED0,DISABLE_SR(A6)ThehigherSRwillbeusedtoinhibit*interruptsfromthedevices.5SUB#$0100,D0TheequivalentSR,oneinterruptlevel=MOVED0,ENABLE_SR(A6)lower,willbeusedtorunaroundina&*sortof'background'mode(tolessen)*thestraincausedbybeingatinterrupt*levelforsolong). *D*Enablethesupervisormodecodeandwaitforittosaywe'redone.*6STREADY(A6)Settheflagtotellthesupervisormode(*codewe'rereadyforhimtotakeover. 3ERQ.WAIT,Tellexecwewanttowaitforawakeup. *C*Wegotthewakeup,sosomebodymusthavegiventhesignaltoexitM*transparentmode.Taketheportsoutoftransparentmode,closeup,&exit.*/LEACSB1(PC),A0A0<--addrofCSBforport1.CBCLRW#IOATRM,IOSATW(A0)CleartheTRANSPARENTMODEattributebit.9LEACHD1IOS(PC),A0MaketheCHANGEDEFAULTScalltoIOS. TRAP#2*$DIEDieiftherewasanerror. /LEACSB2(PC),A0A0<--addrofCSBforport2.CBCLRW#IOATRM,IOSATW(A0)CleartheTRANSPARENTMODEattributebit.9LEACHD2IOS(PC),A0MaketheCHANGEDEFAULTScalltoIOS. TRAP#2*$DIEDieiftherewasanerror. 9TST.BEXORTERM(A6)IfthisisanEXORterm155orVME/10,IFTHEN*6WRITERESETIssuethecommandtoresetthescreenand7ERQ.DELAY#RESET_DELAYwaitfortheterminaltodoit.ENDI* ;LEACLOSEFHS(PC),A0Closetheassignmentwegottoport2. TRAP#3*$DIEDieiftherewasanerror. #ERQ.TERM#0,#0Terminatenormally.PAGEO*v********************************************************************************(***SOMECONNECT-SPECIFICERRORMESSAGF ES***H***FUNCTION:ThesearesomeoftheroutinestobranchtoifyouwanttoE***terminatewithanerror.FAILwilldisplaythecorrectsyntaxforF***CONNECTbeforedying;otherentrypointswilladditionallydisplay7***somemessageappropriatetoaparticularsituation.*** ***NOTES:******ENTRYCONDITIONS:***O*^***************************************************************************** **********7*DisplayNODEVICEmessageandterminatethroughFAIL.* ER_NO_DEVICE: GDISPLAY<'ERROR--THEDEVICENAMEFORATERMINALMUSTBESPECIFIED.'> BRA.LFAIL  **********<<1/14/853*DisplayCAN'TTALKTOSELFmessageandterminate.* ER_USR_TERM: FDISPLAY<'ERROR--THEDEVICENAMEFORATERMINALCANTBEYOUROWN.'>BRA.LERROR_EXIT1/14/85>>  **********<*DisplayINVALIDOPTIONmessageandterminatethroughFAIL.*ER_INV_OPTION: %DISPLAY<'ERROR--INVALIDOPTION.'> BRA.LFAIL  **********=*DisplayBADLINENUMBERmessageandterminatethroughFAIL.* ER_BAD_LINE: EDISPLAY<'ERROR--LINENUMBERINLOPTIONISOUTOFRANGE10..32.'> BRAFAIL  **********;*DisplayINVALIDENTRYmessageandterminatethroughFAIL.* ER_INV_ENTRY: $DISPLAY<'ERROR--INVALIDENTRY.'>  **********3*WriteoutthecorrectsyntaxforCONNECTanddie.*FAIL: .WRITESYNTAXPrintoutthecorrectsyntaxand,BRAERROR_EXITterminatewitherrorstatus.PAGEO*v********************************************************************************"***ROUTINESFORERRORTERMINATION***G***FUNCTION:ThesetwoentrypointswillterminatethetaskwitherrorF***status.EntrypointFATAL_ERRORwill,beforeitkillsus,calltheC***errormessagehandler,andassuchissuitableforhandlingbad)***returnstatusfromIOSandFHScalls.*** ***NOTES:******ENTRYCONDITIONS:***O*^***************************************************************************** *********A*Calltheerrormessagehandlerandterminatewitherrorstatus.* FATAL_ERROR: -BSRCALL_EMHCalltheerrormessagehandler. **********;*Terminatewitherrorstatus;thiswillabortachainfile.* ERROR_EXIT: 7ERQ.TERM#0,#$C000Exittotheexecwitherrorstatus.PAGEO*v*****************************************************************************O*************************************************************************************:***CALLTHEERRORMESSAGEHANDLERTODISPLAYANERROR*********I***FUNCTION:Thisroutinemaybecalledatanytimetogettheerror***G***messagehandlertodisplaythetextcorrespondingtotheerror.***H***ForIOSandFHScalls(andperhapsothers),informationfromthe***=***parameterblockwillbeprintedalongwiththeerror.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:AP........D******A:AP......P************ENTRYCONDITIONS:***<***D0=errorcodeunderstoodbyerrormessagehandler.***0***A0=addrofparamblock,ifapplicable.*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* CALL_EMH: +SAVED0/A0Saveregisterswe'llblowaway. -PUSH.LA0Savethecaller'sA0foramoment.8LEAEMH_PBLK(PC),A0A0<--addrofEMHparameterblock.;MOVE.LD0,(A0)PuttheD0andA0giventousbythecaller1MOVE.L(SP)+,4(A0)outthereintheparamblock. 2MOVEQ#2,D0CalltheLoader/EMHtaskwithD0=2,+TRAP#4indicatingit'sajobfortheEMH. ,RESTORED0/A0Restoreregistersandreturn.RTS*   ENDCONNECTG 9CONNECT2IDNT1,0CONNECTutility'ssupervisormodecode.O*v*****************************************************************************O*******************************************************************************O*************************************************************************************G***FILENAME:CONNECT2--SUPERVISORMODECODEFORCONNECTUTILITY.*********;***ENVIRONMENT:CONNECTrunsasataskunderVERSAdos.*********H***FUNCTION:Toconnecttwoportssuchthatcharacterscominginon***E***onearesenttotheother,andviceversa.Thispartactually***E***takescharactersfromonedriverandgivesthemtotheother.*********H***NOTES:Inordertoachievehighthroughput,thisroutinerunsin***0***supervisormodeandatinterruptlevels.***I***ItisVERYIMPORTANTthatnoneofthecodecalledbyCONNECT2set***H***theinterruptlevelwithoutregardforthelevelatwhichitwas***E***entered.Inparticular,driversmayNOTusetheirINHIBITand***B***ENABLEmacrosintransparentmodesincetheymayhavebeen***1***enteredatamuchhigherinterruptlevel.*********,***EXTERNALDATASTRUCTURESREFERENCED:*********)***EXTERNALENTRYPOINTSREFERENCED:***?***Transparentmodeoutputroutinesindriversarecalled.*********"***SERVICESCALLEDVIATRAPS:***I***TRAP#0call(fromsupervisormode)todoWakeupoftheCONNECT1.*********O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*Revisionhistory(addnewchangestotop).*DateAuthorChangesG*-------------------------------------------------------------------/*7/22/83SteveFranckChangednamefromTMSUP.'*6/3/83SteveFranckInitialwriting.3*12/20/84PeggyHassettMadepositionindependent. * *XDEF's.*,FC>= @ K A ? #A +%;XDEFTBL1,TBL2Transparentmodeinterfacetablesforports'*1and2.TheCONNECT1tasklevelcode(*passestheseaddressestothedrivers. *0*XREF's(indicatewheretheXDEFis,ifknown).*4XREFDATABaseofdataareawesharewithCONNECT1.CXREFTBL1ADDR,A5_1CONNECT1infoweusetocalltheport1driver.CXREFTBL2ADDR,A5_2CONNECT1infoweusetocalltheport2driver.  **Equatefilesincluded:0*UTILITY.MCUtilitymacros(likePUSHandPOP).:*EQUSTR.EQSupervisormodeexecequates/macros(TRAP#0).E*CONNECT.EQEquatesdescribingadataareacommontoCONNECT1and2.*NOLISTINCLUDE9995.&.UTILITY.MCINCLUDE9995.&.STR.EQLISTPAGEINCLUDE9995.&.CONNECT.EQ  **Otherequates.*3TRUEEQU$FFFlagsareFALSEiftheyare0andTRUE FALSEEQU0iftheyarenonzero. LFEQU$0AASCIIlinefeedchar.PAGEO*v********************************************************************************<***TBL1andTBL2--TABLESENABLINGTHEDRIVERSTOCALLUS.***F***FUNCTION:ThetasklevelcodehaspassedtheaddressesofTBL1andD***TBL2tothedriversforports1and2,respectively.Thedrivers/***JSRintothesetablestocallourroutines.*** ***NOTES:******ENG TRYCONDITIONS:***O*^***************************************************************************** SECTION0OPTBRS $*Theport1driverJSR'sherewhen:(TBL1:BRA.SRECV1...acharisreceived.NOP*.BRA.LTBE1...thetransmitbuffergoesempty.1BRA.LBRK1_RECV...itdetectsanincomingbreak.2BRA.LBRK1_OVER...itisthroughsendingabreak. $*Theport2driverJSR'sherewhen:(TBL2:BRA.SRECV2...acharisreceived.NOP*.BRA.LTBE2...thetransmitbuffergoesempty.1BRA.LBRK2_RECV...itdetectsanincomingbreak.2BRA.LBRK2_OVER...itisthroughsendingabreak.  *N*ThisisthelayoutoftheinterfacetableWEwilluseincallingtheDRIVER.* OFFSET04XMITDS.B4EntrytoJSRtoinordertosendachar.9SEND_BRKDS.B4EntrytoJSRtoinordertosendabreak. SECTION0PAGEO*v*****************************************************************************O*************************************************************************************2***RECV1--HANDLECHAR'SCOMINGINONPORT1*********F***FUNCTION:Thisroutinegetscalledbytheport1driverwhena***C***characterarrivesatthatport.Itputsthecharinaqueue***%***foroutputtotheotherport.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:ADP.......D******A:PP...P.P************ENTRYCONDITIONS:***!***D0.B=thecharreceived.*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* RECV1: * *Getsetup.*(SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR* 2LEADATA(PC),A1A1<--baseaddressofdataarea. *(*Doeshewanttoexittransparentmode?*:IF.BD0EXIT_CHAR(A1)THENIfthisistheexitchar, ?BSETW#W_EXIT,WORK(A1)gorunthebackgroundtasktoterminate,BRA.LBKG_EXECtransparentmodeprocessing. ENDI *J*Hedoesn'twanttoexitTM;putthecharinthequeuetosendtoport2.*?LEAPORT2_QUEUE(A1),A5A5<--addrofqueueforport2output. MOVEPUT(A5),D1D1<--PUTptr.@MOVE.BD0,QUEUE(A5,D1)AddthecharinD0tothequeue(maybe). SUBQ#1,D1AdvancethePUTptr."IFTHENIfitgoesnegative,)MOVE#Q_MAX,D1.setitbacktothetop. ENDI.* :IFD1GET(A5)THENIfthequeuewasn'talreadyfull,9MOVED1,PUT(A5).updatetherealpointerfornexttime. ENDI.* *2*Callthebackgroundtransmitroutineforport2.*?BSETW#W_XMIT2,WORK(A1)RunthebackgroundtosendthechartoBRA.LBKG_EXECport2.PAGEO*v*****************************************************************************O*************************************************************************************2***RECV2--HANDLECHAR'SCOMINGINONPORT2*********F***FUNCTION:Thisroutinegetscalledbytheport2driverwhena***C***characterarrivesatthatport.Itputsthecharinaqueue***%***foroutputtotheotherport.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:ADP.......D******A:PP...P.P************ENTRYCONDITIONS:***!***D0.B=thecharreceived.*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* RECV2: * *Getsetup.*(SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR* 2LEADATA(PC),A1A1<--baseaddressofdataarea. *.*Putthecharinthequeuetosendtoport1.*?LEAPORT1_QUEUE(A1),A5A5<--H addrofqueueforport1output. MOVEPUT(A5),D1D1<--PUTptr.@MOVE.BD0,QUEUE(A5,D1)AddthecharinD0tothequeue(maybe). SUBQ#1,D1AdvancethePUTptr."IFTHENIfitgoesnegative,)MOVE#Q_MAX,D1.setitbacktothetop. ENDI.* :IFD1GET(A5)THENIfthequeuewasn'talreadyfull,9MOVED1,PUT(A5).updatetherealpointerfornexttime. ENDI.* *2*Callthebackgroundtransmitroutineforport1.*?BSETW#W_XMIT1,WORK(A1)RunthebackgroundtosendthechartoBRA.LBKG_EXECport1.PAGEO*v*****************************************************************************O*************************************************************************************?***TBE1(TBE2)--TRANSMITBUFFERWENTEMPTYONPORT1(2)*********I***FUNCTION:Theseroutinesgetcalledbytheport1(2)driverwhen***H***thedeviceonthatportbecomesreadyformoreoutput.Basically***F***wejustsetupforthebackgroundtodomoreoutputifitcan.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:DP.......D******A:PP...P.P************ENTRYCONDITIONS:*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* **********-*Thetransmitterhasbecomereadyonport1.*TBE1: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *2*Callthebackgroundtransmitroutineforport1.*5SFWAIT1_FLAG(A1)Marktheport1transmitterready.?BSETW#W_XMIT1,WORK(A1)RunthebackgroundroutinetotransmitBRA.LBKG_EXEConport1.  **********-*Thetransmitterhasbecomereadyonport2.*TBE2: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *2*Callthebackgroundtransmitroutineforport2.*5SFWAIT2_FLAG(A1)Marktheport2transmitterready.?BSETW#W_XMIT2,WORK(A1)RunthebackgroundroutinetotransmitBRA.LBKG_EXEConport2.PAGEO*v*****************************************************************************O*************************************************************************************C***BRK1_RECV(BRK2_RECV)--ABREAKWASDETECTEDONPORT1(2)*********I***FUNCTION:Theseroutinesgetcalledbytheport1(2)driverwhen***E***thedeviceonthatportdetectsanincomingbreaksignal.All***2***wedoiscallthebackgroundtohandleit.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:DP.......D******A:PP...P.P************ENTRYCONDITIONS:*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* **********!*Abreakwasdetectedonport1.* BRK1_RECV: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *4*Callthebackgroundtotransmitabreakonport2.*BBSETW#W_BRK2,WORK(A1)Markworkfortheroutinethattransmitsa:BRA.LBKG_EXECbreakonport2andinvokethebackground. **********!*Abreakwasdetectedonport2.* BRK2_RECV: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *4*Callthebackgroundtotransmitabreakonport1.*BBSETW#W_BRK1,WORK(A1)Markworkfortheroutinethattransmitsa:BRA.LBKG_EXECbreakonport1andinvokethebackground.PAGEO*v******************************************H ***********************************O*************************************************************************************E***BRK1_OVER(BRK2_OVER)--FINISHEDSENDINGBREAKONPORT1(2)*********I***FUNCTION:Theseroutinesgetcalledbytheport1(2)driverwhen***F***thedeviceonthatporthascompletedsendingthebreaksignal***F***(whichwemusthaverequestedittodo).Simplygivetheback-***F***groundtransmitroutinesachancetotransmitiftheywantto.************NOTES:*********E***REGISTERUSAGE:(A)rgument(D)estroyed(P)reserved(R)eturned***)***01234567SRhiSRlo(CCR)******D:DP.......D******A:PP...P.P************ENTRYCONDITIONS:*********-***EXITCONDITIONSDIFFERENTFROMENTRY:*********O*^*****************************************************************************O******************************************************************************* **********,*Thebreakwesenttoport1hascompleted.* BRK1_OVER: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *@*Callthebackgroundtoletthetransmittersrunonbothports.*8SFBREAK1(A1)Markthatwe'renotsendingabreakon1.=BSETW#W_XMIT1,WORK(A1)Markworkforbothtransmitroutines3BSETW#W_XMIT2,WORK(A1)andinvokethebackground.BRA.LBKG_EXEC* **********,*Thebreakwesenttoport2hascompleted.* BRK2_OVER: (SAVED1/A0/A1/A5SaveregistersandSR. PUSHSR*2LEADATA(PC),A1A1<--baseaddressofdataarea. *@*Callthebackgroundtoletthetransmittersrunonbothports.*8SFBREAK2(A1)Markthatwe'renotsendingabreakon2.=BSETW#W_XMIT1,WORK(A1)Markworkforbothtransmitroutines3BSETW#W_XMIT2,WORK(A1)andinvokethebackground.BRA.LBKG_EXEC*PAGEO*v********************************************************************************#***BKG_EXEC--BACKGROUNDEXECUTOR***H***FUNCTION:Branchtoheretodispatchbackgroundprocesseswhosebits***aresetintheWORKword.*** ***NOTES:******ENTRYCONDITIONS:#***A1=addrofbaseofdataarea.***O*^***************************************************************************** BKG_EXEC: *'*Makesurewe'rereadyforprocessing.* TST.BREADY(A1)Ifwe'reready,IFTHEN* * *Ensurewedon'tgetreentered.*9MOVEDISABLE_SR(A1),SRDisableinterruptsonbothports.3TASACTIVE(A1)Markthatthebackgroundisactive.#IFTHENIfitwasn'talready, *0*Doallthebackgroundworkthat'soutstanding.*REPEAT AMOVEENABLE_SR(A1),SREnableinterrupts(dropthelevelbyone). ABCLRW#W_XMIT1,WORK(A1)Ifwe'resupposedtotransmittoport1,BNEDO_XMIT1godoit. ABCLRW#W_XMIT2,WORK(A1)Ifwe'resupposedtotransmittoport2,BNEDO_XMIT2godoit. ABCLRW#W_BRK1,WORK(A1)Ifwe'resupposedtosendabreaktoportBNE.LDO_BRK11,godoit. ABCLRW#W_BRK2,WORK(A1)Ifwe'resupposedtosendabreaktoportBNE.LDO_BRK22,godoit. CBCLRW#W_EXIT,WORK(A1)Ifwe'resupposedtoexittransparentmode,BNE.LDO_EXITgodoit. *G*Checkformorebackgroundworktodo.Thisisthecommonreturnpoint*forallbackgroundroutines.* CHECK_WORK:9MOVEDISABLE_SR(A1),SRDisableinterruptsonbothports.6TSTWORK(A1)KeepondoingallthisuntilthereisnoUNTILmoreworktodo. 6SFACTIVE(A1)Markthatthebackgroundisnotactive. ENDI ENDI  *?*Exitfromtheinterrupt(returntothedriverwhocalledus).*-POPSRRestoretheSRandregisterswesaved6RESTORED1/A0/A1/A5whenwewereentered,andreturn.RTS*PAGEO*v********************************************************************************2***DO_XMIT1--SENDACHARTOPORT1IFPOSSIBLE.***J***FUNCTION:ThisroutineiscalledwheneveranopportunitymayhavebeI enF***createdfortheprogramtooutputachartoport1.ThisguylooksG***toseewhetherthetransmitterisalreadyinuseand,ifnot,sends3***thenextcharfromthequeueifit'snotempty.*** ***NOTES:******ENTRYCONDITIONS:&***A1=addrofbaseofdatasegment.***O*^***************************************************************************** DO_XMIT1: /CLRD1Ifwearen'tsendingabreakeitherwayAMOVE.BWAIT1_FLAG(A1),D1andwearen'talreadyoutputtingacharORBREAKS(A1),D1onport1,IFTHEN* ALEAPORT1_QUEUE(A1),A5.A5<--addrofqueueforport1output."MOVEGET(A5),D1.D1<--GETptr.5IFD1PUT(A5)THEN.Ifthequeueisnotempty, 8MOVE.BQUEUE(A5,D1),D0.D0.B<--nextcharfromqueue."SUBQ#1,D1.AdvancetheGETptr.$IFTHEN.Ifitgoesnegative,*MOVE#Q_MAX,D1.moveitbacktothetop. ENDI.*(MOVED1,GET(A5).SavethenewGETptr. **Outputthechar.*9STWAIT1_FLAG(A1).Markthatwe'rebusytransmittingon *.port1.7MOVE.LA5_1-DATA(A1),A5.A5<--addrofport1'sCCB.BMOVE.LTBL1ADDR-DATA(A1),A0A0<--addrofdriverinterfacetable1JSRXMIT(A0).JumptotheentrytooutputD0.B. IFTHEN.IfCCR=,9SFWAIT1_FLAG(A1).wecansendmorewithoutwaiting,so4BRADO_XMIT1.gobackup&checkformoretoxmit. ENDI.* ENDI.* ENDI.* 3BRACHECK_WORKGocheckforotherbackgroundwork.PAGEO*v********************************************************************************2***DO_XMIT2--SENDACHARTOPORT2IFPOSSIBLE.***J***FUNCTION:ThisroutineiscalledwheneveranopportunitymayhavebeenF***createdfortheprogramtooutputachartoport2.ThisguylooksG***toseewhetherthetransmitterisalreadyinuseand,ifnot,sends3***thenextcharfromthequeueifit'snotempty.*** ***NOTES:******ENTRYCONDITIONS:&***A1=addrofbaseofdatasegment.***O*^***************************************************************************** DO_XMIT2: /CLRD1Ifwearen'tsendingabreakeitherwayAMOVE.BWAIT2_FLAG(A1),D1andwearen'talreadyoutputtingacharORBREAKS(A1),D1onport2,IFTHEN* ALEAPORT2_QUEUE(A1),A5.A5<--addrofqueueforport2output."MOVEGET(A5),D1.D1<--GETptr.5IFD1PUT(A5)THEN.Ifthequeueisnotempty, 8MOVE.BQUEUE(A5,D1),D0.D0.B<--nextcharfromqueue."SUBQ#1,D1.AdvancetheGETptr.$IFTHEN.Ifitgoesnegative,*MOVE#Q_MAX,D1.moveitbacktothetop. ENDI.*(MOVED1,GET(A5).SavethenewGETptr. 9STWAIT2_FLAG(A1).Markthatwe'rebusytransmittingon *.port2.7MOVE.LA5_2-DATA(A1),A5.A5<--addrofport2'sCCB.?MOVE.LTBL2ADDR-DATA(A1),A0A0<--addrofdriverinterfaceta1JSRXMIT(A0).JumptotheentrytooutputD0.B.  IFTHEN.IfCCR=,9SFWAIT2_FLAG(A1).wecansendmorewithoutwaiting,so4BRADO_XMIT2.gobackup&checkformoretoxmit. ENDI.* ENDI.* ENDI.* 3BRACHECK_WORKGocheckforotherbackgroundwork.PAGEO*v********************************************************************************3***DO_BRK1(DO_BRK2)--SENDABREAKONPORT1(2)***F***FUNCTION:Thisroutineiscalledtosendabreakonport1(2).It-***justcallsthedrivertodoallthework.*** ***NOTES:******ENTRYCONDITIONS:&***A1=addrofbaseofdatasegment.***O*^***************************************************************************** ***********Sendabreakonport1.*DO_BRK1: >SFWAIT1_FLAG(A1)Markthatwe'renottransmittingonport1.4STBREAK1(A1)Markthatwe'resendingabreakon1.5MOVE.LA5_1-DATA(A1),A5A5<--addrofport1'sCCB.BMOVE.LTBL1ADDR-DATA(A1),A0A0<--addrofdriverinterfacetable3JSRSEND_BRK(A0)JSRtotheentrytosendabreak. 9IFTHENIfweshouldn'twaI itforthedrivertocall$*usatTM_BRK_OVER(ifCCR=),8SFBREAK1(A1)markthatwe'renotsendingabreakhere.ENDI 3BRACHECK_WORKGocheckforotherbackgroundwork.  ***********Sendabreakonport2.*DO_BRK2: >SFWAIT2_FLAG(A1)Markthatwe'renottransmittingonport2.4STBREAK2(A1)Markthatwe'resendingabreakon2.5MOVE.LA5_2-DATA(A1),A5A5<--addrofport2'sCCB.CMOVE.LTBL2ADDR-DATA(A1),A0A0<--addrofdriverinterfacetable.3JSRSEND_BRK(A0)JSRtotheentrytosendabreak. 9IFTHENIfweshouldn'twaitforthedrivertocall$*usatTM_BRK_OVER(ifCCR=),8SFBREAK2(A1)markthatwe'renotsendingabreakhere.ENDI 3BRACHECK_WORKGocheckforotherbackgroundwork.PAGEO*v********************************************************************************)***DO_EXIT--EXITFROMTRANSPARENTMODE***G***FUNCTION:ThisbackgroundroutinesendstheWAKEUPtothetaskpartC***ofTMwhichcausesustoterminatetransparentmodeprocessing.*** ***NOTES:******ENTRYCONDITIONS:.***A1=addrofthebaseofthedatasegment.***O*^***************************************************************************** DO_EXIT: 7SFREADY(A1)Markthatwe'renotready,sowewon'tdo*anymorework. 8SAVED0-D7/A0-A6Saveregisterswhilewecalltheexec. ,MOVE.LSCT_TASK(A1),A0A0<--ourtaskname.+MOVE.LSCT_SESS(A1),D1D1<--oursession.1TR0$.GTXTCB,Callexec:A0<--addrofourTCB.)BRAWAKE_HIMWefoundit--gowakeusup.6BRAEXIT1Transparentmodetasknotfound--justexit. 4WAKE_HIMTR0$.WAKEUP,Callexec:Sendwakeuptous.+NOPWhetheritworkedornot,justrestore8EXIT1RESTORED0-D7/A0-A6registersandforgetaboutit. 2BRACHECK_WORKReturntothebackgroundexecutor.  END=/* =/*COPY.AF=/*'=/* Chain file to assemble COPY utility=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to COPY.LS=/*=/IFC \1 =ARGCOPY.LS=/ENDIF=/*=ASM COPY.SA,COPY.RO,\1;RZ=150=/*{ Included files are:=/*9995.&.FME.EQ=/*9995.&.IOE.EQ=/*9995.&.TR1.EQ=/*}=/*=ENDJ  3=/* =/*COPY.LF=/*%=/* Link chain file to create COPY.LO=/*:=/* If no output argument is specified for the listing the&=/* chain file will default to COPY.LL=/*=/IFC \1 =ARGCOPY.LL=/ENDIF=/*=LINK ,COPY.LO,\1;AHMIXATTRIBUTES D PSEG SEG0:0,14 $0000 INPUT COPY.ROLIB 0.&.UTILIB.ROEND=/*=END <TTLCOPYUTILITYREV1219844COPYIDNT4,0COPYUTILITY OPTFRS,CRE<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;*************************************************************%*PROGRAMNAMEISCOPYU.DATA*******COPYCOMMAND******/*THISCOMMANDWILLCOPYAFILEFROMONEVOLUME"*TOANOTHERVOLUMEORTOTHESAME*VOLUMEBUTANOTHERNAME..*THEREWILLBENODATACONVERSIONOFTHEFILE*DURINGTHECOPYPROCESSING.* *REV1.00!*REGISTERSUSED:01234567*D********A*********=**************************************************************LIST LLEN120PAGE****COPYMODIFICATIONHISTORY**REVISIONCODE1220844*)*THECODEWJ ASMADEPOSITIONINDEPENDENT:"*1.THEPBAWASLOADEDOFFTHEPC.*2.ALLLEAINSTRUCTIONSWEREDONEOFFTHEPC2*3.ALLIOSCALLANDFHSCALLWEREDONEWITHLABELS *OFFTHEPC7*4.SEVERALMOVEINSTRUCTIONSWEREREVISEDSOTHATTHE$*ADDRESSMOVEDFROMWASOFFTHEPC.**REVISIONCODE0806844*;*ANEWROUTINE,IOERCHK,WASADDEDTOCHECKFORIOSBUFFER<*OVERFLOWERRORS.IFONEISFOUND,THEUTILITYASSUMESTHAT<*THEFILEBEINGVERIFIEDISNOTANASCIIFILE,ANDPERFORMS1*THEREMAINDEROFTHEREADSUSINGBINARYFORMAT.*6*CHGENDISNOWRESETBEFOREEACHRECORDISREAD,THIS9*FIXESANUNDOCUMENTEDPROBLEMWHICHCAUSEDTHE'RECORDS>*NOTTHESAMELENGTH'MESSAGETOCONTINUETOBEPRINTED,EVEN**WHENTHERECORDSWEREOFTHESAMELENGTH*9*TWOADDITIONALCHECKS,ONEFORNULLINPUTANDONEFORA7*COMMAASTHEFIRSTCHARACTEROFTHEOUTPUTFIELDWERE*ADDED.*9*TWOENHANCEMENTSWEREADDED.ONEALLOWSWILDCARDCOPIES8*TOASINGLEFILE.WHENAWILDCARDISSPECIFIEDINTHE6*INPUTFIELD,ALLOFTHEFILESMATCHINGTHATWILDCARD7*(ORALLTHEFILESSELECTED,IFTHATOPTIONISCHOSEN)8*WILLBECONCATENATEDINTOONE.INCOMPATIBLETYPESWILL<*PRODUCEERRORMESSAGES.THESECONDENHANCEMENTISSIMILAR, EC NB Vd ^` fU nW vF ~< c g W > I 9 + B 6 E : 5 ; Q9*BUTINTHISCASETHEMULTIPLEINPUTFILESARESEPARATED6*WITHA'/'.THEFILENAMESWILLBEOUTPUTASTHEYARE *COPIED.*4*THEVERSIONNUMBERISNOWPRINTEDATTHEBEGINNING*4*THECHECKFOROPTIONSISNOWDONEBEFORETHECHECK4*FORNULLFIELDSSOTHATA'COPY;H'WILLPRODUCEA*HELPLISTING**REVISIONCODE0203844**7*IFTHEREISANSPRFORTHISPROBLEMIDON'TKNOWWHAT.*THENUMBERISBUTTHEPROBLEMISASFOLLOWS:!*=COPYJUNK.CF,JUNK.XX,JUNK.YY;B:*THEABOVECOMMANDLINEWOULDNOTWORKIFTHELIST/DEVICE'*PORTIONOFTHECOMMANDLINEWASFIXED *ITDOESNOW**REVISIONCODE1019834*4*SPR669fixed.AproblemoccurredusingCOPYX,Y;B3*whenthedatablockofXwasgreaterthan13,the0*defaultsizeforverify.Thisprogramwillnow6*getasegmentthesizeofthedatablockasfoundin/*theparametertableaftertheassignismade.**REVISIONCODE1005834*6*'V=x'ADDED,WHERExREPRESENTSTHEMAX#OFVERIFY8*ERRORSTOBEDISPLAYED.COPYTERMINATESWITHAWARNING"*IFANYVERIFYERRORSWEREFOUND.**REVISIONCODE0920834*3*CONTAINSNEW'U'OPTION,WHICHENABLESTHEUSEOF.*THEUSERNUMBEROFTHEINPUTFORTHEOUTPUT.**REVISIONCODE0823834*.*CORRECTEDPROBLEMOFONLYTHE1STDIFFERENCE/*BIENGPRINTEDPER13SECTORBUFFERINSTEADOF5*1STDIFFERNCEPER1SECTOROFTHE13SECTORBUFFER.**THISOCCUREDIFTHE'T'OPTIONWASUSED.**REVISIONCODE0601834*$*CONTAINSCODETOENABLE'C'OPTION**REVISIONCODE0428834*+*CONTAINSCODETODORECORDI/OFORAPPEND$*IFFILESHAVEDIFFERENTBLOCKSIZE***REVISIONCODE1006813* *CONTAINSERRORMESSAGEHANDLER$*CONTAINSPOSITIONINDEPENDENTCODE-*CONTAINSCURRENTREVISIONCODEMODIFICATION5*CONTAINSTERMINATIONLOGICFORUSEWITHCHAINFILES1*CONTAINSCOMMONSUBROUTINESPULLEDFROMLIBRARY*USESTHE'SBARG'ROUTINE3*CONTAINSTHEADDEDCHARACTERSPACEFOR'SBARG'TO*PLACEA'CR'"*CONTAINSNEW'T'AND'P'OPTIONS$*WILLAPPENDTOANON-EXISTENTFILE*RETRYLOGICWASREMOVED:*GIVESNOTIFICATIONOFCOPY/VERIFYSTATUSUPONCOMPLETION *OFREQUEST9*WHENVERIFYDIFFERENCESAREDISPLAYEDTHERECORDNUMBER'*WILLBESHOWNINDECIMALATALLTIMES***REVISIONCODE1028813*:*INCREASEDSTACKSIZETOACCOMODATESBARGIFACHAINFILE0*FIXPROBLEMOFCOPYINGTOTHEDEFAULTTERMINAL***REVISIONCODE1029813*%*CORRECTERRORWITHCOPYERRORCOUNT**K ******REVISIONCODE1103813*2*REWORKCOPY/VERIFYOUTPUTWHENREQUESTCOMPLETED:*SHOWRECORDNUMBERSINHEXASCIIIFCONTIGIOUSFILETYPE*******REVISIONCODE1202813*)*CORRECTPROBLEM,T.SANEWERRORMESSAGE(*CORRECTPROBLEM*.TES*.*,*.TES*.*,FIX:*ELEMINATELOOP*CORRECTPROBLEMX.SA,Y.SA;Q*WHEREQISANINVALIDOPTION9*CORRECTPROBLEMADJUSTEDSBARGINPUTBUFFERSTOMINIMUM**OF5CHARACTERSPLUSADEADBYTEFORTHE*CARRIAGERETURN6*CORRECTPROBLEMFORCEUSERTOSPECIFY'A'OR'S'FOR*ALLORSELECT**CORRECTPROBLEMCLEANEDUPTHEHELPMASK*******INCLUDEFILES***INCLUDE9995.&.FME.EQ*INCLUDE9995.&.IOE.EQ*INCLUDE9995.&.TR1.EQ**NOLISTINCLUDE9995.&.FME.EQINCLUDE9995.&.IOE.EQINCLUDE9995.&.TR1.EQLIST**PAGE<*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;*************************************************************!****COPYCOMMAND**********DATASEGMENT*******=********************************************************************EQUATEAREA******* BEGDATAEQU0(STKLENEQU25STACKLENGTHINLONGWORDS)BUFSIZEEQU160INPUTCOMMANDBUFFERSIZE DSKLUIEQU1(DSKLUOEQU2DISKLOGUNITASSIGNOUTPUT!LISTLUEQU3LISTINGLOGICALUNIT"DIRLUEQU4LOGUNITFORDIRECTORY LU6EQU6SECLENEQU256SECTORLENGTHHSECLENEQU$100SECTORLENGTH CREQU$0D LFEQU$0A*PAGE OFFSET0**DUMMYDATASEGMENT*3******************************************************BUFFERAREATOREADCONTIGUOUGFILEINTO*3****************************************************PAGE SECTION0!XREFEDITFILE,PARSE,OPTION,SBARG******MACROAREA*********NEXTWORDBOUNDRYMACRO**PAGE2*******************************************************DATASEGMENT(DSEG)****1**************************************************** PBAEQU**;*****************************************************************DATAAREA******:************************************************************ REV_CODE:DC.B'1220844'&*WHEREREV_CODEISDEFINEDASFOLLOWS *MMDDYYXZ*3*MMDDYY=MONTHDAYYEAROFLASTASSEMBLYORPATCH*X=REVISIONTYPECODE*SPACE=CLEANASSEMBLY *P=PATCHED*C=CUSTOMIZEDPATCHED**#*Z=VERSADOSMAJORREVISIONFIELD* DS.LSTKLEN PROGSTKEQU**DC.L0DS.W08*+++++++++++++++++++++++++++++++++++++++++++++++++++++++*,****BUFFINISTHEAREATHECOMMANDLINEIS.****READINTOWHENTHISPROGRAMISCALLEDIN*8*+++++++++++++++++++++++++++++++++++++++++++++++++++++++**BUFFINCOMLINEBUFSIZE***INPUTBUFFER***-**********************************************5******************************************************+***IOSPARAMETERTABLEFORDISKREADS***6***REFERTOIOSEQUATESUNDERIOSPARAMETERBLOCK***5******************************************************DS.W0/IOS.DSKRIOREAD,IOPWAT+IOPREC,DSKLUI,0,0,0,0,0$************************************%*IOSPARAMENTERTABLEFORDISKWRITE*$*************************************(IOS.DSKWIOWRIT,IOPREC,DSKLUO,0,0,0,0,0DS.W0*1*HOLDAREAFORIOSTABLESFORBOPTUSINGFAMILY HOLDPTFDS.L2HOLDAREAFORFMSHOLDPTIDS.B56HOLDPTEEQU*-13*****************************************************IOSPARAMETERTABLE(*SETUPIOS(ERR0R-LOG)PARAMETERBLOCK*3****************************************************7IOS.OUT6IIOWRIT,IOPASC+IOPIMG+IOPWAT,LDFLUN,0,0,0,0,0**DS.W0**GETSEGMENTPARAMETERBLOCK* BUFPAREQU*DC.L0,0TASK(0=SELF)DC.W$2000OPTIONS0*RMS68KSUPPLIESLOGICALADDRESSEQUALPHYSICAL *ADDRESSDC.W0(RAMSEGMENT)DC.L'BUFR'NAMEOFSEGDC.L0STARTOFBUFFER'BUFLENDC.L0lengthofbuffer10/19/83**SETUPIOSFORLISTINGLU3*6IOS.OUT3IOWRIT,IOPASC+IOPFOR+IOPWAT,LISTLU,0,0,0,0K ,0DS.W0PAGE"***********************************8*FHSPARAMETERTABLEFORCHANGELOGICALUNITASSIGNMENT5*CHANGEISFROM6TO3-SENDSOURCEISLUAINMASK*ANDRECEIVEISLUBINMASK4*LU3ISUSEDF0RLISTINGANDLU6FORERR0R/LOGGING**3*PARAMETERTABLEFORCHANGLOGICALUNITASSIGNMENT,*ISDIFFERENTFROMSTANDARTPARAMETERTABLE*%************************************** LU3AFHSEQU*'DC.WFHCHLUCOMMAND(CHANGELUASSIGN)&DC.WFOPKEP+FOPSLUOPTIONKEEPASSIGNDC.B0STATUSDC.BLDFLUNSENDLUNUMBERDC.BLISTLURECEIVELUNUMDC.B0RESERVED&DC.L0TASK-ID(0MEANSUSEYOURSELF)(DC.L0SESSION#(0MEANSUSEYOURSELF)*DS.W0* *SETLU2=LU6IFOUTPUT#ONLY* LU2AFHSEQU*'DC.WFHCHLUCOMMAND(CHANGELUASSIGN)&DC.WFOPKEP+FOPSLUOPTIONKEEPASSIGNDC.B0STATUSDC.BLDFLUNSENDLUNUMBERDC.BDSKLUORECEIVELUNUMDC.B0RESERVED&DC.L0TASK-ID(0MEANSUSEYOURSELF)(DC.L0SESSION#(0MEANSUSEYOURSELF)*DS.W0***,*********************************************&*PARAMETERBLOCKFORINPUT(TERMINAL)*,*********************************************'IOS.OUTINIOREAD,IOPFOR,CDFLUN,,,0,0,2*DS.W0%IOS.DNRIOREAD,IOPFOR,CDFLUN,,,0,0,2*DS.W0)******************************************?*LU3FHSISPARMTABLEFORLU3WHICHISUSEDFOROUTPUTLISTING*********************************************#*FHS.LU3FHCLOS,0,LISTLU,0,0,0,0,0&FHS.LU3FHASGN,FOPEW,LISTLU,0,0,0,0,0 DC.L0,0,0*DS.W0*;************************************************************:****DSKFHSISTHEPARAMETERTABLEFORTHEFHSINPUTFILE*;***********************************************************INFHSDC.WFHASGNCOMMANDDC.WFOPPROPTIONSPUBLICREADDC.B0STATUS DC.BDSKLUILOGICALUNITNUMBER INVOLDC.L$20202020VOLUMENAMEINUSNDC.W0USERNUMBER!INCATDC.L$20202020CATALOGNAMEDC.L$20202020DC.L$20202020FILENAMEDC.L$20202020DC.W$2020EXTENSIONINFHSRDC.W0RESERVEDDC.B0WRITEPROTECTCODEDC.B0READPROTECTCODEDC.W0LOGICALRCORDLENGTH5INSECDC.L0CONTIGUOUSFILESIZE/DIRENTRYPOINTER6*FOLLOWINGFHSPARAMENTERSFORSHAREDSEGMENTREQUEST(DC.L0SEGMENTSTARTINGLOGICALADDRESS$DC.L0SEGMENTENDINGLOGICALADDR.3DC.L0LENGTHOFPARMBLOCKFORSHAREDSEGREQUESTDS.W0***%*FHSPARAMETERBLOCKFORDISKOUTPUT* OUTFHSEQU*DC.WFHASGNCOMMAND DC.WFOPPWOPTIONS-PUBLICWRITEDC.B0STATUSDC.BDSKLUOLOGICALUNITNUM!OUTVOLDC.L$20202020VOLUMENAMEDC.W0USERNUMOUTCATDC.L$20202020CATNAMEDC.L$20202020DC.L$20202020FILENAMEDC.L$20202020 DC.W$2020DC.W0DC.B0WRITEPROTCODEDC.B0DC.W0DC.L0CONTFILESIZE DC.L0,0,0CONTIGIOUSFILEINFODS.W0*"*VOLUMEASSIGNMENTFORFAMILYAND**PARAMETERBLOCKFORFETCHDIRECTORYCALL DIRFHSEQU*DC.WFHFDENCMDDC.WFOPPROPTIONSDC.B0STATUSDC.BDIRLULOGUNITDIRFHSVDC.L$20202020VOLDC.W-2USERNUMDIRCATDC.L''CATALOGUE DC.L''DC.L''FILE DC.L''DIRFHSEDC.W''EXTDC.W0DC.B0DC.B0DC.W0DC.L0DIRADDRPARM*DS.W0&*DIRECTORYENTRY(DIR)DATASTRUCTURE'*THEDIRENTRYISREADINTOTHISBLOCK*DIRBLKDS.BFDLEN*DS.W0;************************************************************(*PARAMETERBLOCKTOASSIGNINPUTVOLUME*DIRVOLDC.WFHASGNCOMMANDDC.WFOPPROPTIONSPUBLICREADDC.B0STATUSDC.BDIRLULOGICALUNITNUMBERDC.L$20202020VOLUMENAMEDC.W0USERNUMBERDC.L$20202020CATNAMEDC.L$20202020DC.L$20202020FILENAMEDC.L$20202020 DC.W$2020DS.L3(DC.L0SEGMENTSTARTINGLOGICALADDRESS$DC.L0SEGMENTENDINGLOGICALADDR.3DC.L0LENGTHOFPARMBLOCKFORSHAREDSEGREQUESTDS.W0**'HOLDFUSNDC.W0FAMILYUSERNUMBERMASK*HOLDMASKOUTPUTFORFAMILYHOLDFAMDC.L''CAT DC.L''L DC.L''FILE DC.L'' DC.L''EXDS.W08*************************************************************WORKAREA******9**********************************************************STSKNAMDC.L0SAVETASKNAMESESNUMDC.L0SAVESESSIONNUM#VOLNAMDC.L0SAVEVOLDEFAULTNAMEDC.W0TOPHALFOFD3"USERNUMDC.W0DEFAULTUSERNUMBER*CATNAMDC.L0,0SAVEDEFAULTCATAGORYNAMEDS.L3REGD6D7&A0&TIDLOGONDC.L0TERMIDATLOGONTIMEDC.W0TOPHALFOFA2"LUSERNUMDC.W0LOGONUSERNUMBERDS.L8SAVEOTHERSREGISTERS-PROTINDC.W0SAVEINPUTPROTCODEFORFAMILY$PROTOUTDC.W0SAVEOUTPUTPROTCODEOFLAGDC.L0MOREOUTPUTFLAG DNRRDC.B''NOTREADYRESPONSEDEVFLAGDC.B0DEVICEFLAG!FLAGADC.B0OPTIONAAPPENDFILEEXFLAGDC.B0ENDOFINPUTFLAG"NCFLAGDC.B0CONTIGUOUSFILEFLAG!FAMIFLAGDC.B0FAMILYFLAGINPUT"FAMOFLAGDC.B0FAMILYFLAGOUTPUT#ERFLAGDC.B0ERRORFLAGFORFAMILY0QFLAGDC.B0SETWHENFAMILYCOPYABORTEDWITHQ****080684***4FAMAPENDDC.B0WILDCARDAPPENDFLAG***080684***3REREADDC.B0FLAGFORREREADAFTERBUFFEROVERFLOW!*ADDED080684TOCORRECTSPR1035*DS.W0*0SAVOADDDC.L01STTIMEFLAGFORPRTDETAILLINE'FORMFEEDDC.B$0CTOPOFPAGECHARACTER!ODEVDC.B0OUTPUTISDEVICEFLAG IDEVDC.B0INPUTISDEVICEFLAG%ISDEVDC.B0INPUTOROUTPUTWSADEVFLAGYDC.B0BYPASSFLAG,FLAGNDC.B0DUPFILEDONOTOVERDELETEOLDFLAGVDC.B0VERIFYFLAGFLAGBDC.B0COPY&VERIFYFLAG'FLAGCDC.B0MAINTAINCATALOGNAMEFLAG&FLAGUDC.B0MAINTAINUSERNUMBERFLAG/CHGENDDC.B0ENDOFRECORDSNOTSAMEINVERIFY-NOTENDDC.B1ENDFLAGNOTATEND=1END=0SELDC.B0SELECTINDICATOR2V_EQUALDC.B0"="INOPTIONSFIELDAFTER"V"FLAG5OV_VALUEDC.B0ORIGVALUEAFTER'V='INOPTIONFIELD,V_VALUEDC.W0DECREMENTEDVALUEOFOV_VALUE*)BUFCEDS.L1#sectors*256-110/19/83 BUFNUMDS.L1BUFCE+110/19/834BUFNUMEDS.L1#sectorsinfiledatablock10/19/830BUFSIZDS.L M M N N O O