# 8 ~)~8~} ~4~ ~vIh%<= uA Niw35150832-#`aqYIOf ~ ~(|p<~ t`2O)|! OKz   |`Xّ`)h=xӕ !  ͕xӕٕ`\@` O|#$%&+L$T8l,3L_đ lđ|#$%&`.@Z\Ys8a0(eMpo/oppplp_`ÑÑt2$]h]$]>HȑÑxg<`Ќ/ʏ$ȌHppdzɏʌx |T-DL T-`67 w zXғ<%d+ԓZy[\]^! iRlR|QiRxQQJdRKQLdRYRZiRyRR[R\]RRRR^(R!@R XRR\QR,RRQ@QQlRhR\TW\t   (it  \  (TX+ B !, \ \, ,, ,  tT$ Ɣ ,9 $( \ ,  (} <  <  \9$& \ , 9$,y d 8/>ACX]^` $!"$$&&)++--022446799;;=>@@BBCECCJJJKLNNQQSSTVVXXY[[\^^eeeeeeegghjwwspqssuwwjzz{|}~vgj|9NSdJ MyFn a;t;n This fn is used in conjunction with the code coverage ws. It contains code that has to be checked to see if all lines are used at least once branches are proper, etc.  0l80 branch never taken  :if 2=2 t'this ALWAYS executed' NS:endif : NS  :if 0  'never done'  NS:endif this line to be splitted into 4 : NS :Else statements behave differently depending on :If case  :if a=1 t1 : :elseif a=2 t2 NS:Else : t3 NS:endif : NS  :if a=1 t1 NS:Else no :elseif : t3 NS:endif : NS  :if a=1  :andif 0 : 'never' NS:endif : NS  :if a=1  :andif 1 : 'once' NS:endif : NS  :if a=1  :orif 0 : 'once' NS:endif : NS  :if a=1  :orif 1 : 'always' NS:endif : NS n3 : :while a2)l10  t2 : l10:NS   :if 0  NS:endif : NS  l20 NS : l30:NS bad: branch followed by label  l40 NS : l20:l30 NS : l40:NS same here empty lines are not executed in APL2000 they must be replaced with an executable statement Test control statement NS:repeat : tt+1  :until t>7 :for t :in 12 : :if t=3   NS:continue NS:Else  : a0 NS:endif : :if t=7  :goto l60 NS:endif : :endfor : NS : l60:t0  t1  t2   l70 NS : l70:NS branch before label: wrong : l80:NS label never used no need of  between :: in Dyalog : end:NS   :if 1  NS:endif : NS | ,d܏'Aѱ@@@@@@@@@@@@@@j@(@@@@@*@@@,@,@@0@0@?@@@@@?@@?@@?ȧ@0@?@t@@O@O@@@@?ö@I@?{@{@@˲@@@k@@@@@@@@?<@F@@@@@@@?3A3A?@@?@@@L@L@@l@l@@yAyA?f@@?@@@@@@@@@@@ʺAʺA@x@@@+@@N@@@@@k@k@@7@7@@Խ@*@@ @@@@@@@@s@@@@@@9@@@ @ @@@M@@@@@@@@@@@@@@@@.@a@a@.@e@e@@@@8@@@@@@5@@@@@5@`@`@5@@@@@@5@@@@#@#@@@@@@@@@}@@@Ķ@@@(@@Z@Z@@C@@@@L@@| )P(༔8Ŕp ˔pѕ88ƔoL,ՕÔ Ɣؕ Ŕ Pɔ , ̼  L˔0phȔdɔ”$Ɣ0ɔ͔D”ɔ`ȔL,ʕ`”Hp`qɔ ˔oɔ`LʔD0ʔɔoĔoXo4ÔD̔Ȕlot͔ o(̔ o!"Ȕp# ԕ˔$p˔$$ԕ%pLÔ%ӕ&<ԕ(Ô'TԕȔ(ԕƔ)lԕŔ)ԕ*̔*+ԕ`̔,|”-hʔ.ʔ./Ô/Hڕ04ڕÔ14Ô2tpƔ3ѕ34(ؕTƔ4ؕ5X6ɔع7ؕ8s8 9코ܶ::@ʕ;h;8˔<Hҕʔ=Ȕ=ʔ>0tT>Է?jʔ@t@ĔAʔɔBĔBCڕlʔC,DEFGHŔI08ItJtqKhÔІLMtȔ,N$O͔OhP͔PQ͔R\RDSTĔUUPV8WlWXXxpY@$”Z\͔”[D͔\0͔\͔]̔]Ŕ^̔|^̔_˔`̔``axjDb|”bdcP”cȔt$ \ , 9$ <   < t9(  \ .(,@+  Ⱥ  ,     h W ,, ! !, \ ,/ ! !, 89\:  h4Б bad: branch followed by label?4$  , 9 $$  $th NSe.  :endif s oNSte h D & z z\ǔ8, ! DDx 2  , \t,Ĕ ,  x D0    , ,  0D )  , , , D , D < <(  D ,(lCC#NS:endif#NS # t  9  Q <@fD 0 \ , , , Ĕ , D:if t=3 t1 1NS$ \ , 9 $ <f H they must be replaced with an executable statement H< at least once branches are proper, etc.<NSP|& bad branch; no way to know if 2nd statement will be executedP$$:Else no :elseif>$@NSL This fn is used in conjunction with the code coverage ws.L<(:endif this line to be splitted into 4< K'always'<pD empty lines are not executed in APL2000<,l70l80 branch never taken,$:if 0 ,jt'this ALWAYS executed',؄:if a=10PNS,  !” z !,, o ! / ,4/ "@oD !, / 44@ "(o\ !, / 4  :while a7:andif 0end "  , 9 8 P   P <\ K"\ ,  6  +t,  \( t  ,(dI  < ?lNSHp:goto l60 @'never done'  X It contains code that has to be checked to see if all lines are usedX,(F Test control statementbef,0?@D0D t , \ 0$U    $$  P[Q]LI5$ t90  |"t, 0xt3 DP:for t :in 12 NS :\    x'never':andif 1hNS     D  NS`Q:elseif a=2 (a>2)l10 U $ \ , 9 $ < p`:Else  /   <   \   <   < ̔Gl20:l30_:if 2=2> Lf :Else statements behave differently depending on :If caseL <: 4 no need of  between :: in Dyalog4$ label never used$ < t9$ \ , 9$ Palways  <end:NSl80:NSl70:NSNSNSl70t2 :endifa0NSNSlRFMyFn a;t;n This fn is used in conjunction with the code coverage ws. It contains code that has to be checked to see if all lines are used at least once branches are proper, etc. 0l80 branch never taken :If 2=2 t'this ALWAYS executed' :EndIf :If 0  'never done'  :EndIf this line to be splitted into 4 :Else statements behave differently depending on :If case :If a=1 t1 :ElseIf a=2 t2 :Else t3 :EndIf :If a=1 t1 :Else no :elseif t3 :EndIf :If a=1 :AndIf 0 'never' :EndIf :If a=1 :AndIf 1 'once' :EndIf :If a=1 :OrIf 0 'once' :EndIf :If a=1 :OrIf 1 'always' :EndIf n3 :While a2)l10  t2 l10:  :If 0  :EndIf l20 l30: bad: branch followed by label l40 l20:l30 l40: same here empty lines are not executed in APL2000 they must be replaced with an executable statement Test control statement :Repeat tt+1 :Until t>7 :For t :In 12 :If t=3  :Continue :Else  a0 :EndIf :If t=7 :GoTo l60 :EndIf :EndFor l60:t0  t1  t2  l70 l70: branch before label: wrong l80: label never used no need of  between :: in Dyalog end:  :If 1  :EndIf xNSTfT^NST< T^`T:endfor:endift:continueNS:if t=7XNS@:orif 1j:endiflNSNSL 17! Kz   * + """"#$&&'()*+,-./0666666L$? no label branch$xLegend:EndWhile1: While1 Fn1Fn CRs1CRs   cccc ''r 4 rr,' ',(ne((1n),1)n),' ',f4@ f('P[Q]LI5'FMT1F),F add line nos@D rner,' ?'[0,1labbi] all labels should be usedH8 rr,' '[nu1n 8 bi1,1n>1n branch in8@ following are (some "controlled") branches@@ r((r),1)r' x'[nu] lines not executed@D nnu1nun=0 not used & next not usedDL nnen only deal with non empty linesL8 fF0 4f already left justified8$ brne/f[;2]='' $$ labne/f[;1]=':' $@ ne'monitoring off'=n(MF ons,''Fn)[;2]@ n0D Fn1(f=' ')penclose f(r1r' '=f)/f,' ',nDS Pt1NS mt1$ <$:  , 9$ R t  ((live0=NC'f')Else1(@)0xÔXĔ 0Ȕ l ܿ  <LTTdhH쾔`0(`ǔǔDXǔ0ǔƔ P\!$"Lດ#,$踔%&L|', ((T)8*+,-.h/0|t@L f''CRs ( branch always taken0(tDM,this ALWAYS executed, livel10H per rbe 1998. Produce code coverage report for fnsbelH CRs, fC(8 branch never taken( onsIO0(h: label never used(DM`DM(x line never executed(\ a branch is never used if it has an equal (or smaller) execution times;3]\4 CRs,( ',( ',ons),Fn, 'CR)'4< SHADOW'ML'  ML2  ons'.',0NSIind<%%SYNTAX ERROR )edit CC ^  (hΔ(Hjtest CC CCinit CClower CCreset CCtest CCtext CCuH$ϔI>ne $ Testcontinue Te pcc f CC n;r;CRs;live;Fn;any;bi;bo;ons;dab;br;ne;dia;rem;el;lab;IO;B;cs;nu;nnu;for;F;cba;if ^dp@ It can be called monadically with fn namesNSI@$l10:nef[;0]'' 0 $D cc1 1 (0,-rr' '^.=cc)cc(xLegend,1)CR'CC'osD EndIf1<Else1:, While1:(0nu] always taken (line used, next NOT used) TL 'f' is cr of fn and flags. 'n' is list of line counts.dsLonce ,H  , , ,4j " , "t, /y 4BU %CRlf $h FX 0 4lfFn$ tBorigBU H(p| t  `T  D Dhx xl@\pxDPl@ # Testsplitline5 next line to be splitted in 5  :if 1   21  dsa  NS:endif  : 2+3 ...:ENDif (XTestsplitline5(  % Testsplitline4 next line to be splitted in 4+1  :if 1   21  dsa  NS:endif ...:ENDif : NS # Testsplitline3 next line to be splitted in 3  321   21  dsa ... # Testsplitline2 next line to be splitted in 3  321   21  dsa % Testsplitline7 next line to be splitted in 2+1  0 if 1   21 NS # Testsplitline6 next line to be splitted in 4  :if 1   NS:return  NS:endif  : 2+3 ...:ENDif # Testsplitline1 next line to be splitted in 3 : l10:321   21  dsa (8Testsplitline2((XTestsplitline4(,Testinsertmultline,(2Testmod1linewrem(#s Testmodcomment  l10 NS line with comm : l10:NS ( Testinsertbetweenlabels line to be inserted after this one : l10:21 NS : L20:121  Testmod1linewrem modify line with comment  l10 NS rem : l10:NS @((>* some branches followed by labels in <@(Testsplitline3(, Testifelseif  :if 1 'true' : :elseif 0 'false' NS:Else : 'maybe' NS:endif : NS  :if 1  'T'  : :elseif 0  'F'  NS:Else  : '?'  NS:endif : NS ,(Testsplitline6((fTestsplitline1($^ Testifelseif$(;Testinsertline((&Testsplitline7(U  Testifelse  :if 1 'true' NS:Else : 'false' NS:endif : NS  :if 0  'T'  NS:Else  : 'F'  NS:endif : NS (B  ,\((;Testmodcomment(  ( Testifcomment  :if 2=2 t0 this ALWAYS executed NS:endif : NS  :if 0  'never done'  NS:endif this line to be splitted : NS $^ Testifelse$,Ԁ  , ,/"H,(8  \8w (4 !  , ,  H'4(  ,  ((c  , ,(n Testinsertmultline 32   l10 NS : l10:NS u Testif  :if 1  0 NS:endif : NS  :if 0   0  NS:endif : NS   Testcontinue : :while 1  NS:continue NS:endwhile : NS : :while 0   NS:continue  NS:endwhile : NS tq     r T D  D   , +t,8  , T Testif 0fTestinsertbetweenlabels0   !0Ԁ    /0, 0 Testend r  Testbranchtonext :for i :in 8  : 321  :endfor  : NS:repeat  : 21   :until 0   :orif 1 : NS ( Testifcomment($   .$$   , $$ Testcontinue$D 2  0,   ! !D( \   (,  !/+  ,3 ,( | !, ($T   ! !$,  t ,+ ,`.   (Testbranchtonext(,    ,   ,4 ! } }\, }4(   +  (4 " \,/3   4` M`  t /D //:)  / `,> contains diamonds<,(  , ,(  nd$     $,   , , ,,(t     (P = +    /, , \, P0   ,, , 0D/ , x,\ t, ,/"PD( t .(,  , , ,,  \ , , ,  D *   ,  + , D(+     +( ( Testaddlastline line to be inserted after last one : l10:21 NS D % , , ,   ܱD,   ,3 , ,T C   `,6 ,+ + , T0   x, + !0P > \ , ,t ,,  /    PD )   !, 3\,   D : D -   / /, , \D=, 4 , ,  ,D -  6  +t,  DD : +   ,  /. D ,*** ":end" on line ,$    $$#    $04 \ ,  D 0D &  /) , ceD(  ) , (D0 &  /) , rx~DL :     , ! +t, . LP @ H \,` \, \, \, P(   t, Ĕ(*d Q   m: \)t , , \ !IJKd0*** ":end" on line 3 50(  /  (D[ )  ! , m\ ,0" ɔD<T!!>improperly formatted function: <<r:` Mt !,  ! !, 3 , \  !`(   , , (0 t  \0ϔP > /t$ !, , ,, \ PD 2t / \ //d , mthD$li e  , ,$dH Testinsertline  l10 NS : l10:NS d(   }t, (,  !/+  ,3 ,(  !,  (:endՔ: (   \ea(D 'x ,, t, /" liD,er e ! t ! ,`\ K } } , "  ! !, 3 !\  e\P]) C> },, ! !, \ ,/\ }(aPD &   \,  ,/ D,  ,  ! !, |D &  ) , , ,  D00   : 0(Testaddlastline(NS$st n "$spfixs4li e!t (  , as 4  $  }m !  )-/1E^c ! !!"#$%&)))*+,-./0123456789BBBBBBBBBCDFFHHJJMMMNOPQRSTWWWXYZ\\ddddddddefgjjjklnnorrrsuuxxxyz{}}~er i$  EndWhile1:   While1 (  fn(1+fn' ')fne ( hee EndIf5:d c 0met newnew( Fn),( lf) 0  Else5:$olo EndIf5ext$$  b1 MF Fn$(  t,Fn,'CRlf'((  (fix>1)Else5 (   EndIf4: ,  nt,'FX 0 4lf' ,Dn o (0=NC b)/b,'orig' take a backup copy?D(  bt,Fn,'BU' (0  (modified^fix=1)EndIf4th0am ineD  lf(0,-bb' '^.=lf)lf remove extra columnsDDl t tons,(-bb'.'Fn)Fn the original sourcedD     EndIf3: Th ( o lf(-b,0)lf i(Lonr modifiedmodified~b~(' '.,1 0t)''t2 3lfLT  remove final null statement if line before has no branch T  $Ths EndIf31:py$,f h lf[line;]bine,P  blf[line;4],(0,-lns)(nnullstmt),0 4lf[line;]gPD  lflf,((t),lns)' ' add padding D,  (n+/t)EndIf31t,\  linet/t(((CS[;2])/CS[;0]) lf)[;4] this line in SAPL\\ths add null statements where needed (all stmts starting a new line) \  P n lf[t/t;4+lns]nnullstmt insert null statement P@  lf(~t)lf expande @Lmil n+/t\(1+b)/b create expand mask L(  bbl^1/br (L  we still need to split before labels preceded by branchesLX  lf[line;0]' ' those are no more comment lines XL  lf[line;](0,-lns)f(nnullstmt),elllf[line;]s'L, Oi f-ell4+ell[line],<  nlinet/t(ell>0)el^lab1bl<\fi do not insert but modify lines where a full comment exist (or is empty) \Dfn1 insert null statement after labels where requiredDL  (0fix)EndIf3 fix troubles here toL i omeXlae lf(el\''),(lab\':'),((/br)\''),(dab\'*'),lf columns of flagsXX'N lablab1end>dab mark statements following ":end" as labels X$  put flags with fn$  X  error (modified^0=fix)/(1'>improperly formatted function: <',Fn)Xhie  stf EndIf2: X  1'>* some branches or control stmts followed by  in <',FnonsX(  (n/dab)EndIf2 (d  branching out before rest of  statements are executed prevents their coverager ld     EndIf1: Lb= 1'>* some branches followed by labels in <',Fn L4  (/bllab^1t/b//br)EndIf144  t(1t)-1t(b/t),tb~el 4\  account for empty lines (because of some APLs' behavior with empty lines)\  X  being branched to (same out of the branch as into the label for ex)reXXs? branching before a label prevents from determining if the label is X(mdfie(l^ report trouble cases:(  (  lablabcbr>dab (@or( branched to line exclude those to be splitted@T  dab/dia^\csbr any statement to split?hiTD  diab^lf='' diamonds DH  fellell\dia((+/^\' '=f)fdiaf,'')[;0]' ' HH  even those with labels. We should account for that. lHPnd for some APLs, lines without code are NOT reported executed PL  labell/cs1tstr lf)l20 @4  lf(cs,1str)CClower( f),( b)c48s l str( ':end'),(CS[;1])/csCS[;0] 88  appropriatly, i.e. :for  :endfortmt8T i check that no :end statement appears - they should all be matchedT  4s" "branches", "is an :end", etc. 4T  Ctrl stmts are listed in variable 'CS' along with properties likeTT  No label and control str is allowed in the same stmt in APLWin TL  control statements always have a space before the colone LD  bnbr body of fniaD@or nb\nb>rCCtext f find comments and text @   nbf='' Lr fflf whatever remains... L$  Endwhile11: $$ l While11er($  elltell   diandia $  lftlf $4/^ fflf[n;]ell[n;]CCundia lf[n;] 4$  ndia1 $4  While11:(1dia)Endwhile11sta4Ds s error (0=fix)/(1Fn,'> contains diamonds<') DD  (modified1dia(1/ellb^f=''),0)l30 D4  do we need to remove diamonds? 4  Dwed bnbr body of fn D@  nb\nb>rCCtext f find comments and text(@P  ffn,nullstmt add null stmt for last PH  n1f(+/^\' '=f)forigCR Fnons,(fn' ')fnltHD  While1:(0 specifications as per the left arg: pabel  new fix CCinit fn;bl;ons;str;modified;end;lf;line;lns;Fn;ell;t;cbr;dab;br;dia;nb;lab;IO;b;n;f;r;cs;nullstmt;el;orighoxNO )@HIGKt@@@J?8? $? L tHd> >=LKDI=|=J<=(=(K<<HGJp<@\< <!;";#I<#@;$:H%:&:'p:'hLP(,: )9*9 *9 *H+|9+`9\+D9, 9-8.8 /8p /P8D 0 8 1L273I4l75766768|69D6: 6;54<5x=X5> 5$ ?4@HhA4B4( Cl4D04E3TF3 F3@Gt3H$3I2@J|2K028L1M1NLOP1P 1LQ0|Rx0SP0,T<0U0V0W/XP/Y1)/lf(H fix0 no fix by default - bombs if fn not normalizedH< in variable 'fnCR'. Those flags will bet<T and labels are always immediatly followed by a space in DyaloglftT  nbf='' L DanB 1999 initialize fns to produce Code Coverage reporteL\ If 1 they will be fixed by removing s (and a backup taken in 'fnBU').ls\L this statement to be inserted in some strategic placese.L@ : label on this line or "branched to" line)@$ ons,new0 2IO0$` This fn will save a copy of the CR of the (modified) fn and its line flagsss`d It returns pairs of function name and its flags for each function in the list.L)sdX The checks made here are for  and control statements followed by esX  f0lffl30:, dia1++/^\':'felllf,next:D HS       R       dS NS     :Sf  NS:    hhTine le no  NS:en   oSsplieseif i  S:endw  tTnto   ie S:contin NS DT    e :ndif  R       hR       T:El     eR  S:endi     U  S:endif  NS   T   :ndif  NS:  S    le   NS:en R     i  $T       DR      SSdif  NS     (S :ndif  NS:    S  nif  NS:re   $R   et  S:endi D :endtrap $ :endselect$ :repeat @:select :leave :andif $:elseif :goto 1:return U:if 6:Else &:trap $1 :endwhile$ 9:endif :in :endfor :case $1 :continue$6:for/$ T |.:$ :while :until :orif $ U X.$DL (\ W, W, X |. D$  X  s$$  s  W:$l/$  Y V $( t  W('", 4V  X ,9,$   U U$(@ t  2(  t  ,ou tY V\p2,D 0 V VW, V,  n 1D(  Vt U(rowp1p2tstxt( :for row :in 1ts(  txt0ts (K r[ip1p2+p2p1/s'''"'(, find 1st quote characterk,, n1ts(21 1,ts)ts,l io0  p2sq(   UV WsX|Y    :endfor txttxtr :endwhile s[i]'/' s[p1]'/'  qs[p1] , and its next counterpart, sts[row;] p2io0 L DanB special fn for APL+Win to find where text residesL\(ޕ4YZTǕXV(XXWXWXVɕVZ VZUXlXPVtZ XZU T@(Zt8D,tF6x-N,:e@)1>*,RT\<D=Yd,J,0hY X}P` /l+|HscPxLL"`t9HB0_X.xqLv`$8yxdH]4Lߕxߕߕ8ߕ'bߕ`ߕaߕ!ߕVߕtߕޕ$ߕޕޕݕݕݕApݕhTܕ?\ݕ4ݕ HݕIޕ`ݕpݕݕUە~<ܕ ܕ$ܕەgەݕ3ەr8ޕޕܕ`ޕܕlܕܕmەܕLޕtޕ ݕ ݕܕHܕܕ$ޕxە$ѕ ͕0ҕו$ٕOdו_ٕ$uӕӕڕӕӕӕӕlӕ$ӕӕҕҕҕ5ҕҕ˕˕˕i˕˕p˕ڕDە̕ו,ەڕA[\ƕHƕ4ƕjHו  ƕ{|ҕ ƕŕŕ ŕ\ە8̕Tӕ|͕ؕQؕ ؕוƕoҕ ̕ՕՕŕԕlʕ!XʕǕq֕ʕl̕Օ ֕$["Ǖ(ĵ4TL<  [1L@k colend>1end' 'ids,(tab[;3]^.='id ')tab@P   CDYZPL$DM|DMT?(ԱT0L nc(split CStable[;nc])~' '0H xxExpectedResults[;2],0 1tr1 CCinit'T'NL 3[1]Hlen,< rc(-rc)0 1+rcss[0],, s[i.+5](n,5)':Else'], danb 2001*nxt3aplذL20rcnbcbrelllnslfblfixnew  mask,0,s[1] (next, l20:deldelv[;i]^.='CR',@ to differenciate them we change else to Else@hCCundia( nls,lc[0,AVs] ,0(4 works for vectors and matricest4 i0l IO0 x$CStable,IO1hCCreset@ l10< nii/imask^(':else'ls)>':elseif'ls<@ DanB return lowercase of 's' where cs exist@Fnnxh 'ControlStmts' is a free format character matrix of :controlstatement followed by style for each APLxT  T(L lower 's' into 'ls'(MakeCS rn0  CCtest;x;tr;IO |brshtabdNS:endifl99X~lc(block$@l10:(i=cs)l99$,CCtest   |#$%&  5 mifsa rcba  for  nnu ntnupm cso  s[r](r)c] l99:@EndIf5lorigtlonceL(ɕ֕dŕǕH}ĕ|tLTWhile18D lc[(lc'A')+26]26(lc'a')lcAVc8EndIf2This workspace will do code coverage of functions. Under Dyalog APL are found a namespace, 'CodeCov', and a few functions to test the code coverage functions themselves. Namespace 'CodeCov' contains 2 functions, and to verify that code meets specific standards. Function runs function several times and reports on anomalies found in its code with . It first initializes monitoring on before running it by using function then reports on at the end with function . will report on code that prevent from doing its job properly. By using a left argument of 1 will be reformatted to allow to work properly otherwise it will signal an error. A backup copy of will be kept in 'MyFnBU'. Another function, will test itself to make sure it doesn't miss anything. et al should work with any APL with or without control structures. Under other APLs only the code coverage functions are present.senPdescribe$MyFn 2(<ٕؕڕXؕdtؕוsҕڕ`p@ѕ$qەlr ؕ `ҕrt<NS     notejl20fCC'MyFn'HplineXElse5labelremdianebrdabxCR)ܓWhile11onsbobianyFnCRscc'once':endif:if a=1:orif 0NS'once':endif(:if a=1$0 r((-rc)1)rcs$l~ls@CClowerUtr(  <' 8ܒrcs CClower s;IO;n;i;rc;ls;c;mask;lc8)+(`ՕʕTȕǕ{pƕ | ŕ|ɕ̕yו,ǕHyxٕ@{Ǖ<|ʕ{ <ٕz ˕l{ ٕ{ ȕz ̕ \ڕ ƕȕy8ŕzԕ\zt@ *@delCCtextD use lowercase version to search, replace in 's'Dcmodified $ControlStmtsb pEndWhile1EF(See 'describe'( Xb1 CCinit'MyFn'J EndIf4Xt(NStest;PATH$PATH'#.CodeCov'$DEndwhile11F t9DEndIf3EndIf314OVht2 ii+1 PATH<$ r((mask^cls)/n).+clc[AVcs[i]] Fn<  s,AV[0],sߒ  CCX   :\X0p test for code coverage0$n3 @H special case: else and elseif are similar;@4CCinitlivejl40:NSElse1MyFn 1 MyFn 54xLegendXEndIf1nullstmtqML(xmemvspuacdc( member2KPtestparseljcompcdef@_nofopeniz\ovsinvsfvvmĆvmiovvipovspPvtc0ovvhovvf,pvvc@}mrrun|g0}sc_}xz ~a_P~ec_AFps_sys`FP~Y vvpdZЉvtfnvsc@pvtmȴl45q8txtCCtext ts;s;n;io;p2;q;p1;i;row;r/'8ovem2nomsgendupW798FcR@W78Ul1408 showtrans`;l150PCodT8Ttesofa2kL'ml@<testforallHAV8rT a'fn*csAptestfordywfdfmdrDexec`dr0descfd$xfrfromexecrepPier_rorVERSIONwsidH{trlevhmDnponotessw(memltl80x3l60l3<tno$qlbrxArGl700chk<4Ertl0qfnadrl100 asciistrsam`Jrange(argT=replaceefAt$txtreplposHlistL patl40Al9cm!create_debug,patnJfopen!objsJamTQxfrtoobt rnL!parseLsstranslate<nameofjtspRArgfilel1104aplswit 8xfrfromHl904mask0IparmsQcompsegPW ,DISPLAYTP'CMDDISPLAY DISPLAYS HWT0FSBROWSEEyBL̊P  MATIOTAOBJ IFERRIN@YGLOBALPWkMATIOTAeUCASEOBJERRMSGPKGTIEDXTTYPEUFILESVARCDISPLAY<NLDCDEBOBJGLOBALCTdOVEROBJDXGLOBALALX -DEBGLOBALIOYMATRIFYfXPNAMES\UCASEjGLOBALELXxxE1 MATRIFYOBJR hz-hFLUCMD, 4JRXFOPENlOVERP3 6xx5 10]UCMD2V7119`E,zApX@8IhCxkHUV12TWlZPJx14Y13T1617P1820о15pApCL1cRESULTVLeHC)PW6VCxeph1921X$HBHHTl22\LNXK QH$RCSHHL,VT<D|BVDBPUPARMSX87`xstmpW80 rtestXmPDEFLDOUT$nTIEUFTrhPFTNUMeGETOPT infilefrltestl01pickR4boutvcpPtest\wnstl40}l50tdiscutltestxvneptUa QZ&R\c$/PRdIkN>$/SRFT)DWR\lCdl1E KL~PI 2\ m vFv/PPAl2k rp e@ &  0S   h0t\D,t\D,h<PdescribextXchangesr_n_N_zPdefqsp xFrl74nl5 bufXfrObjsallrecthdl@writeobjtiecptlim,amrGXhandle,Hl20source97pl10toreadnOaoNStIeP5Lf7lImtrEf99s(SrHPuPmVdEfSr<98lUrRePdHiDopenfilel30PeNdxAlL`asnLread$xl|closed95(92<1<93@iTems91296Po94xPuP0readBuf90XfrIDpCfiLewiNwSD sScR489 75\8883p8785H8481 767977HW97W9878vAl74W87W93W95obJret W91482dW92880W90p86$W96obJ\W99xfre0W83lNmW86i9W84W85DW82F5XW81XW88infileDW89EXPM8xW94osresfn4dlmHb\tfXl05createell25sD Xmatcom(l60 xfrfileforiPselNaMsCRLFnd_F_7formePnames line0,id_bUfdFnX96X95X94X93X92X91 X90 X894X88Hp3cnvR_ Pncfix0'changea cl[HmFfiLe4xatdefinenpsinWsE nl2op DFxO_Dv_, l120,fns@id'To_|Pexl15vaLue8all2xlatesysIDBlcr 98X99`namesX versionxfr PinsX Plock PisIDdescribesr<XsDl160alline1q l130e X99 X98lX97Create@c_ b_(okPdefPPval(Pchkcopyrightx@PackPpdefcOdenrDM f1] ' vTEIsiz0ap@6maF P equivalence dG%4:>#29.35A8@*V1RYKLMNOPQUDk|XW,KTSS80=FlB')wn?\+4I