dI9(b}k? 1(Ф7(1(8(&8(*8(1(41(1(C9(0= h89(7(A0D9(0D9( @9(P0D9(pD9(p>9(f`7( 7(؜7(d1(@9(J1(8(@9(I/Xh7(h7(h7("9(@7(7(`@7(C9(dW}~QV s   s0D(p S D(=(8B(ȰD(sD(CC(CC(`p?A(PA(86A(IB(qZ@(A(6A(0EB(B(A(IB(FB(D(Z@(D(MOIB(Z@(IB(Z@(MȂ@(D(Ȃ@(D(=VD(A(@(A(@(A('C(q8C(zB(zB(0D(B(xB(B(<=(C(JB(R}B(D(B(~B(pJB(B(IB(pJB(IB(B(B(ЄB(C(B(C(B(B(kC(B(B(B(B(p@C(C(pzB(XzB(H C(@zB(@UB(@zB(L=(UD(ȰD(4M@UB(D(@UB(D(=VD(`B( }k?H8(7(p8(8(8(س8(8((8(8(P8(p8(7(8(8(8(д8(XNN'F'fx(3,0)(0'F N'),(0EXP),0'',(i<0)'1N-ii+i'X0x (jb7(0  lx( 0 c Q(7  ,/6/pe (0(  (7H  ((I enc(  (9C 0 (7X / / ;,/ 0    P >  / d(7 / /;,(7   ,OQ/P , sP( ((7 b. ((J > Function (8 ' x x x x, OQ/P x8(0 g M a a(10 (h R s(9DO MZP, M a(9C(9C,(9DO MZ P OQ/P/ M hP 2 F(9C(9C a6 M Me M1t2s2 P8l1 :#  (9C,(9C,, s 80qz  M s a, a s 0`fs zK(9C O,(9C, O Oe dF dF, d+ dOQ/P3F d,k1 `0  uOQP 0" se0@ - F(7(7` u, a$, aumb@8 ( u+ / uOQ/P M/ , M88 ! M s 8 , afile1 f8  (7@  0 f F M+ OQ\P ar0(h r s)+ uhey ar((` [,q]li4p( lo e s M 8 : a$ W OQ\P OQP W 8(  O(9C(0  s, (9C, l100(  O+ )3 10((  O+ 3 s ((  O d d, O((l 0 d u, u (0  d d M, M 0@ - d(9DO dZ P d u, d M,.W @0l2 : O(7(,3 d 08si e#(9C  u M O W 8@t) '0 O O) OQ/P O OQP O@ po e  ng at P 6 b (9C d(9DO d bZ P O) compvar Pst rq O O O,+,(9C,(9C`  O  ,+,(9C,(9C`  , F(9C, M `H(  X , F,(( a  L 0" O ((  0/! s2(  (9C  (  0(/$ u (( foravb ((CR '(9C Ress mat( 0 g(7€ u   @ + b O O(9Cx O, 3 b.b@@0 +(7 FF(9C(7, b @(',  O $, M (P D@ u OOQ/P OOQ\P OFOQP (7$, P0hD ((9D0 u  0P @ u OOQ/P OOQ\P OFOQP (7h$, P(XE ( (9C(( F (@ + F  u,(70;3+ O @@ng + F  u,(70;3+ O(@(  q (9C(0`k ( (9C(700'0 Fm*.( (x  X #(70' ((I normtline (0   u,  e expr00   u,  ~io 0 HF *. 8 !  , F(9C, u 88 $ (9C(70' R(9C,0)8`H(1  /@F 11((J xstr (0 D n   ~ }09 (9D00(| nolastline(   (Dx G (   0  (7 F, a0(ea   04(0XP f (7 , R  08kOe@ , yFFF(9C(7H(7 MPB(@( (9C y/=(  (7 M Oe(  Q r8a M(:B((@ / ~ d0 } d008 (9C 04@@ . ,(7 OQ/P(70 , OQ/P@(h ( , 0((h ( ~ d0 (((l f Q r8g t1 ,((ro s } d0  (8 %(9CH b Q0+ d ,  1] 80  (9C b, b W,  0( (7  u (PP (; W /,, W(9CH, 3+ (9C,,OQ/PF xP0 (7@(7 OQ/P0 h@cn 8(Y PB(8( FJB((@h. N-(7 W(7 ;, (9C, /cie@(es  /(9C io(( (9C b h(0   Q(9C W08_ (" 01(9C, bB(_B(8e0   uOQP 0 h_ ( q ( 0Xd_B( common objects0  (7 Q 0k O vm fit obj 08 '  01+ u(9C, b l88er s#(7@  (9C  ,  8Xɢ +C (7 F>,(7,(7(  F>,, rX  F   8 " (78w ,(9C,  8eb( (7x 0+  (k(.(  (7(  ('  k.(b [ (7H  ((2 (9D0(70'.((  ~/ ((0 ( Q"h MHB(((  }/ t (PTh s6(7 b(7ø b, b(9C,"F of this coPXi[ ]H 0 uF /,(7, ,(7, uF(7, OQ/P uX  (9C  0yB(s)0ZZ,,CR,s000  .(7H(7, ri0((nL ' (9C R(((@x(((D f R 04@((hx( (9C y/@+/4 ( ts t(7 M 8L '$ / /, (7, Rimat8ply)00 (7@(7 F u t0p(1 (9C  trix'((h{(l)(PM]8IblGm>82 0! ~ }08 (9D0 04rdac 8 080   VF(76 x(0(  d(9C date((1st2nd(`H0\'  b  S," ~1f0 VNB( 0  b  S," }C|B(0 *** 8{ (&  b Q d(9C V 80)   O + OQ/P M0 @O s P@ (1(9CH b Q0+(9C(7Ĩ,(9C WBwB(B(5(P8w (! b  + (7 ,  wB(A(8#0 O (9C b, b , 0 ""B( 0 (   s(9C clos0 P 'S *** 0 ' l (9CH   (9CH,  00 (   e(9C, , 0 A 0   e(9C, , 0 0Path (m  (7ƈ (P @  , OQP  OQ/P, Q(9C P( ((9C W brent((filefrto(8 ' /(7 (7(7̀ /;,/P8  O(9D0  0ckqs common objects c0P 4  b b  , e c ,(9C, u dP(ȟ ( (7 an(0  bOQP/6/jects0P 4 (9C02 Q, b(7,(7x, /,/ getamof P0 (9C +  ,  spac0 ***( 8s= ,#  01+ + bk= E88 / i&   s(9C(9C ,rf8Ppl 4  b b  , e c ,(9C, u d only lisP  p s(9C   P. o8  L `, p,(7 L p, `,  'F' wiP@he (. p (9C,+ ` p,(9C .st@8 ( (7, F L ,+ p8P@he o- (9CH6 p p+(9C, the@(P ( (78 an((07 c ((0   bOQP/6/jects0P 4 (9C02 Q, b(7,(7˰, /,/'F'),(MEXP)P0' N(9C +  ,  N10  z>*** X E  e,(9C, + OQ/P, OQ/P.](X(     ((  ,  (pB [ (7,(9C`   (70,(9C`  , F(9C, bvaLup(  b,  (@ +(9C   , OQ/P.P,@0 N T (9C $, (0 `*** 0 ((7x(9C $, (0(p r F p(((y:  b,  ( ep r(9C  8q, #   01+ + b0(88 (&   s(9C(9C ,/s8$ op t(9C   8Er 4" (9C (9C lid va8 @ (7X Q P 9(7ظ c b,+,(7P, c b, OQ/P /,/3 53P8' ^! u (9C02,(7,/(8/84P] <(9C V/0(7(7h,(9C V+OQ/P u(P8' )$ (7H02(9C VF calue80ed 2 with 3 5308' n! u (9C02,(7,/081P=' s1(7(7,(7 V,(7h,+(7.Mat)mem Ppd` v lL(9C M ,(9Cx,  M,+ (9C M ,(7Ӏ,(9C,, M)pa`@X""use 'clearfile' to erase the file.@P > V(7P, V+ M,(7H(7 b,,+(7Ә,, M(P``<  (9C  0<<<0 x@ 0(7נ V,+ b(7ְ,(9C,(7, M@  (7@  0*** comparing 4 230PN =\z2QPPP <(9C V/0(7h(7,(9C V+OQ/P u/P(  d > M((h(8q $ (7@02(9C VF b8(<  (7 (0 (9C   00 (9C   08y %(9C , , b , 048 m (9D0 u 8 &(9C , S," F 80  b  S," D(0 0C(K 0  OQ/P MyC(0 v@ 8 %(9C , , b ,  048O(m  (7ِ wsl(( Fpa created (8G &(9C , S," F 8(  S," (( ЛC( created (( (9C  ((h bytes.((;  V" MC((((`I K(7ݐ(7@"(9C, (7h,(7P,(9C3, (9C, S, 8N` hK (; ( S/5 F (((8H $ 3 26 OQ/P Se,8@@re t/ (7(9CH, d(9C(7, @0(  (7ۈ 3 (0  o  dle 0is o /) d(9C, p0  @key (X ( dFF/: S(((( red 0123456789R(  (9C   P (3(7(7ܠ OQ/P,(7߸>"F ج(qq,P n (9Cnown am s ] M. (2 a (9C Ms ((( ((1RR,,CR,bjs(( (9C(9C M((,O (0,' ' F ` `e.cement0 pd@ ( a d R, V, `((`key0pare (0 M (9Cx , V a CR0 >)8402 0wn A (9C , bf\Na00AP D(7  3 )+Na0 H? (s o(9CH  Rate(0's s (9COQ/Pom0  @B( hv@D( 0 A b  ,@08(BNOTE: - wss size differ by t80 ((7 R/a, ,'***0  O x= 0Na ^ (9C b, R(0 @2K A0 (2k a  b((05 ( (9COQ/P(08H # (9CH, 3  use8'P (6 0; b(7,(9C` V b, bvarious tyP  (F  @0 *(7 V(7`(7 V$," bt is O@(NO (7 , nge((nt rrd saffecte(0@  ROQ/P  0Ppl (9(9C ROQ/P, ` `e `F `F, (P0  R+ OQ/P B(0 @*** X=w(P (6(7(7 (788w,FF(9COQ/P(B(P 0 r VF(7X8q00  , V, 3 Rop0 @@ (f x(7 , 3 Vr((' [( 'epl  (9C  0@ unbalanced quotescl0(ea e (9CH, d (( (7 ,F (ea/NAM AP E(7@  0r(~\s' [=')/sD(0NT + 'FS" !acre(% r (7p0, C%( ws (7 d %CaCB_f^ap[FMXviT J) Ep Cr Ac = i A  ./> W (< (9C(7(  SAM 0% (7@/R(7 , 0 P %> %~ E% e  IE%un FN M % RO % Utr (B% l U "2(P&PML 8 (7`(7 OQ/P,/R(7( V(9D0LX%lx P  )off P %8(7 OQ/P(7,(9C(9C8w(7x;,/R %> \P987(% >(70/R> %>((8ex ul ( > ~ (9C%> 8 %!(7@ (7x0; V8q,%,> 8P/@ T0(7 (7(7F(7, OQP, M@ 0 ((9C  0Xeturp@{0(  X(7((0(O('( ' / V~ VSunix((0saved <,(0 (7 (7 U;, V<0 xtoreSAM%  tws xG@ ul 0'n  U(7,/R U0@(0 8tws 08 (  (9C ,  ,0 re d U 0X eadB not loaded (e(0 dB f  0readSAMSAXDYWA2KAPX@re0(F (9D0/Rn' '(()copy (.(  (70,/R(()xload (((9  ^(7 Z((X8)reset (8% outstanding objects in 8P@ @ `(9C `, (9C , b, , ,OQ/P P8 ($ .  0-(7(7, c8x.)8 ! _ ] Y ](9C80  ] Y(7 M, M08 #(7 [(9C(7h Z8(  \(9C [((X8 untienums(.')P ;(7 ](70F \(9C(7 Y(9C, "qP< 4 ^ (  ] ( (9C  M((X8 (3(h] ((7/R ((ob  /)F X8((HG wcompare ((x ( x" M (@F$$ac/xnames= /norm /show= /xstr= /result@9)uXfi eF(7 V,(7,(9CxO[]<^P(70VT N>N>U"X(  /)F ,(( @? (91 '(7p M a fn ((HAobJrs cJ 94:(  ((7 s 0<4)rreplyComP,c(=C(0 [X 8(9C M 0 (7OQ/P V27 0 Aountto  (HA(0 c 0coup (( ((9C(9C a((03= O(9C M(7h, srel0 00 H  rm 0Befin5 e 0e r0vars0  (F  0Hatio;toto1 21201 1200X 6(9C(7 JX960Cp@RPna e4F"j V(9C8l V(7P8k(9C on all systeP( ((7 V ;X97((89(5   0< 0C ( O+ OQ/P 0 jBC(Com 0  OOQ/P .AC(0(  (7 , 3 O((? (   V?C(((@8 ( /=8C(( ( (9C 7C(   d p8 8% outstanding objects in 538L/_C(@ /(9C V(9C, d d d p8@( f l  Pz((@ ()3 V(9CH2, p0;OQ/P"e zero @  0 (7X s . (7 p at (7` !  ? Oro (] rsioFile erased(((a evewcompare lac( iz  /c e 0bl  `"hF(9C Mrep0(p ( X /@ (( 0 c nope(0  X(7p(78w_C(0(  t e(7/I 0ionote,2VERSIONp(0\ H e a ;', @spf X(?)j?)C7(7( 7(@9('C`7(@9(]<7(7()C@9(нX H (s( (go@( lx fn - describes all code used in ws@@( Can be used to determine what's in usei(Hi(@0(checkqsp 'note,2VERSION'e L_970%(jk?8(7(`8( 8(8((8(`8(8( 8(8(8( h8( 8( P8( 8( 8( 8( (8( @8(p8(8(8(8( 8( 8(88(h8(8(8(8( @8(8(L_8(8(8( P8(8(8(P (<)*uV+&',-X qP`(f1 comparefiles f2;keys;fils;lim;t1;t2;s1;s2;c;t;xp;k1;k2;io;lim;PATHits`H( compare 2 files as file1 file2. keys optional.fd 2HHH( if both args are character they are both filenames)H8( optionally followed by :passnumber2;]88 ( Ex: 'abc' comparefiles 'def /lim=3 8'8H( 33 comparefiles 789 - tie numbers acceptedCR' 2H8(io1  y( k1k20lenames 8( arg is 2 files (one on each side)t1;]8PZ(tljust '/= /lim=' parset2f2 accept different limitsedWXYZP(w(l10 if 'c'type f2 J((( f2tL( 8y(tf2':' @v 15 z( k2fi tf2 eys 8z( f2(t-1)f2ils (t2k2 open f2m P(l156M(0(l10:f2sqz,names[numst2;]00(l15:l20 if 'c'type t1f10 (tf1':' fit1F 0( k1fi tf1 2B( ( f1(t-1)f11F (t1k1 open f1 (l30K(0(l20:f1sqz,names[numst1;]0((l30:s1fsize t1,k1 J(( ( s2fsize t2,k2 H(f1,' has ',(--/t),' components starting at ',1t2s1HH(f2,' has ',(--/t),' components starting at ',1t2s2H@6(cfx 3 9 'xp x (x)0 c,ixCR'snumber@0(c(2CR),' component ' (n f100p( lim(1s1s2),1+12s1s2n f20(x(limlim default lim((H`('xp (read t1,i,k1) compvar (read t2,i,k2)' fori limH8x(CR,' comparing access matrices'(8H(t(10 0 getamof t1,k1) compcm(10 0 getamof t2,k2)H0X((0t)'(no difference)'03@)j? 8( 8(@ 8(p 8( 8( 8( 8(8 8(X 8(x 8( 8( 8( 8( 8(( 8( X 8( 8( 8(  8( 8 8( 8( 8( 8(x8(8(8(8((8(H8(x8(8(8(08(`8(8(8( 8(@8(`8(8(8(8(8(@8(8(8(8(8(8( 8(!X8("x8(P), <#$d}~%uV&'(Xqn nPh5(fil1 compareLfiles fil2;n;p1;p2;common;n1;n2;t1;t2;s1;s2;c;t;f1;f2;k1;k2;io;drop;showh0( Compare 2 logos export filesn0P( Both args are filenames optionally followed by :passnumberveP(}(io1s(H@(fil21'/= /drop=' parse fil2 accept different stemsH ho(tfil1':' ,k2) o( k1fi tfil1 ( Pp( f1(t-1)fil1: pp(tfil2':' p1E p( k2fi tfil2 p( f2(t-1)fil2 0(s1fsize(t1k1 open f1),k1 00hl( s2fsize(t2k2 open f2),k2/p1 0P(f1,' has ',(--/t),' components starting at ',1ts12s1 aP q( n1s1[2]-1n2 Pf2,' has ',(--/t),' components starting at ',1ts22s2 s'P 8v( n2s2[2]-1t1C `p( export files are made up of packages of Path, type, attributes or linknumber`P'ns except the last cpt which contains a directory of the aboveP8h( in the form /path/type/attribs/link8X<( to compare we need to know what is common and compare what isn'tumberX0(cCR=s1CR,read t1,n1,k1 area0 v( tcs1='/' 2( 07( n1(>(t/c) cut t cut s1)[;1]00xm(cCR=s2CR,read t2,n2,k2 VWXYZ0 ( tcs2='/' 1P 0`( n2(>(t/c) cut t cut s2)[;1]0@`( there may be a common stem which we remove@(hn(dropdrop default 0((Pit>c^/common(p1drop dropsection n1)p2drop dropsection n2ts'P0h<( report unique elements0PR,*n(0',n nkH((n 2 2 show3SHOW on(( ( n[2;1]l10 @M( cl10 cD( (X( fit>(t>common)/n1 g(((l10:i((H(n2p2(t^common)/p1(((m(n1(t^common)/common(Pt^ot(0',t@ p(n[2;2]l20 SED (n( (tnub p2)l20 (10:((}( fit>t|(l20:l( (o( common area( @m(CR,'* There are ',(n1),' common elements'f2@ p(show[3]0 f2 PSO'n shcpt(nread t1,n1[i],k1)compvarread t2,n2[i],k2' forin1mP@e@;9(9(>9(9(;9(9(D9(p9(;9(9(0>9(9(X;9(9(p;9( 9(8!9( 9( !9(9(P>9(8(!9(h!9( 9(8( 9(8( 9(8( 9(8( 9(8(x 9(8(` 9(8(@ 9(8(( 9(!9( 9(!9(9(H8(9(8( 9(8(9(p8(9(D9(x9(!9(`9(!9(H9(P8(09(h8(9(8(9(8(9(8(9("9("9(8(9(08(x9(89(`9(8(H9(08(09(@8(9(Ф7(9(8(9(H8(9(@8(9( "9(9(H"9(+9(8('h9(@8(#P9(X8(09(8(%9(8()9(8(9(8(29(}8(9(e8(9(H[8(9(X8(p9(V8(P9(XM8(89(hK8(9(+8(9(88(9(h8(?9(`"9(9(p8(A9("9(=9("9(6`9($9(@9(8(B 9(7(9(;9(99(Ѓ8(F9(7(p9(X9(9(J9(9(x9(C`9(9(Qx9(`9(.x9(:`9(H9(09( 9(x 9(T` 9(H 9(0 9(0 9( 9(8(^8(8(X8(h8(P8(;88( 8(8(8(N8(8(8(8(Sx8(V`8(8(8(c8(n8(_8(48(8(/8(l08(kP8(h8(8(L@I9($(I9(1I9(3H9(!H9(8H9(H9(vH9(H9(hH9(PH9(p8( 08(8H9( H9(H9([G9(hG9(iG9(zG9(`G9(xG9(yX8(@8((8(w88(h8(P8(Z88(m 8(8(8(b8(8( 8(8(8(p8(X8(O@8(o(8(8(78(8(Wе8(|(8(08(8(8(a8(pв8(ر8(>08(@8(M8(8(&М8(8(8(U8(p8(X8(@8(g(8( 8(8(8({ț8(8(d8(8(}8(s(8((8(8(8(Y8(D8(h8(RP8(88( 8((8(H@8(8(8(8(8(8(8(}8(}8(}8(d8(d8(d8(d8(d8(d8(hd8(5Pd8(r8d8( d8(d8(c8(c8(c8(c8(c8(xxc8(`c8(Hc8(0c8(0[8([8([8(Z8(tW8(W8(W8(*V8(V8(V8(@M8((M8( M8(L8(L8(L8(L8(L8(L8(hL8(PL8(8L8(PK8(<+8(+8(p+8(X+8(@+8((+8(K+8((*8(*8(*8(*8(*8(*8(h*8(eP*8(8*8( *8(*8(ȑ8(8( 8(8(uh8(P8(88(q 8( 8(8(ؐ8( 8(8(P8( X8(@8((8(8(8(8(Ȇ8(8(8(G8(h8(H8(@60504010t2t1resultnormPathdifdisskipshowxstrxnameslimr2r1xjk?pu28(028(pu38(@9(pu38(@9(pu38(7(pu(48(7(pup48(@9(L 48(@9(EV48(@9(EV(58(@9( F 58(@9( LE58(@9( M 58(@9( M 068(7( N h68(@9(TN68(7(TS68(@9(D 68(7(l 78(`7(a 78(@9(at878(@9(id78(7(t 78(7(y 78(@7(mo88(@9(sy088(@9(rsp88(@9(K 88(@9(ad88(7(au98(@9(de898(h7(de`98(@9(dsx98(@9(ex98(7( ex98(x7(!fl:8(7("fn0:8(#in:8(#in:8(#mo:8(#pg:8($pr:8(%pr;8(&re8;8(7(&ro`;8(7(&rs;8(7(&rs;8(7(&rs;8(X7('rs;8(@9((rs;8(@9()rs<8(07(*rs@<8(7(+rsx<8(7(,rs<8(7(-rs<8(@7(.si=8(7(/tmH=8(p7(0up=8(@9(1up=8(@9(2wk=8(P7(3K (>8(7(3 P>8(3ILp>8(4 >8(5TB>8(6X >8(7A (?8(7(7D H?8(7(8DDx?8(8E ?8(9P ?8(@9(:MP?8(@7(: @8(7(;CA8@8(@9(<VT@8(07(< @8(7(<N @8(7(=TBA8( 7(=a @A8(>lg`A8(?d A8(@l A8(Ab A8(p7(AdeB8(7(Bdl8B8(BskXB8(C B8(7(CmpB8(H7(DstB8(7(Dms C8(7(Db @C8(7(Ec `C8(P7(Es C8(Fa C8(GmsC8(HCD0D8(IG HD8(JSCD8(7(JSCD8(7(JM D8(`7(KT D8(7(Lpt0E8(@9(MtfE8(7(Nm E8(7(NM E8(H7(OL F8(7(PQ (F8(7(QkgPF8(Q pF8(RflF8(Sc F8(TstG8(x7(THA0G8((7(UORXG8(7(U G8(87(UD G8(VN G8(WR 0H8(XV HH8(7(XABxH8(7(XulH8(7(YcnH8(7(YndH8(7(Zr I8(p7(Z 8I8( 7(ZD xI8(7([OBI8(7(\P I8(\V I8(\p (J8(]4 @J8(^9 XJ8(`7(^F J8(07(_E J8(Ц7(`d J8(7(ap K8(T x( (*bcudW}~QV s   sp S&79=ACEJTX[^_ a(Rcompfile arg;z;io;ws1;ws2;n1;n2;r1;r2;c1;c2;i;j;c;n;m;lim;show;p1;p2;obj;t;s1;s2;xnames;xstr;show;x;skip;dis;dif;trap;f;Path;norm;tie;result;O;t1;t2@8( DanB 840701 ws comparison using a temp file@*(HPw(n' wcompare ' filename to use: leave blanks around2HHS(arg'/xnames= /norm /show= /xstr= /result' parse argHP( /norm normalizes fns before comparing (left justifies them)P0h ( /result return all outputT 08B( /show=[0123] [3] (see below)tput8X( /xnames specifies names to exclude or include (if preceded by'~');I(XPX ( /xstr specifies the strings to specifically exclude/includePp(I(Hx( SHOW: 1=show names ;2=contents ;3=both ;0=nothingt) H8HW(show, 2 2 3show default SHOW1 X8(Ы( The gathering fnddd(@(R0fx>'O x'((result/'RR,,CR,'),'x')OW@ (;I(p(io1I( S(tieopen 11n *(;I(X@G( sX is the start of a ws, nX is its names, rX the number of names(I(X()(s11limfsize tie PI(( H ( limlim[2] I( @`(ws1read tie,s1 1st ws name and ts and wa2(@A(;I(@( the file will have to be read several times@Ph ( 1- find all obj names in each ws; they follow the ws namews:sPȶ(;I((0(r11n1read tie,s1+1(8@( Verify the file has more than 1 ws:+28(@F(er1 if limir1+s1+2I((h(;K(0d( Locate the wss in the file08 (10:ws2read tie,s2i 2nd wshe file8(C(r21n2read tie,s2+1((X(40 if limir2+s2+2(X( Looks like this file piles up wss. We only compare the last 2.s name(Xp(n1n2 (P( s1s2  T( ws1ws2 # H( 10U(`(;K(0( The wss have been sorted outu0((40:r1t1n1[;1] chsp(  S( r2t2n2[;1] hT( n1 0 1 n1 2 V( n2 0 1 n2 2 ( c''J(ȧ(;K((m( names have been found(((i1t23 pick ws1drep(8(c(t[1])/' created ',6timen t[2]1'88&(O '*** comparing ',(1 pick ws1),cd 2I(8(Z(j1t23 pick ws2ff(8(c(t[1])/' created ',6timen t[2]2088p+(O ' with ',(1 pick ws2),cm' '(8P(O CR,(ij)/'NOTE: - wss size differ by ',(i-j),' bytes.'2ws2P(;I(H( 2- display objects not appearing in the other ws:0(H0 (obj' outstanding objects in ' 0(3((ws1[2]ws2[2])50 ( `S( O 'Stacks: ' d( O(2ws1),2ws2  (;U(@h( Show objects in the 1st file NOT in the 2nd@@p( Some objects may have been screened out file@ S(50:skip0 2x 0H( (show[1]0xxnames)60s2 0 `d(t'~'=1x 1YW 0( skipt(tx) manymatch n1220p00(60:I(0((/i~c1n2 rowfind n1)100 0(P( skipskip~show[1]pYW(XX( We display the names even tho we may want to skip their displayes.';]X8x(O CR,'***',(4 0 +/i),obj,1 pick ws1 8 T( show[4]70 ( W( O fit in160: 8(70:(nc1+s1+j(skip ',m,' has different classes (',t[1],' and ',t[2],')'I(X(.(170I(0(190:p1read tie,c1[i] ss0( %( p2read tie,c2[i] 'I(( ( n2n n=name (H%(('VN'.=1t)212 @'I((08( (''r1p1 compfn p2)170uu0 H(dif[i]'' s1 @@( zz,(dis>r1'')/CR,CR,'> Function ',n,CR,r1 @4( 170(8X4(212:170 if ''r1p1 compvar p28 x5(dif[i]'' s2 @( zz,(dis>r1'')/CR,CR,'> Variable ',n,CR,r1 M@5( 170(y(;J((p%(220:show[6]230 ((%( O fit dif, 0 2 obj(I((H0(230:O z,CR,CR,'use ''clearfile'' to erase the file.'2HP(0;I(HPH(er1:'* Missing 1 workspace to compare' error outputHR=H(A)j?n(K8(K8( fK8(@9(ti L8(@7( @9(H  (Vm( H (tisencl a 0(( danb : is a enclosed ?TUVWXYZ0(taalexfrldoprowow2ow1idPComSVws2%(A)j?k(O8(8O8(m(O8(@9(k( P8(@9(pP8(7(P8(`7(P8(7(Q8(7((Q8(H7(HQ8(@7(k(Q8(7(Q8(87(Q8(7( R8(7( k(8R8(7( `R8(P7( k(R8(@9( k(R8(7( R8(7(R8(7(k( S8(XS8(q(xS8(k(S8(S8( T8(07(HT8(7(hT8(7(k(T8(7(T8(k(U8(P7(8U8(07(r(XU8(7(k(xU8(7(U8( U8(7(8V8(X7(`V8(P (:RUVUVWXYZPP<(ws1 movetofile ws2;SV;Com;P;id;ow1;ow2;s;ws;ow;t;opr;io wsPH( danb 840721 move ws1 and ws2 to file using s-task2HP( 19980423 modified to allow opr to )xload instead of copyl'?l(P8o(SVt'Com' timeout after 12 secss8@(io0 0 0 1 0 svc t1 svo tsvn ''runs @ X@( P41av ( id1ai@ fr @(oprisprivSV? 8P!(tQTOsupport/';toto1 21201 12'-on8@c(fx 30>1<'rs c',t,'rreplyComP,c'12' @ A(ow11fi ws1 mE 0h( ow21fi ws2 ws owners-task 0(>(s ')' request blotl(((X>(s ')',id sign-on(8(s '' hopefully not profiled...s80( actual transfer of wss0(owow1 x( wsws1(@=(lup:(oprowid,0)ld(8h(s ')clear' not the owner, copy wsld8 `A(s ')wsid ',ws (=(ws wsload s ')copy ',ws(PX (s ')copy ',ws,' ct er ec fc io lx pp pw ps rl trap'P(xfr@l(@(ld:ws wsload s ')xload ',ws owner of ws... @ A(s ')reset'idB @8(xfr:s ')copy ',(2 ws 1),' tws',opr/' ul'py ws@87((''t7s(opr/'ex ul'),'tws')le S808k( +t error in transferign-on0(>(le:(wsws2)end ( A( wsws2 ow1 hB( owow2 a@ow2 h( lupm(Ha( we don't use because ')off' would hang under SAX H`c(end:ComP,')off's 'untienums' untie to prevent 'file tied' in clearfileai `(>(('SAM'system)0 Al((Hx@( PCom SAM must read last value, not SAX as it hangsHtxtstrws1;H(A)j?x XW8(8W8( fxW8(@9(tiW8(x7( @9(H  (l( P (zstr SS txt (P(( This is a cover for ( (p(zstrtxt@ m( chktiedfilekey (B)j?s2X8(X8(idY8(@9(;w`Y8(@9(;̠Y8(7( dY8(7( mY8(7(d Z8(7(e HZ8(7(skZ8(07(99Z8(@9(fi@9(low 0k ( Sdsr007(tiekey open file;n;trap;er 0XГ( opens file if ~ already opened; tiescalar or 1 vector if openedX@8( mod 19981008 to allow fullperm if privyl(@k(@(((2=nfi file)fmt (؟( nai8h(fmt:file(+/^\file' 0123456789')file802(file(10 0 1n),' ',11file0@X_(chktied:(tie(names^.=file)/nums)endm(Hn(@HG(file stie(tie1+/nums,0),(3-50=nc 'key')'key0'H(end:in(l30l15f2f1$(jk?`]8( ]8(]8(@9(]8(@9( ^8(@9(8^8(`7(`^8(^8(^8(7(^8(_8(_8(H_8(س7(p_8(7(_8(X7( _8(@9( _8(@9( `8(7( @`8( p`8( `8(`8(`8(7(a8(8a8(Xa8(pa8(a8(7(a8(P7(a8(p7((b8(7(Pb8(7(b8(7(b8(@7(b8(7(b8(7(c8(7(@9(@ (,uORdXqK(@(0(cf1 compfn f2;b;s;nf((P@( danb 84/5/30 - compare 2 fns; 199804 don't include Stringf2 PH0( 2003 use global 'xstr' to screen out the result 2H((((ispack f1)l2 (0( f1(n,pnames f1) fncr f1 t Z0 (( f2n fncr f2 0(l2:(0s'xstr' default 0)l50 (n'~'1s @ f( $( sns(0(sn(1s SS f1)1s SS f2ns20(`(l5:c0,1(f1)f2 f(( ( f1(cf1)f1 ( f2(cf2)f2( ( (f(88( drop last comment if NOLASTLINE set8@p(('nolastline' default NOLASTLINE)l10l5@0((f1(2-'' 1 1 f1)f1 m f2;n00s( f2(2-'' 1 1 f2)f2s;n0(;Qs(0( left justify if so desired00(l10:('norm' default 0)l150 (f1ljust f1 NF( 0( f2ljust f2 ;(;0f(0( drop LOGOS pathname tags0(X(l15:(0f1)l20 o((0d( b~\'*.' SS,cf1[1f1;] 00@( f1(1 0 f1),[io](1b)b\b/c0((l20:(0f2)l30 f((0( b~\'*.' SS,cf2[1f2;] 00@"( f2(1 0 f2),[io](1b)b\b/c0((l30:(f1f2)c'' Hg((( c'' x( s0l(((cvm f1 compcm f2((exitchkde4x1e2x2evcencv10v03sclscsdchkrsemaxws2s1o12otv2v18l(jk?j8(Hj8(k8(@9(`k8(@9(k8(@9(k8(7(k8(7(l8(P7(Hl8(7(hl8(l8(l8(@9( l8(`7( m8(p7( Pm8(7( hm8(7( m8( m8(m8(x7(n8(hn8(n8(n8(n8(n8(@o8(po8(o8(o8(o8(s p8(8p8(p8(p8(`p8(q8(Xq8(pq8(q8(q8(q8(r8( 0r8(!`r8("r8(#r8(#s8($s8(%00s8(&@Hs8(&s8('s8((s8()s8(*t8(+ht8(,t8(,t8(-u8(-(u8(-Pu8(-xu8(.u8(.u8(.u8(.u8(/v8(/8v8(0pv8(0v8(0v8(1v8(2w8(2hw8(3w8(4w8(5w8(6w8(7Px8(8hx8(8x8(9x8(:x8(:x8(:y8(;(y8(<Py8(=y8(=y8(>y8(?@z8(?pz8(@z8(Az8(B{8(C{8(Dh{8(E{8(F{8(F{8(G|8(H8|8(Hx|8(I|8(I|8(J|8(K}8(LH}8(Mh}8(@9(@9(8`f (vutbdRVa #$k'/1489>GIJMHH(cv1 compvar v2;io;ps;i;n;ot;o12;s;s1;s2;t;maxw;d2HH( danb 84/5/30 - compare 2 variables. c'' if v1v2',tHPe( c'' if they differ but are excluded from being displayed v2P@^( (psio0 1v2( 0p( c0o12 2 3 '1st2nd' maxw;dr00@( s'p'=ot(type v1),type v20 (st if=/s@ I( 8pG(co12[s1;],' object is a ',PTYPE)srn;8;(exity(0pg(st: same type: package or not0 X(s[0]var2g( HH(c(''=1c)/'*** ',PTYPE,' ***',CR,1cv1 compack v2t(H( (exity(((var:(=/sot='e')se (8( co12[s1;],' object is enclosed' rank8(exit](8H(se:exit if v1v2 do we have a match?8P%( From here on we take into account the exclusion string:d @(P0~(n'~'=1t'xstr' default 0 nd0P( c''  ( chkr if 0t : ( tnt(X ((n(1t SSv1)1t SSv2)exit exit if the constraint is filledlayedX0d(chkr:((nv1)=tv2)srn] 0@(c'objects differ in rank: ',(n),' and ',t@0(exitv( ؞(sr:n''n /ps ( ( t'' same rankN( g((( (sd if i(v1)v2/otl((P(c'objects differ ',t'in shape (',(v1),' and ',(v2),')'kd PH(;v(X (sd:enc if s[0]^i check each element if enclosed and same shaped' v2X x(sc if=/ot@tW( @(c'objects differ ',t,(60=t)' and in type'(@:(exitq(@(;l(@p(sc:c'these are different objects of rank ',n5@ ((2v1>v2),' places'nt Xx;(endN( `(evc:i0 if m( nv1( (lup:(ni)exit 0(s(>v1[i]) compvar>v2[i] UUUP0 ( t'compvar' r( (( dlc((d+/(2 ws 2)[;t]^.=t(8(t' ',d'-' show some nesting...W8@(cc,(~''s)/CR,CR,t,' element ',(i),CR,vm s @ ( lup,ii+1CRpe X(end: Display variables - try to be smart: use pw to fit the output)'X0(n1v10 displayencl v1 00( nn,1v20 displayencl v22;n0((maxwpwĢ1MAXDIMS H((8(exit if maxw((2'lx' pnc sp)l10 is lx part of it? (@( ('lx' pval sp ((03( 0 execute it then(H(l10:defaultqlx try this one otherwisest? H @(defaultqlx( SwTPATHlim0xp(fils^keysdropk2(k1;commonfil20(jk?Ȉ8(8(8(88(p8(8(Љ8( 8(h8(8(8(p8(8(ȋ8(8( 8(88(h8(8(8( Ȍ8( 8( 08(00( (^Bd8I(( @(tws;sp;tws P(sppack 'ct ec er fc io lx pp pw ps rl trap'P8(untie numsppdef 'io' pack 11188 (trap'22 e ''wcompare'' stie 1',28(P('wcompare' create 1(Ptrap'1 e ',(10),'21 e (1e5+12size 1)resize 1lc s'PH(((2 ws 1)(1 0 2 ws 2)(1 0 1 /32 ws 4)) append 1H((tws((2,1tws) 2 6 'Vsys Vgrps')(tws 0 6 tws)tws'VFI'[2 3 4 nc tws],tws1 ws 19) append 1 (sp append 1I( h(('(pack0)',,',i3,<;])>' fmt1tws1 ws 4) append 1h (spsize 1 I( 8((0tws2read 1,sp[io+1]-3)0til8(x(('FI'=1tws)/7,8 I((0( (6 ws 1tws[io;]) append 1 0 ( 90((cr 1tws[io;]) append 1 0ȶ( 90((pack 1tws[io;]) append 1 0( 908((0tws 1 0 tws)6,1108(9,('*** TOO BIG ***') appendr 18 (trapspl20 fil1`@(D)j?ȍ8(8(8(7(@9(@ (Z (M`m( Y(rispack peXYZ HZ(r2pnames p nopemsg (jk?le8(8(@8(@9(8( 7(8(7(ȏ8(7(8(7((8(87(X8(7(x8(7(8(8(08 (!psVd"I(00(msgclearfile;f;trap;t;ns d0@( danb 840701 erase file holding transfered wss@((msg'File erased' ( p( f'wcompare ' (p2(trap'0 c nope'(8(untie(/f SS names,' ')/tnumst;n'I(80(f tie n((n)n0,t)00 85(f erase n I(  B( 0(;U(01(nope:msg'No file cleared' 160er1230220(21219017015012011010070slrightleftindex(C)j?H8(8(8(@9(8(@9(88(@9(8( 7(8(x7(8(7( 8(7(H8(7(h8(7(8(P7( 8(P7( 8((7( 8(7( h8(7(@9(0+ ( b0PG(indexleft rowfind right;sl;sr;grade;rows;select;iota;i;iorkj(PX/( returns the locations of the rows of right within left for char matsXH( left and right need not match in width. Not found=02(HHh( much more efficient than ^.= for large matricesn(k(H(io1`(i0,1(slleft(2 1 1 ,left)left)srright(2 1 1 ,right)righta]-rows`(xP(left(isl)left j(@Sj(((N( right(isr)right Sj(( |( rows1sresQj( (O(leftleft,[1] av[256](0((gradeavright,[1] leftoj(j(0(P(selectgraderows@((pe(indexiotarowsPj(8Tj((X0G(index[select/grade]((~select)/grade)[1+(select/select)-iota]-rows1.'X8`(index[(/rightleft[index;])/iota]08(C)j?ndP8((8(srx8(@9(s;ȗ8(7(a;8(7( 88(07(thP8(7(s 8(7(s Ș8(x7(it@9( for(< (MVb=j(((;(rtimen t;i;psm;io(P( danb 20020425 from ipsa: rdci type ts into ts formatthshkd(P@N(psm 0 31 61 92 122 153 184 214 245 275 306 337@0 (r365.25011+1461it5184000 0x( io18c(r(1+12(psmr)1),r-psm[1+(psmr)1]8@(r(1960+(i+60)365.25),r,t, 24 60 60 60 t@H(r[7]0.5+t[4]1006 turn 1/60ths into 1000thsfd 2Hmodpsm-] (C)j?8(Й8( 8(@9(p8(7(8(x7(8(X7(8(87(8(@8(h8(( (MM]i(i(((`(rr default value8i((P:( DanB 1992 default CHARACTER STRING r BY value IF IT 0P0((r1)0 also a valid value0 8-((r0)mod WXYZ h( rvalue @ j( B( 0H(mod: r IS not SCALAR 0 - IF value IS NUMERICfd 2H(x((' '=10value)/0 (x{( rfi rl5l3chkcompmemcml2l0ErDswitswspqpatdlmargpatnS)C)j?8(P8(8(@9(h8(@9(8(@9(8(@9(H8(@9(8(@9(8(@9(@8(@9( 8(@9( 8(@9( 8(7( 8(7( 88(7( x8(87( 8(7( 8(7( 8(P7( 8(7(P8(7(8(P7(8(7(Ȧ8(7(8(@7(08( 7(P8(@9(h8(@9(8(7(8(8(88(8(7(8(P7(8((7(8(7((8(7(H8( 7(h8(8(Щ8(7(8(8(88(X8(8(Ȫ8(8( 8(@8(8(8(Ы8(8(8(@8(h8( 8( 8(!8("H8("p8("8("8(#8($(8(%p8(&8(&8('8('(8('X8((p8()8(*د8(+8(7(+88(87(+`8(7(+8(7(,8(h7(-8(@9(.H8(7(.p8(7(/8(@9(@9(h (V aKb`RV!"&'+ hX(parmspatn parse arg;d;e;dlm;i;p;pat;q;s;sp;sw;swit;t;D;;io;ErXX( DAN BARONET 1993 - parse SWITCHES AND RESET ARGUMENT. VERSION L2.22avXP:( SPACES ARE USED TO DELIMIT ARGUMENTS. '/' DELIMITS SWITCHES.P@( QUOTES CAN BE USED TO INCLUDE SPACES OR '/'.@Py( SWITCHES CAN EXIST WITH OR WITHOUT [POSSIBLY DEFAULTED] VALUEPHX( OR BE ELIDED. NON MENTIONNED SWITCHES ARE REFUSED.2 HX( SHORTER NAME ARE ACCEPTED BUT '=' must BE USED TO SUPPLY VALUES.ERXX( IN THE FUNCTION SWITCH VARIABLES HAVE THE SAME NAME PRECEDED BY ''ONX@N( OR CONTENTS OF IMMEDIATLY GLOBAL ''.Er@ ( EXAMPLE:wit2 X(( cmdarg '/sa /ab= /sc[=] /cd=1 2 3 /e[=]d e f /=*' parse cmdargitX@=(Er711 (( dlm1patn,'/' i((@( arg' ',arg DanB: added for LOGOS uset@(io1 ( ( t\arg='''' ( 8( s\swt1q t=1ST quote(Hh(pts> DELIMITERS: SPACES NOT IN QUOTES OR 1ST QUOTEHX0G( COMPRESSOR: ANY DOUBLE QUOTE OR LAST QUOTE NOT IN \ OR DOUBLE DELIM.X((parms[p/p]1D (8X=( parms((1q)p^1p)/parms80 ( DANB 1994/03/25 17:4784000 0parmsOH(C)j?i(X8(88(j(x8(@9(i(8(7(j(@9(H H (MOl( P(ra except bal( 8( danb 83/9/22 elements of A not in B8 (r(~ab)/a@ k( 320iF((EXP fori N;F;i;i;0(@@v( danb execute expression for 'i' in range(cr(@(((2 3 N)/2,3 i(i((0x( Nio,N-~io count from io(0 (2:NN,1n(n( (@(3:((1N)ū-/2N)0 ( p( i''Ң1N i( (013,EXPNU_ (i''N (( F 11N restartable(Xy( DanB 951203 will EXP for i:=N[1](or io) to N[2] incr by N[3]oXEXP)x@(D)j?8(8(8(H7(@9(@ } (Mx P(rfi v~(rfi vfmtdelm2m1jk?x8(H8(8(@9(8(@9(88(@9(`8(@9(8(p7(8(H7(ظ8(h7(8(7(8(7(H8(Ȫ7(p8(x7( 8((7( 8(7( 8(7( P8((7( p8(7( 8(7( غ8(87( 8(7(@9(0x ( asMucm 08$(dm1 compcm m2;x;r;c;io;del;fmt808( character matrix comparisonYZ0X( display the object m1 together with the lines from m2 which areo(X(( different from m1.#(0v( NOTE 2=(m1)=m2 **NOTR**0( io0 0x( xcompbool m1 jdmr1 m2 li4' 0 ( r/x ( c~x@0v( del(~r)\''DELINS delete/insert symbols@('( fmt'[,q]li4'@nb(Hh( ddel,fmt fmtxr row nos, 6 wide, =left, =rightH@( r(compind r),c/compind~c order of display@(( xm1 cat1 cm2 (0( dd,[io]((+/c),6)61DELINS 0 ( xd(d,x)[r;] 8( x(1+2ZONE)-ZONE zone of display80u( rr/rd[;2].=21DELINS 00( rnub(/r.<0,1d)/r,r.+x0 v( dd[r;]@i o( RsEx020100 (D)j?X8(08(8(@9(ؼ8(@9(08(@9(`8(X7(8(7(8(7(Ƚ8(X7(8(7(@9(( (0;tra(0(0001 default 02;Ex;RsWXYZ0P DanB 2001 default var 01 by value 02. '' in name returnsPXt( the value instead and '' will use of 02 instead of 02 itself. X0 ( Right arg cannot be a package0 (Rs''01 Hn( Ex''01 q( (( 0101 except '' ((P(Ex2Ex+4 ws 01ssss(@P+((,>1Rs01'00'),'',,>1Ex'02'0201@H(D)j?8(x8(8(8(H h4 (MW 5(rljust mZ (W( left justify matrixk(( 4(r(+/^\' '=m)m rEp%WH(D)j?8(`8(8(@9(8(7(@9(H  (xW ph(vvm mH( danb 840531 - vector from matrix (compare grp)fd 2H0(v1(,1,~^\' '=m)/,CR,mp)WXYZ0 (D)j?o;8(8(] 8(@9( c88(@9([28(@9(la8(X7(ct8(7(erH8(lih8(2 8(Ȱ7([3@9((u (MOX((Pu(ra cat1 b;sa;sbwj((Hh( danb 83/10/12 catenates 2 objets of s on 1st axisHH0Z( if args are empty vectors they're replaced by 0 0''HHm( won't use up more space if the same but willlayHP`1(r0,1(a(sa21,(,a),a)a)b(sb21,(,b),b)bP0<((1sa=sb)l10 skip ?will 0 v(a(rsa)a WXYZ xx( b(rsb)b j( x(l10:ra,[io] b l4l1calcdiagstlizybcP.(D)j?(8(8(h8(7(8(8(8(h8(8(8(`8( 8( 8( @8( p8(7( 8(X7(8((7(88(7(`8(7(8(7(8(h7(8(@7(8(7( 8(7(X8(p8(8(8(8(7(8(X8(x8(8(8(8((8(h8(8(8(8(8((8(@8(`8(8(8(8(8(7(@9(nPXt (BWOMusbR|dp lumnsX@p(mcompbool b;br;bc;r;c;x;y;z;i;li;s;fix;n;io;f@(stX,( bboolean matrix b m is b with some of the 1's replaced by 01 rX@( m has the properties that:(1) 1(+/m),+m@P`l( (2) each 1 is below and to the right of the previous 1d (2) PHh( (3) +/,m is a maximum for constraints (1) and (2)2H`( NOTES io0, m is not necessarily the unique optimal solution of (3)d by 0`Pl( this function is one of the seven wonders of the modern worldPX\( main algorithm calculates the boolean matrix x (line l1) where :umns XH4( max[i;j]+/,compbool (i,j)b and xmax-0 10,maxH@( then uses this to calculate result at line l4@0w( original fn by psa 1984f0P0c(st:b(br/b)(bcb)/b get rid of zero rows and columns cP(g(m(b)rcio0m((Pdiag:n+/^\, 0 0 b follow diagonal as far as possiblelongerP(h(m[r+n;c+n]n.=n ( h( rr+nn ),+m  ( cc+n  @v( b(n,n)b@ t( i(x+/^\^/~b br HX( y+/^\^~b number of adjacent 0 rows and colsophtH8X((0=/x,y)calc no zero rows or cols8ph(rr+x (p( cc+y  i( b(x,y)b bcC @(( diag cut back b and try diagonal again@(@h(calc:(0b)endAm((H(b(fixi,~iii+1)l1 @((0=y1z)end y is the number of matchest(@ j(zn1b yAG 0( i1+''b initialise loop\m00<(l4:fzs(zb[i;]+\x[i;])y0 j(x[i;](-s)nf j( z(1*f)z,s X( ii-1  l( (0yy-f)l4 l(x[i+1;]0sM( Xx(xbfixxfix1 X7(sb o((hh( m[r+s[0];c++s[1]]b( Pw(end:mbrbc\m X(E)j?x8(X8(8(@9(8(@9(08(X7(@9(X l (dOl( (ncompind bXl( P`l( return nos. from 1 to +/b for each element of b such that cPHX( n is strictly increasing and b/n is +/b(io=1)d 2(H8X(n1+\n/n(1n)-1nb/b1,b,1(8x(E)j?8(8((8(@9(x8(@9(8( 7(8(7(8(H7(8(7(@9(x(8^ (OLbdj(aj(( (ba jdmr1 w;i;n P jot-dot-match-rank 1 for rank 2 a and w with same last (2) P(x( sort of a.(1) w w( @`(ba cat1 w J l( (H]( i(3010a)'avb'((p](i[i]+\/b1bb[i;] (((]( bi[n].=(n1a)ij((br OH(E)j? 8(8( 8(@9( 8(7( @9(H < (xx ph(vnub v8x<( danb eliminate doubles from list v8 x>(v((vv)=v)/v sbsaa0A(E)j?8(8(p8(@9(8(@9(8(@9(8(Ⱦ7(8(7(@8(@9(p8( 7(8(7(8(7(8(@9( 8(@9( h8(@9( 8(7( 8(87( 8(7( @8(@9( X8(@9(8(p7(8( 7(8(к7(8(@8(p8(8(8(8(8(88(7(p8(P7(8(8(8(8(88(X8(x8(8( 7(8(7(8(й7(8(7(X8(7(8(@9(8(@9(8(h7(8(87((8(7( `8(7( 8(p7(!8(H7(!8("8(" 8(#88(7($p8(%8(&8('8('@8((`8(ȶ7()8()8(*8(+8(H7(,88((7(@9(0hP (Ra}~bQWdhuq#&(+l. hh(dp1 compack p2;n1;n2;c1;c2;i;obj;m;n;io;cr2;show;h;l;c;O;fullpath;pathcopy;Z;any;NL h8( danb 840531 compare two packagesHOW8@ ( returns 2: different'text of changes'ages@(X(io1 ((H( show, 2 2 3SHOWMq((0#( use a fn to gather outputzpw[0H (Z0fx(2,i)((i)'O s'),i'(s)0ZZ,,CR,s'fd 2H (n1Onames p1 ec ( n2Onames p2n( @b(k(Xu( Because we can't do p1,p2 with packages we need to have 2 args. AndX`( since we need to keep track of nested package we have to use a global..' :9_`(('Path' default '' ( ]j(( h( pathcopyPath 0( fullpathPath,(0Path)'.'0(;Yi(8( List objects in left but not in right801(any/i0=cn2 rowfind n1(00(obj' outstanding objects in ' 0 ( anyl201UR 0X(O '*** ',(+/i),obj,'1st' 00`l( show[4]/'O vm fit in1'0 (show[1]l20 (D ( NLin1lup 8]('O p1 displayfp NL[i;]' fori 1NLs p2`8(;m(8( List objects in right but not in left88(l20:n1cn1 keep common objects only80((/i0=n1 rowfind n2)l40 0 (( m(3Z)CR ( \( any1(0(O m,'*** ',(+/i),obj,'2nd' 00:( show[5]/'O vm fit in2'0 H(show[2]l40 ب( NLin2obj 8('O p2 displayfp NL[i;]' fori 1NLp2 8(((l40:m1objn1 t(n(( ( li0 mM( ( cr22CRnYP2 @(O(0=Z)cr2,'*** ',(m),' common objects' NLR @0F( show[6]/'O vm fit obj'0(;k(@(( we check each object even if SHOW[3]<21NL @ (cshow[3])cr2 ((lup:(marray[n]pick iotasselectrowsgradesrDsh (E)j?8(X8(n(8(8(m(8(08(n(X8(x8(m(8(8(j(8(es8(( (MzQt{|(0(rbox displayencl obj;ps;sh0@(( display obj with lines surrounding boxes(i(@(ps0(((isencl obj)fixJ(((r1 displayencl>obj( (rtomat r 1 0( 0 always table result0(X(fix:rtomat obj :(8( box0 ((isencl obj)0 ((r'',(''r'_'),''( p(pathcopy{ oboxy(E)j?om(8(8(pvH8(@9( x8(07( 8(7(d8(h7(ef8(@7(pl8(@9( 8(7( @9( f - (My .(rtype o1r2, 0( one-letter type for ObjectXYZ0(r'p'  h-( (ispack o)0( 8(r'e' ( ( (isencl o)0( H-( num is broad (+(r'cn'[0 1 0''10o](v`E)j?8(8(8(j(@8(n(X8(8(n(`(X (WxhOa!j(( ,(mvtom v;l;b;dZ Pi danb 20th century - this code fits all (no nested arrays)PH(io18h(l1l-1+1l(~b)/bdmv,d1vl)\b/m80(m(b)(,bl./0,bl)\b/mXYZ0l90typc(E)j?bj8(8(ow8(th8(nyP8(22x8(2i8(p18(de8(oplpat( (utQvXw((h(ccl displayfp obj;typ(8:( danb 840629 display object in CLuster88(typ'I???VFF----V'[3+obj Onc cl]m(8((('VI?'typ)/l10,2l90 ((O( clobj fncr cl Pl(($( l90((l10:clobj Oval cl(POl((0P(l90:ccl display typ,obj0 0H(F)j? x8(X8(8(@9(8(н7( @9(H  (MQd p(rOnames obj;n( ( names in obj( H(rpnames obj clH(F)j?X8(88(8(@9(8(7(@9(H `E (trQs (D(clnam Onc obj;xDl(Fl((00( danb class of nam in objVWXYZ0 (clnam pnc obj xnamH(F)j?h8(H8( 8(@9(8(7(@9(H 8 (MrQs ( (rnam Oval obj;xj(j((80:( danb 20030328 value of nam in obj8 X(rnam pval obj l20(F)j?8(8(8(8(08(P8(p8(8(8("(0 (MQVtqm(((H(rtomat obj;t;ps(@`+( danb 20030417 format obj a la Dyadic APL@\(ps0  ((CRobj)l20YZ A(rvtom,CR,obj ( ( 0l(0`Y(l20:t(/1t),11,trobj 08( rtr(fp(F)j?8(X8(8(8(8( 8(@8(yp( (Mlp#%#(((rfmtfn cr;io;ffn cr(8h:( danb 2003 format cr of fn **NOTR**8((f'r< >p<[>q<]>bli5'(P(io0  X( rf fmt1cr (rvm r,cr@^ i( iFrpakfnncr (F)j?8(`8(8(8((8(p8(8(8(8( 8(P8(( (lmn&doX(0p(crfnn fnfd pak;fncr;n;iFrage0HhN( danb 840705 functions description from a Package 2H(( 199805 include ifns(H(cr(<'spfncr;',fnn),<'pdef''',fnn,'''psel pak'MH0(n'sp1 fd''',fnn,''''0(0((0cr,(dropio0 0( drop+/drop ensure scalar00w(drop1+(+\'.'=>r)1 drop0 =(rdropա>r@b k( werKL`G)j? 9(9(@9(p9(9(9(` [ (KLk( `](e shcpt w  0((w)0 anything to show?WXYZ0 ]('Path' Oval eCR (p;('type: ','type' Oval e(((w,CRgo checkqsp compare comparefiles compareLfiles describe licencenotetwsVERSIONispack clearfile compfile isencl movetofile SSopencompfncompvardisplayfitfsizeif manymatch pickrowfindtimenCRSHOW default parseexceptforificompcmdefaultfncrljustvm NOLASTLINE cat1 compbool compindjdmr1nubDELINSZONEcat2compack displayencl typevtomMAXDIMSPTYPE displayfp OnamesOncOvaltomatfmtfnfnfdstrlenNLINESisprivreply05 (Kpackaget(((Padi( ,K- s (@j(Ȉ   3= ףp=@( H**k*** objects comparison utility ws version 1]HPThis is the usual licence agreement between you, the user of this collection of programs in this workspace, and me, the owner/creator of it. You can use it but not resell it, packaged with something else or not, even if modified. You know there may be problems with it and agree to use it "as is". In other words if it fails YOU take the blame. On the other hand I will fix problems reported to me. /DanBble8p compare utility This ws will provide useful info between 2 objects, mainly the difference between them. there are 3 main fns: r p1 compack p2 compares 2 packages, calls r c1 compfn c2 compares 2 fns; '' if identical. c1 and c2 are the cr of fns. r v1 compvar v2 compares 2 variables; '' if same. v1 (or v2) may be a package in which case compack will be called and so on. Enclosed arrays are detailed only if they are vectors of same shape. Differences are shown on simple objects of rank 2 or less or if they are small enough. The format of compfn is as follow: the function on the left is assumed to be the one which has changed. the fn on the right is assumed to be the replacing fn. The output is based on these assumtions. Each line of the fn on the left is preceded by its line number [xx]. Where the line has been deleted a symbol appears ( or *) before the line number. Where a new line has been inserted there is no line numbering and a symbol (like ) may appear. example: fna fnb [1] same line [1] same line [2] fna line 2 [2] fnb line 2 [3] same line 3 [3] same line 3 [4] comment deleted [4] new common line [5] new common line [5] new comment (cr 'fna') compfn cr 'fnb' [0] fna fnb [1] same line [2] fna line 2 fnb line 2 [3] same line 3 [4] comment deleted [5] new common line new comment Note that in order to avoid lengthy output of big functions with little difference only sections of the function are shown, those where the changes occurred plus a couple of lines before and after (see var ZONE). In order to compare entire wss it is necessary to send the wss on file and to use the 'compfile' program as follow: )xload ws1 )copy compare tws tws transfer the ws )xload ws2 )copy compare tws tws )load compare compfile '/switches (see below)' clearfile to clear file space is the Transfer WS function. It moves the variables and functions of the ws onto file preceded by some ws info. If the file does not exist it is created. After has been run, should be run in order to get rid of the file easily. Note: this version does not always report the stack state compfile may not work fine for very large objects pw is used to delimit output Under APL+Win or SAPL (if you have multi-task access) it might be easier to use the program as follows: 'ws1' compare 'ws2 /switches' Under Dyalog the same program will work but will report improperly some elements like the stack. Switches You can use the following switches to /xnames= exclude the names that follow. A simple pattern can be given. /xstr= exclude the objects with that string in it /norm will left justify the fns before comparing /show= temporary replacement for SHOW (see below) --- Output specifications; variable SHOW The amount of info displayed is determined by a few globals. One of them, SHOW, contains 3 values for each one of the SECTIONS of the report, that is the 2 "unique symbols" sections and the "common symbols" section, i.e. - the symbols found ONLY in the first object/ws - those found ONLY in the second one - those found in both each section has 3 PROPERTIES: - the number of symbols - their names - their contents (or difference) The first property is always displayed. The last 2 depend on the section value in SHOW: if 0 nothing is shown 1 the names only are displayed 2 their contents/difference only is displayed 3 both The default value is 1 1 3, that is the first 2 sections have their names displayed only and the third one shows name and differences. To change temporarily this setting do, for example: 'ws1' compare 'ws2 /show=2' to show names only for all sections Another global affecting display is NLINES which shows the first N lines of a variable in the "unique symbols" area. Yet another one is ZONE which affect the display of differences between objects. This is the number of lines shown before and after the differences found. --- Files --- To compare 2 files use 'file1' comparefiles 'file2' This will compare each component with same number. That is, if file1 ranges from components 10 to 20 and file2 ranges from 15 to 45 then only components 15 to 20 will be compared. --- Globals --- DELINS 2 chars for display of fn lines differences to the left NLINES maximum number of lines shown for variables NOLASTLINE ignores Logos style pathnames tag to compare if set to 1 (default) SHOW display code per section ZONE number of lines to keep after changes in fns in fn h^@go  (D)j?s2H99(99(sox99(ev99(sP99(:s :9(CRH:9(v2:9(ts:9(se:9(2n0 (lmn&dh00H(crfnn fncr pak;fncr;n;l;rEpe0H( danb 840705 functions description from a Package 2H8(cr(n33+2,fnn)'0fncr 1;x;',fnns(8(@S(l1'''cr''',fnn ((( (01(shcpt=(wsloadsystem=(getamofpQ(cutc (@)j?<9(`<9(<9(@9(<9(@7(=9(h7((=9(H=9(h=9(7(؈=9(7(=9(7(=9(x7(=9(87( (@9((x\ (O.t(((7(ws1 compare ws2;b;Swet((0h<( danb 840822 ws comparison pgm0 0_(bclearfile (P\((isencl ws2)l1 H( g( ws1>''ws2 t( XU( ws2,>1ws21 b(l1:b\'/'=ws2 ^( Swb/ws2 l1:b ^( ws2(~b)/ws2t( (X(ws1 movetofile ws2( _(compfile Sw xJ(dropsectiond J(QTOsupport@ patmatch,ts dd7(7(7(7(7(P!9(7(7(7(`7(h7(p7(87(H7(7(07(7(7(7(7(7(7(7(`7(7(x7(p7(ؿ7(X7(7(`7((7(h7(7(P7( 7(7(7(7(7(h7(P7(7(87(X7(7(7(x7(`7(H7(07((.,**_(       r  "    $  []();/\+-*^<=>,!?~_ܭ}{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. ':  |`#@"%&徼е뱿    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   7:   PD9(   hPD9(0D9(D9(C9(C9(C9(C9(C9(xC9(`C9(HC9((B9(A9(@9(@9(@9(@9(h@9(H@9(h0=(sqzc (E)j?E9(E9(E9(F9(`F9(F9(F9(G9(8G9(XG9((h (MOX((@(ra cat2 b;sa;sbxn((H_( danb 2003 catenates 2 objets of s on 2nd axis 2HH( if args are empty vectors they're replaced by 0 0''HH( won't use up more space if the same but willHP@r 1 0 (a(sa21,(,a),a)a)b(sb21,(,b),b)bPP z((1sa=sb)l10Z (a(rsa)a i( X( b(rsb)bbb (l10:ra,bsaNE endvar^fn(samecllupl40NL(anyNZ3(OSh3(showcr2c2n_c1(n2/n1(p2kp1(fixLd-.  !*+E"P ]) %I&'~#$,\fj/(,-