Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (07/04/90)
Submitted-by: kim@uts.amdahl.com (Kim E. DeVaughn) Posting-number: Volume 90, Issue 196 Archive-name: unix/ls-4.0k/part02 #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 4)." # Contents: ls.uu src/ls.c.ab # Wrapped by tadguy@xanth on Tue Jul 3 15:22:11 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'ls.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ls.uu'\" else echo shar: Extracting \"'ls.uu'\" \(22474 characters\) sed "s/^X//" >'ls.uu' <<'END_OF_FILE' Xbegin 755 ls XM```#\P`````````"``````````$```Q9```#%P```^D```Q9)$@D`$GY````; XM`$CGP."9_``````@/```%#PB/``!``$L>``$3J[_.DJ`9@``"$S?!P-.=2!`= XM)$`B0"`\```"\2#<4X!F^B`<9PX@2='<U=`@BB1)4X!@\"A)V?P`````3-\'B XM`RQX``0I3@O(*4\+S"9N`11P`"(\```P`$ZN_LY*JP"L9B1!ZP!<3J[^@$'K, XM`%Q.KOZ,)`!G``":3J[_?")"3J[^AF```(Q#^@"H<`!.KOW8*4`4.&8$<&1@' XM7B9K`*S7R]?+)FL`$-?+U\L@`G(`$AO0@5*`3KD``"8(2H!G1BE`"\0B2R!`9 XM<``0*___3KD``"SJ#$(``F4.$/P`("`"(DI.N0``+.H@;`O$3KD``"'X<`!@K XM!"`O``0O`"!L"\1.N0``)BPB;!0X+'@`!$ZN_F(@/```%#PB3)/\`````"X?. XM+FP+S"QX``1.KO\N(`=.=61O<RYL:6)R87)Y`$Y5__A(YR`"*T#_^$CM``+_8 XM_$JL``!G%@@L````#F<.)"P``"("+&P4.$ZN_Z9*K``$9P@@;``$3KHDDDJL, XM``AG""!L``A.NB2$D\DL>``$3J[^VB!`(6P+\`"X(6W_^`"4("W__$ZZ+?1,) XMWT`$3EU.=4Y5__Q(YP$2)D@N`$JL``!G'`@L````#F<4("P``"(`+&P4.$ZN1 XM_Z:1R"E(``!P_[Z`9@XL;!0X3J[_?"E``"0N`"!+0^P'BDZZ+8I2@"]```Q!> XM[!$X(DM.NBQT(&\`#$/L$3@@"$(Q"``@!W)GD(%G.')CD(%G0E6`9U13@&=09 XM7X!G3%.`9UQ;@&=F7X!G<%.`9WH$@``!T_)G``"`<@J0@6<``()@``"20>P'' XMC&$`!X8@!W(480#^UB\+2&P'H$AL$3A.NB.J3^\`#&```)`O"TAL![Y(;!$XM XM3KHCE$_O``Q@>D'L$3A#[`?>3KHL(&!L0>P1.$/L!_I.NBP28%Y![!$X0^P(D XM'$ZZ+`1@4$'L$3A#[`A"3KHK]F!"0>P(4F$`!Q1@0"\+2&P(?DAL$3A.NB,^[ XM3^\`#&`D+P<O"TAL"*)(;!$X3KHC*$'L$3AA``;F(`=R%&$`_C9/[P`00>P1] XM.&$`!M),WTB`3EU.=4Y5_\Q(YP\R)D@D22(\___W-=*2+T$`'.6!5H$K0/_8" XM(`$B/```!;5.NBS&*@`&A0``!\`B/```!;4K0/_H3KHLD$J`:@)6@.2`(B\`> XM')*`(`'EB-"!5(`O00`<<F9&`4ZZ+(YR9D8!*T#_[$ZZ+&)4@'(%3KHL>B(OC XM`!R2@%*!+BW_[%:'2.\``@`@<`R^@&\$4H6>@"M'_^P,A0``!]!L"B`%!(``# XM``=L8`@@!02````'T"X`("H`"'(R3KHL,B]``"0@*@`$<CQ.NBP$(B\`)-"!R XM<CPO0``D3KHL%"P!("\`)'(\3KHL"'(\+T``)$ZZ*_XH`2`O`"1R/$ZZ*_)RF XM&$ZZ*^PO00`<("W_V`R`````!V0``6;00#`[``9.^P`$``P`=`"B`-``\@$4, XM`39![?_<(@@L;!0X3J[_0"`M_]R0DBP`("W_[.6`0>P&O-'`)$@N+P`@<%K0? XM@+R`;@1*AFH8+P4O!R\22&P(N"\+3KHAD$_O`!1@``$(+P0O+P`@+P<O$DALI XM",8O"TZZ(71/[P`88```["`M_^SE@"\&+P0O+P`D+P4O+P`P0>P&O"\P"`!(N XM;`C<+PM.NB%&3^\`(&```+X@+?_LY8`O!B\$+R\`)"\'0>P&O"\P"``O+P`T: XM2&P(_B\+3KHA&$_O`"!@``"0+P8O!"\O`"0O!R\O`#`O+?_L2&P)("\+3KH@W XM]$_O`"!@;"\&+P0O+P`D+P<O+P`P+RW_[$AL"48O"TZZ(-)/[P`@8$HO!B\$Z XM+R\`)"\'+RW_["\O`#1(;`EL+PM.NB"P3^\`(&`H+P8O!"\O`"0O+P`L+RW_! XM["\'2&P)DB\+3KH@CD_O`"!@!D(3<`%@`G``3-],\$Y=3G5.5?_T2.<`,"9M: XM``A([0,`__0D;?_T($I2BB)M__@@$4J`;P1P9&`"<"T0@")*4HH(*P`'``-G` XM!'!H8`)P+1*`(DI2B@@K``8``V<$<'-@`G`M$H`B2E**""L`!0`#9P1P<&`"` XM<"T2@")*4HH(*P`$``-G!'!A8`)P+1*`(DI2B@@K``,``V<$<"U@`G!R$H`B_ XM2E**""L``@`#9P1P+6`"<'<2@")*4HH(*P`!``-G!'`M8`9P`!`L!O`2@")*. XM4HH(*P````-G!'`M8`)P9!*`0A(@$R(``D'_`$J!9QHD2`@```=G"!5\`$@`< XM`6`&%7P`*P`!<`%@`G``3-\,`$Y=3G5.5?_T2.<A$B9)*TC_^`@L``8`$V8`0 XM`(Y*K``H9E8@+?_X(@`D+``(+&P4.$ZN_XY*@&8V2JP)N&9J(#P``"`@P*P`( XM#&=>4JP)N$ZN_WPO`$AL";Q(;!$X3KH?&D'L$3AA``+83^\`#&`Z(&P`""XHL XM`!1@!"XL`"@@*P!\(@=.NBCB2H%G!'`!8`)P`"]``!`@*P!\(@=.NBC*(B\`O XM$-"!)T``@$S?2(1.74YU3E7__$CG(1`F2`@L``(`$V9$("L`@')(3KHHG$J!H XM9P1P`6`"<``O0``,("L`@')(3KHHA"(K`(#0@20O``S0@BX`2JL`?&8$<`%@+ XM`G``)`?4@"`"8`0@*P"`3-\(A$Y=3G5.5?^X2.<!$"9(0>L`!$/K`'0O"2](P XM``Q![!$X(F\`#&$`_<Y83THK`)!F#D'L$3A#[`H`3KHFSF`,0>P1.$/L"@1.# XMNB;`""P`!0`,9QXO$TAL"@A(;?^\3KH>#$'L$3A#[?^\3KHFGD_O``P@2V$`7 XM_RXO*P!\+P!(;`H.2&W_O$ZZ'>1![!$X0^W_O$ZZ)G9!ZP"$+T@`&"`L`!A!@ XM[?^\(F\`&&$`^KY![!$X0^W_O$ZZ)E)![!$X0^P*'$ZZ)D9![!$X80`!9D_O& XM`!`@*P`$2H!O"$'L!OYA``*<0BP1.`@L``8`#&8(""P``P`.9S1![!$X(FP2Q XM\$ZZ)@I![!$X3KHEVBX`<`&^@&\8<#I![!$XL#!X_V<,0>P1.$/L"B!.NB7B1 XM0>L`""](``A![!$X(F\`"$ZZ)<Y^``@L``8`#&<Z0>P,B$ZZ)90N`"`'0>P1W XM.$/L#(A.NB4(2H!F'$'L$3A.NB5XOH!L$'`O0>P1.+`P>`!F!E*'8`)^``@L7 XM``0`#&<4("L`!$J`;PQ![!$X0^P*(DZZ)6Y![!$X0^P*)$ZZ)6)![!$XT<=A< XM``"`("L`!$J`;PA![`;Q80`!N@@L``<`#V<T2BL`D&<N0>P&_F$``:1!ZP"0" XM+PA(;`HF2&P1.$ZZ'()![!$X80``0$'L!O%A``&"3^\`#$S?"(!.74YU+PL@B XM/````1!.NAP@)D!*@&<,(`MR#-"!)T``"&`&".P````/(`LF7TYU2.<P$B9(8 XM($M.NB2F2H!O$"(L"^@D"R8`+&P4.$ZN_]!,WT@,3G5.5?_\2.<P`BM(__P@: XM+`OH(@`D+?_\=@$L;!0X3J[_T$S?0`Q.74YU+PX(+``$`!9F)'``(@`L>``$G XM3J[^SBE``!0(```,9Q1![`HL88P([`````]@!@CL````#RQ?3G5.5?_\2.<Q< XM`BX`*T'__"`L`#"PK`P<;P``A'`!OH!O?`@L``<`#F9T0>P'%V$``)8@!U.`# XM+RW__"\`2&P*/$AL$3A.NAMP0>P1.$ZZ(]Y/[P`0(BP`,+*`;@Q![!$X0^P*V XM5$ZZ)FI![!$X80#_#D'L!O%A``!0("P+["(`0>P1."0()CP```$L+&P4.$ZN; XM_]9![`I>80#^Y&$`_RY,WT",3EU.=4CG`Q`F2"X`?`!@!"934H:\AVP$2I-FE XM]"`+3-\(P$YU3E7__"M(__P(+``!``]G""!M__QA`/Z@3EU.=4Y5_\!(YR\PY XM*TC_Q$'L!O5ATD'M_^1#[?_@3KH:Z$JL`#!F!BEM_^0`,$JL`"QF!BEM_^``Y XM+"9M_\0(+``"``QG``'(>@!^`"938%0@:P`(("@`!$J`;Q8(+``!``]F#D/HJ XM``@@24/L!H-.NB,&(&L`"%"(3KHBU-Z`4H4(+``"``YG&B!K``@@*``$2H!O5 XM#D/H``@@24ZZ(K*>@%.%)E-*DV:H2H5F`E*%(`<O0``<(`<B!4ZZ)`PN`"`OC XM`!PB!4ZZ)`!*@6<"4H<@+``PL*P,'&\(""P``P`,9P1X`6`:>``K0/_D8`H@D XM!U2`D:W_Y%*$("W_Y+"';.YP8W(`0>P,)!#!4<C__"`%(@1.NB.T+``@!2($[ XM3KHCJDJ!9P)2AGX`(&W_Q"108```C$*M_^0F2F!2""P``@`.9Q`@:P`(("@`9 XM!$J`;P1P`6`"<`!&@&<F(&L`"%"(3KHA\"!M_^1R`$/L#"0D"!(Q*`"P@6\(; XM0^P,)!.`*`!2K?_D(`8@2V$`_D(F0"`M_^2PA&P$2I-FHDJ'9APH+?_D(`4B? XM!$ZZ(R(L`"`%(@1.NB,82H%G`E*&4H<D4BM&_]B^AFP&2I)F`/]J?`!"K?_D= XM8`QP`!`35(#<@"M'_^1![`PD("W_Y-'`)D@N`%*'OH1MX'``$!,N!MZ`<`&XT XM@&\``.Z^K``P;P``YE.$8`#^\@@L``0`#&<$4JP,''X`)%-@2`@L``0`#&<FV XM(&H`"$?H``@@*``$2H!O#"!+0^P&@TZZ(39@"B!+0^P*:$ZZ(2I2AP@L``(`T XM#F<.(&H`""`H``1*@&\"4X<D4DJ29K0@+`P<(BP`,+*`;P@(+``#``QG!'@!D XM8!)4@"]``!P@`2(O`!Q.NB(T*``@!R]``!P@!R($3KHB)"X`("\`'"($3KHB; XM&$J!9P)2ARM'_]AP8W(`0>P,)!#!4<C__"M!_^1@%B!M_^0@+`P<0^P,)"((G XM$X`8`%*M_^0@+?_DL(1MXB`L`"Q3@$CM``'_U&X&<@$K0?_4<`$L+?_8*T#_% XMT"`&(BW_U$ZZ(;0J`"`&(BW_U$ZZ(:A*@6<"4H4K1?_<?@`K;?_4_^`@;?_$F XM)E!@``%,<`&Z@&\T("W_X+"M_]1F*G``*T#_X`@L``$`#V<4("W_T"(%80#[U XMP@@L````#V8``30J+?_<4JW_T$*M_^0D;?_(8```V"!J``@@*``$2H!J&$/H7 XM``A![!$X3KH?[D'L$3A.NA^N*@!@6$(L$3AZ``@L``(`#F9*(&H`"%"(3KH?V XMDBH`""P``0`/9PQ![!$X0^P&_DZZ'Z0@:@`(4(@O2``<0>P1.")O`!Q.NA^.\ XM""P``0`/9PQ![!$X0^P&\4ZZ'WH@!B!*80#[Q"1`("W_Y"(`4H&RA&PT2I)G& XM,'(`0>P,)!(P"``N`5*'0>P1.$ZZ'R(L`&`(%KP`(%.'4H9![!$XT<8F2+Z%& XM;.Q"$T'L$3AA`/I04JW_Y"HM_]PL+?_8("W_Y+"$;`9*DF8`_QI![`<F80#ZX XM5&$`^G@N+?_,4H=2K?_@(&W_R"90*TO_R"M'_\P(+`````]F"KZ&;`9*DV8`T XM_IY![`;Z80#[0DS?#/1.74YU3E7__$CG`#`F2"1)0I)@''``$!LO0``((!)R> XM"DZZ']@B+P`(T(%R,)"!)(`0$W(PL`%E!G(YL`%CUB`+3-\,`$Y=3G5.5?_<. XM2.<A,BM(_^@@;!+P3KH>2"X`(&P2\")(T\<F22)++TD`&'`!OH!O&'`ZL"O_^ XM_V<0%KP`+R!L$O`L2-W'0BX``2!L$O!.NAX0(&P2\-'`)D@D;?_H+T@`%"`JL XM``1*@&\4""P``0`/9PP@2T/L!OY.NAX>)D!!Z@`(+T@`'"!+(F\`'$ZZ'@HF$ XM0"`J``1*@&\2""P``0`/9PH@2T/L!O%.NAWN1>P1."9L!X9@``$8$!-R);`!O XM9PQT7+`"9P84P&```0)2B[`!9@``TB!+0^W_[&$`_N8F0"M+__`,K0```&/_0 XM[&\&<&,K0/_L<``0$P1``"5G<`1``#UG*E5`9QH$0``*9RQ50&<*5T!G'E-`; XM9PY@7D?L$L1@7$?L$KA@5D?L$N1@4$?L$J1@2D?L$M!@1"!M_^@@*``$2H!O) XM%`@L``$`#V<,("W_[$J`;P1>K?_L""P``P`.9P8F;!+P8!8F;P`48!`@2A"\! XM`"54BD(H``%'[`<G($M.NAS>+@!@!A3\`"!2A[ZM_^QM]"!*(DM.NAS^)$`F3 XM;?_P8"AP`!`3!$``7&<8!$``$F<&74!G"&`0%/P`"F`*%/P`"6`$%/P`7$(26 XM4HM*$V8`_N9![!$X80#WU@@L``<`#V<X)FW_Z$HK`)!G+D'L!OYA`/D&0>L`B XMD"\(2&P*:DAL$3A.NA/D0>P1.&$`]Z)![`;Q80#XY$_O``P@;P`80A!,WTR$Z XM3EU.=4CG(Q`F2'X`1@?.JP!T0>P2Q$/L"G1.NAQ6&6P&\!++?`-@+G`!(@#M% XMH<*'9PI![!+,D<9R+1"!(@98@20`XZ(B!\*"9@I![!+(D<80O``M4X9*AFK.L XM2BL`D&8&&7P`+1+$0>L`A$AL$N1#[!*X3KH62%A/("L`!$J`;S`(+``"`!-G1 XM#D'L$J1#[`I^3KH;X&`,0>P2I$/L"H!.NAO20>P2T$/L"H).NAO&8"@@2V$`O XM]$@O`$AL!@I(;!*D3KH3`BZK`'Q(;`8*2&P2T$ZZ$O)/[P`4($MA`/T$3-\(# XMQ$YU2.<P,"9(0>P&]6$`]^1P`"E`#!@I0`P4)E-@5&$`]M8(+`````]F``#,] XM(&L`""`H``1*@&\(""P``@`.9C`D2`@L``$`#&<(($IA`/[48`8@2F$`]"8@> XM:P`(80#SO-&L#!0@:P`(("@`?-&L#!@F4TJ39J@@/(````'`K``,9FP(+``"9 XM``YF."`L#`PB+`P0)`'4@'8!M(-O4B\L#!@O+`P4+P$O`$AL!@Y(;!$X3KH2: XM,$'L$3AA`/7N3^\`&&`L("P,$'(!L(%O(B\L#!@O+`P4+P!(;`9#2&P1.$ZZ4 XM$@)![!$X80#UP$_O`!1![`;Z80#V_DS?#`Q.=2\+)D@(+``#``UG$D'L"]PB5 XM2TZZ%VA*@&L$<`!@'`@L``(`#6<2($M#[`O03KH73DJ`:P1P`&`"<`$F7TYU9 XM2.<`$B9((`MG'F`0($LL>``$3J[^^"!`3KH1>"!32I!FZB!+3KH1;$S?2`!.3 XM=4Y5_]Q(YR<R)DDK2/_L<``I0`P0*4`,#"X`*4`,''`,3KH1'B]``"1*@&8&Y XM<`!@``)&(&\`)$ZZ'$QP#$ZZ$0(O0``@2H!G``(<($!.NAPV80#U/`@L````P XM#V8``?H@+?_L(@`D"RQL%#A.KO^4+`!*AF<``6A!ZP"$80#_&$J`9P`!6B`KW XM``1*@&\&1>P.X&`$1>P0#$'K``@O2``<(DI.NA34*@`D;P`<""P`!P`-9BQ*S XMA6<H("P`#"]``"@(P``5*4``#"!*0^P*ADZZ%*@J``I%``$@+P`H*4``#`@L< XM``8`#6842H5G$"!*0^P*CDZZ%(0J``I%``$(+``$``YG%$J%9Q`@2B)L$O1.Q XMNA1H*@`*10`!""L`!P!W9Q`(+`````QG!'`!8`)P`"H`2H5G``"J4H<@*P`$X XM2H!O-"!O`"`B2TZZ%C)*@&<``1@(+``"``]G``"&4JP,#%*L"_A2K`P`""P`J XM`@`39C92K`P$8#`(+``#``]G8E*L#!!2K`O\4JP,`"!M_^PB2V$`\'@@2V$`! XM\1[1K`P$("L`?-&L#`@@;P`<3KH82"H`NJP,'&\:("L`!$J`:@8I10P<8`P(; XM+``"``YF!"E%#!P@;P`D(DM.NA6D2H!G``"*2H9F`/YP("P,#-"L#!!F-@@L( XM``8`#F9B2H=F"`@L``(`#F<*0>P*DF$`\SI@3`CL``0`$P@L``4`#V<^0>P*" XMGF$`\R)@-'`,P*P`#&<L""P`!0`/9@X@;P`D80#T;E*L"_1@""!O`"1A`/Q4J XM("P,#-"L#!!O!%*L"_0@;P`D80#]=B`O`"!@$B!O`"1A`/UH(&\`(&$`_6!PJ XM`$S?3.1.74YU3E7_K$CG(3(F2"M)_[0@"R(`)"P`!"QL%#A.KO^:2H!F/$ZNP XM_WPN`'!MT("^@&802&P*J$AL$3A.N@["4$]@$B\'2&P*RDAL$3A.N@ZP3^\`5 XM#$'L$3AA`/)J8``#'%*L`!P@;``$("@`!$J`;P``^@@L``8`#F8``/`D;?^T) XM2A)G``#F#*P````!`!QO``#:($I#[`VT3KH6ZDJ`9P``RD'L$3@B2DZZ&6Y^3 XM``@L``,`#F8``(Y![`VT3KH6MD'L#(A#[`VT3KH6+DJ`9QA![`R(3KH6GD'LK XM#;1#[`R(3KH6%DJ`9EQ![`VT3KH6AB]``!1![`R(3KH6>B(O`!2R@&X&1>P-[ XMM&`$1>P,B"!*3KH68BX`(`=![!$X(DI.NA782H!F'$'L$3A.NA9(OH!L$'`OT XM0>P1.+`P>`!F!E*'8`)^`$'L$3A#[`KJ3KH63D'L!OYA`/*X0>P1.-''80#Q4 XM9$'L!O%A`/*F(&P`!"`H``1*@&IB""P``P`/9P`!^$'L#;0B2$ZZ$[0@2R)LY XM``1A`.WX""P``0`,9PH@;``$80#YG&`((&P`!&$`[NQ2K`O\4JP,`"!L``1AU XM`.YZT:P,!"!L``0@*`!\T:P,"`CL``$`$V```:`N+``,"`<`"F<(`*P``P``` XM``P@2R)L``1A`/N2+T``&$J`9P`!=@@'``1F"`@'``IG``%<(@<"0?O_*4$`4 XM#"!`)E!@``%$80#P\@@L````#V8``3P@:P`(("@`!$J`;P`!)B!M_[1.NA4T` XM(&L`"%"(+T``%$ZZ%28B+P`4TH!P)-*`(`%.N@QF)$!*@&<``/@@;?^T2A!GW XM,B!*(FW_M$ZZ%30@;?^T3KH4]%.`(&W_M!(P"`!T.K("9Q!T+[("9PH@2D/L6 XM!H-.NA3\(&L`"%"(+T@`%"!*(F\`%$ZZ%.@@+``<L*P`(&<``)@B"G3^+&P47 XM.$ZN_ZPO0``42H!G``""""P`!@`.9@A![`<F80#P!"E*$O`(+````!-G+$'MW XM_]A#[`[@3KH7&AE\`"H.X$(L#N%![?^X0^P0#$ZZ%P09?``J$`Q"+!`-(&\`_ XM%")*80#\V@@L````$V<80>P.X$/M_]A.NA;<0>P0#$/M_[A.NA;0("\`%"(`\ XM+&P4.$ZN_Z8@2DZZ"XPF4TJ39@#^NBE'``P@;P`880#YYBE'``Q3K``<3-],S XMA$Y=3G5.5?_L2.<`,$CM`P#_\"9M__`@;?_T0I!@``"$4HL0$W(@L`%G]G()9 XML`%G\'(*L`%GZDH39W8@;?_T(!`B`.6!(&T`"-'!)$@@;?_T4I!P(K`39B8@N XM2U*+)(LO2``(8`)2BTH39P9P(K`39O1*$V8&)*\`"&`V0AM@)"2+8`)2BTH3T XM9Q00$W(@L`%G#'()L`%G!G(*L`%FYDH39Q!"&R!M__0,D````"!M`/]T3-\,J XM`$Y=3G5.5?_T2.<A,B9(*TG_]'X`(#P```$$3KH*=B1`2H!G0B(+=/XL;!0X< XM3J[_K"9`(`MG*B`+(@`D"DZN_YI*@&<00^H`A"QM__0LV2S9+-E^`2`+(@`L> XM;!0X3J[_IB!*3KH*4B`'3-],A$Y=3G5.5?_X+PLK0/_X!(```=3`9PAR"I"!" XM9QA@+$AL!RI(;`KN2&P1.$ZZ"C1/[P`,8#Q(;`<J2&P+&DAL$3A.N@H>3^\`N XM#&`F1^P'+F`,(%-A`.W280#N'%B+""P````/9@1*DV;H<``B`&$`Y1!![!$X] XM80#ML'!X<A1A`.4`)E].74YU3E7_X$CG#S(F2"M!_^@N`"P'4H9Z`2('Y8$@[ XM2]'!*T#_Y"](`!P@4$ZZ$B8H`&``!5`B;P`<(%'1Q21(<``0$@1``#!M``4J- XM#$``2VP`!2+00#`[``9.^P`$!08%!@4&!08%!@4&!08%%`44!10%%`44!10%@ XM%`44`)0%%`">`*H`\@#\`0@!$@%6`6`!:@44`70!@`',`=8"7`+B`NX#!`,64 XM`R`%%`,J`S8#0`.>`_0%%`44!10%%`44!10$``0*!!0$(`0J!#0%%`0^!$@%S XM%`12!&($;`1V!(`$B@24!)X$I@2N`)0$M@44!+X%%`3^<`!A`/Z*8``$A@"L5 XM`<`````,8``$>DHJ``%G$D'J``%#[``H80#RG"H$8``$8BX&4H<@+?_HL(=LC XM#AE2!RH@/``!U,IA`/Y((`;E@"!S"`!#[``H80#R;"P'8``$,@CL``,`#&``T XM!"@`K``#````#&``!!P(K``!``]@``022BH``6<,0>H``2E(!X8J!&`F+@92M XMAR`M_^BPAVP.&5('*B`\``'4RF$`_>8@!N6`*7,(``>&+`<`K`(``"``#&``P XM`\X([``'``Q@``/$".P`!@`.8``#N@CL``<`#F```[``K"```"``#&```Z1*) XM*@`!9Q!!Z@`!0^P`(&$`\<8J!&`L+@92AR`M_^BPAVP.&5('*B`\``'4RF$`9 XM_70@!N6`(',(`$/L`"!A`/&8+`<([``$``]@``-8".P`!0`-8``#3DHJ``%G8 XM,D'J``%#[`O<80#\T$J`9AXB;P`<(%'1Q4/H``%P_R!)80#C$"`L`"1R%&$`2 XMXI0J!&!$+@92AR`M_^BPAVP.&5('*B`\``'4RF$`_/P@!N6`)$O5P"!20^P+E XMW&$`_'Y*@&82</\@4F$`XLH@+``D<A1A`.).+`<([``#``U@``+(2BH``6<R= XM0>H``4/L"]!A`/Q*2H!F'B)O`!P@4='%0^@``7#_($EA`.**("P`)'(480#BI XM#BH$8$0N!E*'("W_Z+"';`X94@<J(#P``=3*80#\=B`&Y8`D2]7`(%)#[`O0' XM80#[^$J`9A)P_R!280#B1"`L`"1R%&$`X<@L!PCL``(`#6```D(`K```""``L XM#&```C:3R2QX``1.KO[:($`A;`OP`+A@``(@*7Q_____`"`([``$``]@``(.6 XM".P``0`-8``"!`CL``4`#F```?H`K$```"``#&```>X([``#`!-@``'D2BH`T XM`6<00>H``4/L`#!A`/`&*@1@+"X&4H<@+?_HL(=L#AE2!RH@/``!U,IA`/NTM XM(`;E@"!S"`!#[``P80#OV"P'("P`,'(,L(%M"@R````!+&\``8Y"K``P8``!X XMADHJ``%G$$'J``%#[``L80#OJ"H$8"PN!E*'("W_Z+"';`X94@<J(#P``=3*T XM80#[5B`&Y8`@<P@`0^P`+&$`[WHL!PRL````!``L;``!.$*L`"Q@``$P`*P`4 XM`(`"``Q@``$D".P`!@`-8``!&@CL``(`$V```1!P4-"`@:P`#&```00(K``#T XM``]@``#Z&7P`90;P8```\`BL``(`#V```.8([`````Q@``#<".P`!P`-8```8 XMTG`#*4`,(`CL``4`#&```,(([``%``]@``"X".P`!``-8```K@CL``8`#V``= XM`*0([``!``Q@``":".P`!``,8```D`CL``4`$V```(8([``!``Y@?'`!*4`,* XM(&!T<`(I0`P@8&P([``"``Q@9$HJ``%G#$'J``$I2!+T*@1@)BX&4H<@+?_H- XML(=L#AE2!RH@/``!U,IA`/HZ(`;E@"ES"``2]"P'".P`!``.8"0([``&`!-@\ XM''``$!)R,)"!*4``&&`.&5('*B`\``'4P&$`^@)2A;J$;0#ZKB`&3-],\$Y=< XM3G5.5?]L2.<A,BM(_W"3R2QX``1.KO[:)D`I:P"X"_!P_R=``+A(;?]X(&W_` XM<$/M_W1A`/B<6$\L;!0X3J[_RBE`"^Q.KO_$*4`+Z"(`3J[_*$J`9Q0@+`OL@ XM(@!.KO\H2H!G!@CL``$`#R`\```!!$ZZ`Z`I0``$9@IP9T'L!R=A`-]:<"1.7 XMN@.**4``"&8*<&=![`<G80#?1'X!<``I0`P`*4`+]"E`"_PI0`OX*4`,""E`L XM#`0@:P"80^P,B$ZZ"FR^K?]T;'`@!^6`0>W_>-'`(E!P+;`19EYP`L"L``P`N XM0``,*4``#$*L`!!![`7B*4@'ABE\?____P`@(`?E@$'M_W@B2-/`)%%**@`!J XM9@12AV`D(`<B+?]T80#Y5BX`OJW_=&P2(`?E@$'M_WC1P")0<"VP$6?$("P`S XM$`)`__X"0/_]`D#_[RE``!!P`!E`$`P90`[@OJW_=&P``3X([`````X@!^6`Y XM0>W_>-'`+T@`%$'L#;0B;P`4(E%.N@M\4H=![`VT3KH&JDJ`9UI![!`,0^P-E XMM$ZZ"3!![`[@0^P0#$ZZ"U9![`VT(DA.N@C<0>P-M$ZZ!GQ*@&<60>P.X$/L1 XM#;1.N@D"0>P-M")(3KH(N@@L``,`$V8:".P``@`.".P````38`P(K``"``X(# XMK````!-![`[@3KH*R'(?L(%N#D'L$`Q.N@JZ<A^P@6\@(#P``=340>P')V$`9 XMW<`(+``%`!-G``',<'AR%&$`W3Q![`VT3KH%_$J`9R@@!^6`0>W_=-'`(#P`O XM`=3>(%!A`-V,""P`!0`39P`!F'!X<A1A`-T(0>P-M"((=/XL;!0X3J[_K"E`K XM``!F)G#_0>P-M&$`W5H(+``%`!-G``%F("P`)'(480#<U&`&*6L`F```<#I!? XM[`VT3KH(<DJ`9@P@;```0^P-M$ZZ"'1![`VT*4@2\!`L#N!*`&8,<BH900[@6 XM<``90`[A$"P0#$H`9@IR*AE!$`Q"+!`-$"P0#'(NL`%G$!`L#N"P`6<($"P-: XMM+`!9@8([``&``T@+``<L*P`(&<,(&P``$/L#;1A`/(T2JP``&<6""P````.G XM9PX@+```(@`L;!0X3J[_ID*L``!A`.4@""P````/9@``J+ZM_W1L(`@L``8`Q XM#F88""P``0`39A`(+``$`!-F"$'L!R9A`.3(OJW_=&UZ""P`!0`.9W(@+`OT: XM<@&P@6=H2JP,`&=B2H!G.D'L!OYA`.7"0>P&=V$`Y'!![`;Q80#ELB\L#`@O[ XM+`P$+RP+_"\L"_A(;`8.2&P1.$ZZ`(9/[P`88!PO+`P(+RP,!"\L"_Q(;`9#: XM2&P1.$ZZ`&A/[P`40>P1.&$`Y"*^K?]T;`H(+`````]G`/S"<``B`&$`VV),4 XMWTR$3EU.=4CG(`)8@"0`<@`L>0````1.KO\Z2H!G!BQ`+,(@#DS?0`1.=2\.H XM0^C__"`1+'D````$3J[_+BQ?3G5.50``2.?@\B!M``Q#[0`01?D``"9N)FT`9 XM""QY````!$ZN_?9,WT\'3EU.=1;`3G5.5?_42.<X(BM(__@K2?_\+&P4.$ZN@ XM_\HB`$ZN_RA*@&<H3J[_Q"(`3J[_*$J`9QJ3R2QY````!$ZN_MH@0"MH`*3_E XM]$JM__1F"'(7=$U@``%$>`!P`"!`3KD``"AR*T#_[&<``3QP1$ZY```F""M`R XM__!G``"$)&W_[")`(&W_]'`!3KD``"@:+&P4.$ZN_\0B`'8$0>P'(B0(+&P4? XM.$ZN_]`,@`````1F```L)#P``"<03J[_RB(`3J[_-$J`9P``%DZN_\HB`'80& XM0>W_V"0(3J[_UB@`)&W_[")M__`@;?_T<`!.N0``*!H@+?_P9P@@0$ZY```F5 XM+"`M_^QG``"B3KD``"C\#(0````);P``DD7M_]@,*@`[``1F``"$##(`<D#_) XM9@``>EI*<@`2&@1!`#`,$@`[9QK"_``*TAH$`0`P#!(`.V<*POP`"M(:!`$`= XM,%)*=``4&@P"`"!G``!"#`(`.V<``#H,`@!R9P``,@0"`#`,$@`@9QK$_``*' XMU!H$`@`P#!(`(&<*Q/P`"M02!`(`,"!M__P@@2!M__@@@DS?1!Q.74YU2.<`P XM-B9(*DE![0`4*T@`"D'M```K2``4*TH`&"M\```#X@`<2D!G```,*WS_____@ XM`"A@!$*M`"@@2R)-+'D````$3J[^DB!*3J[^@"!*3J[^C$S?;`!.=4CG!28JD XM2"H`</\L>0````1.KOZV#(#_____9@9P`&```&0N`'`B3KD``"8(2H!F#"`'Z XM3J[^L'``8```2B1`)4T`"A5%``D5?``$``@5?`````X51P`/D\E.KO[:)4``# XM$+O\`````&<*(DI.KOZ>(`I@$D'J`!0@B%B00J@`!"%(``@@"DS?9*!.=4CG1 XM``8J0"QY````!$JM``IG!B)`3J[^F!M\`/\`""M\_____P`4<``0+0`/3J[^& XML"!-3KD``"8L3-]@`$YU3E4``$CG'S(F22)(?DXJ$6T``,"*_`6U(`5(Q>6-8 XMWH5(0#H`2D5G&#P\`6TP!P)```-F`E)&ND9M!II&4H=@Y'@`?`!214'L!=8<T XM,$``#$0``68*,`<"0``#9@)21KI&;PJ:1E)$#$0`#&W>#(<```!C;P@$AP``[ XM`&1@\"`I``B`_``R2,`O`"`I``0B`(#\`#QV`#8`P/P`/))`+P$O`TAL!<0O5 XM+0`(3KD``"9"3^\`%"\%4D0O!"\'2&P%LB\+3KD``"9"3^\`%$S?3/A.74YUL XM0^P%J2!M``A.N0``+O!#[`6@($M.N0``+O!@W'``$!AG#@P``"IG!@P``#]F8 XM\'`!3G5.5?_`2.<P,"0L``PD2"9)0>W_P$/M_\1V`$H29@9*$V<``)X,$P`J5 XM9D(,0P!`9P``E"&+,``CBC``4$-22V#:44,@"$I#;0P@<3@`2A!F!%%#8/!*2 XM0VUL($`F<#``4DM2L3``)'$X`%!#8*X,$P`_9@I*$F8Z2D-G2F#$$!(2$P@"] XM`!5G(`P``$!C"@P``%IB!`8``"`,`0!`8PH,`0!:8@0&`0`@L@!G!DI#9Q9@^ XMD$H29P)22DH39P922V``_UQP`6`"<`!,WPP,3EU.=4CG,"`D`"8L``P(`P`1D XM9R(@*``$L*D`!&T&9Q9P`&`"<`$(`P`09P``G@A```!@``"6"`,`!F8``()*& XM0F9`0>@`"$/I``A*$&<N$AD0&`@#`!1G(`P!`$!C"@P!`%IB!`8!`"`,``!`O XM8PH,``!:8@0&```@L@!GSI`!;CI@/%-"9@X@*`!\L*D`?&TJ;BQ@KE-"9A9!. XMZ`"$0^D`A$ZY```KV$J`;1!N$F"4("@``+"I``!GBFT$<`%@`G``"`,`"6<$F XM"$```$S?!`Q.=2`H``"0J0``9A0@*``$D*D`!,'\"[C0J``(D*D`"$YU2.<@= XM-B0L#"`F2"1)*FL``$JM``!G&B)J``@@;0`((`).N0``*PQ*0&8&*FT``&#@P XM($LB2B1M``0L>0````1.KO\63-]L!$YU2.<`-B1()DE.N0``"=Y*@&<D*D`@1 XM/````00B;0`(($LL>0````1.KOV0(DT@2DZY```K^'`!3-]L`$YU<`!.=2\*O XM<``D24H99OP2(0P!`#IG'`P!`"]F$+/*9Q(,*0`O__]G"E-)8`:SRF+>8`JSV XMRF4&$-I20&#V0A`D7TYU+PIP`"1)2AEF_!(A#`$`.F<,#`$`+V<&L\IB[F`"_ XM4DD0V6<$4D!@^"1?3G53@&T$$-EF^$(0(`A.=;/(90S0P-+`$R!30&[Z8`82; XMV%-`;OI.=;`09PI*&&<"8/9P`$YU(`A.=4CG/3(F""1)0A)Z`"`\```!!$ZYU XM```F""X`9P``E"QL%#A*@V=.(@,D!TZN_YI*@&=^(D<,*0`@``AE'DH29PQ#L XM[`:#($I.N0``+>XB1T/I``@@2DZY```M[B@#(@-.KO\N)@!*168$>@%@MB($Y XM3J[_IF"N(D<,*0`@``AD#D/L!H4@2DZY```M[F`J<"\@2DZY```M$$J`9P@@= XM0!"\`#I@%$/L!H$@2DZY```NX&`&0A)V`&`"=@%*AV<(($=.N0``)BP@`TS?& XM3+Q.=4CG`3`F221(($M.N0``+K@N`"!*3KD``"ZX4D`B2M+'($I.N0``+/@P_ XM!R)*($M.N0``+/A,WPR`3G4,``!A;0H,``!Z;@0$```@3G4``$Y5__Q(YP,P& XM)D@D22X`2H=G,DH39RY*$F<J<``0&TZZ_\QR`!(:+T``$"`!3KK_OB(O`!"2V XM@"P!2H9G!"`&8!I3AV#*2H=G$$H39P1P`6`*2A)G!'#_8`)P`$S?#,!.74YUD XM```B"&`$$-EG"%.`9/A@!D(84X!D^B`!3G4@"$H89OQ32)'`(`A.=0``$ABR) XM&68(2@%F]G``3G5N!'#_3G5P`4YU(`A*&&;\4X@0V6;\3G4``$CG`#`F2"1)( XM$!H6@$H`9P12BV#T(`M,WPP`3G5.5?_X2.<!,"9()$E^`$H39RHK2O_\(&W_( XM_$H09PP0$+`39P92K?_\8.P@;?_\2A!F!"`'8`A2AU*+8-(@!TS?#(!.74YUN XM3E7_^$CG`3`F2"1)?@!*$V<B*TK__"!M__Q*$&<0$!"P$V8$(`=@#E*M__Q@^ XMZ%*'4HM@VB`'3-\,@$Y=3G5(YP`P)D@D22!+(DIA`/]N3-\,`$YU2.<`,"9(* XM)$D@2R)*89Y,WPP`3G4``$CG`Q`N`$?L"UP@"V<P""L``@`;9B0(*P`!`!MG9 XM'"`K``20JP`0+`!*AF<.("L`'"(&(&L`$$ZZ_(@F4V#,(`=.N@#V3-\(P$YU= XM``````````!P84CG,``D`"8!2$)(0\3!QL#`P=1#2$)"0M""3-\`#$YU2H!J! XM```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`G XM3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O3 XM`W80#$$`@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&4 XMXYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(A XM0^>X2$#!028?)!].=4CG!P`N`"`L"UA3@"P`2D9K+B`&2,#G@$'L$O@J,`@`@ XM2@5G&`@%``1F$B`&2,#G@$'L$O@@,`@$3KK[3E-&8,X@!TZZS^1,WP#@3G4`' XM```````````````@B%B00J@`!"%(``A.=0``(`@0V6;\3G4```/L````(0``X XM`````"X$```M^@``+<P``"Q*```J(@``*A8``"X>```N$@``+>(``"VT```M] XMJ```+7@``"UJ```M-@``+'```"P:```KJ@``*?P``"GD```I,```*)H``"=TF XM```G9@``)U@``";V```FW```)LP``"94````V@```1````#R```!!@```20`? XM```!`````0````8````````#\@```^H```,7````````````````````#```0 XM``````````````````!_____`````````````````````)LS,VUL<R!V-"XPQ XM:YLP;2`@J2!#;W!Y<FEG:'0@($MI;2!%+B!$959A=6=H;B`@,#4O,3$O.3`@Y XM(%MN;VXM:R!R979S.B!*+B!-8T-O<FUI8VM="@!U<V%G93H@;',@6R!;+6]P? XM=&EO;G,@/&%R9W,^72`@6VYA;65S72!=("XN+@H`("!A("!3:&]W(&1O="!F] XM:6QE<R`@("`@("!S("!3;W)T(&)Y('-I>F4@("`@("`@("`@($T@($EG;F]RJ XM92!C87-E('<O=VEL9&-A<F0*`"`@8B`@4VAO=R!D871A(&)L:W,@("`@("`@D XM="`@4V]R="!B>2!D871E("`@("`@("`@("!.(#QN86UE/B!3:&]W(&YE=V5R` XM('1H86X*`"`@8R`@4VAO=R!F:6QE;F]T97,@("`@("`@=2`@57-A9V4@(%MA( XM;'-O("T_72`@("`@("!/(#QN86UE/B!3:&]W(&]L9&5R('1H86X*`"`@9"`@1 XM4VAO=R!D:7)S(&]N;'D@("`@("`@=B`@5F%R:2!C;VP@<VAO<G0@;&ES="`@' XM("!0("!3:&]W(&9U;&P@<&%T:&YA;65S"@`@(&4@($5X96-U=&4@8FET(&ES" XM(")E(B`@('@@/'!A=#X@17AC;'5D92!F:6QE<R`@("`@42`@4F5Q=65S=&5R. XM<R!E;F%B;&5D"@`@(&8@(%-H;W<@9FEL97,@;VYL>2`@("`@('H@($]V97)R, XM:61E(&)L:R!C86QC("`@("`@4B`@4F5C=7)S:79E(&QI<W1I;F<*`"`@:"`@4 XM4VAO=R!H:61D96X@9FEL97,@("`@02`@4VAO=R!A;&P@(%L]("UA:&E=("`@O XM("!3("!3:&]W(&1I<G,@9FER<W0*`"`@:2`@4VAO=R`J+FEN9F\@9FEL97,@9 XM("`@0B`\8FQK/B!&;W)C92!B;&L@<VEZ92`@("!4("!4;W1A;',@9F]R(&%L7 XM;"!E;G1R:65S"@`@(&L@(%-O<G0@8GD@9&ES:R!K97D@("`@($,@(%-I;F=LR XM92!C;VQU;6X@;&ES="`@("`@5B`@4VAO=R!R96P@<&%T:&YA;65S"@`@(&P@@ XM($QO;F<@;&ES=&EN9R`@("`@("`@($0@(%-H;W<@9&ER<R!L87-T("`@("`@U XM("`@5R`@3F\@8V]N=&5N=',@*'=I;&0@9&ER*0H`("!M("!-:7AE9"!C87-EL XM(&]U='!U="`@("!%("!.;R!!3E-)(&5S8V%P92!C;V1E<R`@(%@@/'=I9&4^8 XM(%-E="!O=71P=70@8V]L<PH`("!N("!.;R!S;W)T("`@("`@("`@("`@("!'2 XM("!.;R!S=6)D:7(@=&]T86QS("`@("`@(%D@/&AI9V@^(%-E="!O=71P=70@- XM<F]W<PH`("!O("!/;&0@;&]N9R!L:7-T(&9M="`@("!(("!.;R!H96%D:6YGK XM<R`@("`@("`@("`@(%H@($9O<F-E($%.4TD@<V5Q=65N8V5S"@`@('`@($%P> XM<&5N9"`B+R(@=&\@9&ER<R`@($D@($YO('!A9V4@<')O;7!T<R`@("`@("`PW XM+38@1&%T92!F;W)M870@*&YE=R!L;VYG*0H`("!Q("!1=6ET(&]N(&YO="!F' XM;W5N9"`@("!+("!3:&]W(&1I<VL@:V5Y<R`@("`@("`@("T@($YE>'0@87)G/ XM(&ES(&9I;&5N86UE"@`@('(@(%)E=F5R<V4@<V]R="`@("`@("`@($P@/&X^1 XM($QI;6ET960@<F5C=7)S:6]N"@`@($8@/&9O<FUA=#X@1F]R;6%T(&]U='!U[ XM="!;+6\@9FUT72`H9&5F875L=#H@(@`B*0H`,#`M,#`M,#``,#`Z,#`Z,#``; XM)3`R;&0M)3`R;&0M)3`R;&0`)3`R;&0Z)3`R;&0Z)3`R;&0`'QP?'A\>'Q\>I XM'QX?)7`@)60@)70@)31B("4X<R`E;EQN`````````````````````````"5LL XM9`!$:7)S.B`E+31L9"!&:6QE<SH@)2TU;&0@0FQO8VMS.B`E+35L9"!">71E- XM<SH@)2TX;&0*`"`@("`@("`@("`@1FEL97,Z("4M-6QD($)L;V-K<SH@)2TU4 XM;&0@0GET97,Z("4M.&QD"@`*5&]T86QS.@H`.@`O`%)!33H```!*86X`1F5BC XM`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V`$1E8P````:*\ XM```&C```!I````:4```&F```!IP```:@```&I```!J@```:L```&L```!K0`B XM``:X>)LP;0";,"!P`)L@<`";,S-M`)LQ.S,S.S0P;0";,3LS,3LT,&T`FS<[? XM,S-MFS`@<`";,"!Q"@`````````````T````B0```+<```$&```!5````:(`' XM``'N```".0```H,```++```#&@```V4```.T```$`@``!%````2=```$[```C XM!3D```5L```%X@``!9P````````%XCH`;',Z($]U="!O9B!M96UO<GD*```EF XM<SH@1FEL92!O<B!D:7)E8W1O<GD@:6X@=7-E"@`E<SH@3F\@<W5C:"!F:6QES XM(&]R(&1I<F5C=&]R>0H``"!&:6QE<WES=&5M(&YO="!V86QI9&%T960*```@N XM1&5V:6-E(&YO="!M;W5N=&5D(&]R(&%S<VEG;F5D"@``($EN=F%L:60@9FEL8 XM97-Y<W1E;2!F;W)M870@6VYO;BU$3U-="@`@1&5V:6-E(&5M<'1Y"@``;',Z5 XM($1I<F5C=&]R>2!O<B!F:6QE;F%M92!P871T97)N('1O;R!L;VYG"@`E<SH@3 XM56YA8FQE('1O('!A='1E<FX@;6%T8V@@<&%T:',*``!L<SH@)7,Z($5R<F]RD XM("T@)6QD"@``)7,@)3)L9"`E-6QD```E<R`E,FQD("4P,FQD.B4P,FQD````\ XM)7,@)3`R;&0@)31L9"`@)3`R;&0Z)3`R;&0Z)3`R;&0``"4P,FQD+25S+24PO XM,FQD("4P,FQD.B4P,FQD.B4P,FQD```E,#)L9"TE,#)L9"TE,#)L9"`E,#)L- XM9#HE,#)L9#HE,#)L9````"4P,FQD+R4P,FQD+R4P,FQD("4P,FQD.B4P,FQDQ XM.B4P,FQD````)3`R;&0O)3`R;&0O)3`R;&0@)3`R;&0Z)3`R;&0Z)3`R;&0`- XM```E,#)L9"XE,#)L9"XE,#)L9"`E,#)L9#HE,#)L9#HE,#)L9``````````*$ XM;',Z('=A<FYI;F<@*"5L9"DZ(&)L;V-K(&-O=6YT*',I(&UA>2!B92!I;F%C0 XM8W5R871E("T@<V5E(&QS+F1O8PH*`"`@```@8P``("4V;&0`("4U;&0@)3ALF XM9"`@```@(```+P`O``H`(B5S(@H`FS!MFR!P*BI"4D5!2PH``"!-;W)E("@EX XM;&0@;V8@)6QD*2`N+BX@`$UO<F4@+BXN(`";,"!PFT:;2P``(``O*B`E<R`J' XM+PH`8VAS<&%R=S=D`#``,0!$:7(`*BYI;F9O```N*@``3F\@;6%T8V@N"@``* XM=&]T86P@,`H``&QS.B!$979I8V4@96UP='D@;W(@;F]T(&UO=6YT960*``!L: XM<SH@17AA;6EN92!F86EL960@+2!);T5R<B`E;&0*`#H*``!L<SH@:6QL96=AQ XM;"!O<'1I;VX@+2T@)7,@("`@6RUU(&9O<B!U<V%G95T*`&QS.B!R97%U:7)E- XM9"!A<F<@;6ES<VEN9R!O;B!O<'1I;VX@+2T@)7,@("`@6RUU(&9O<B!U<V%GT XM95T*````````*```"WX`````````````````````````````````````````] XM``N@````````````````````````````````````````````````````````K XM````````````````````````````````````)0``!X8```=^```'>@``!W8`U XM``=R```';@``!VH```=F```'8@``!UX```=:```'5@``!U(```=.```'2@``7 XM!T8```="```'/@``!SH```<V```',@``!RX```;L```&Z```!N0```;@```&] XMW```!M@```;4```&T```!LP```;(```&Q```!L````:\```+?@``"UP```/L[ X(`````````_+4) X`` Xend Xsize 16028 END_OF_FILE if test 22474 -ne `wc -c <'ls.uu'`; then echo shar: \"'ls.uu'\" unpacked with wrong size! fi # end of 'ls.uu' fi if test -f 'src/ls.c.ab' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/ls.c.ab'\" else echo shar: Extracting \"'src/ls.c.ab'\" \(20364 characters\) sed "s/^X//" >'src/ls.c.ab' <<'END_OF_FILE' X XGOODRET: X FreeAllFibs (fibhead); X return (dirhead); X XBADALLOC: X FreeAllFibs (fibhead); X FreeAllFibs (dirhead); X return (0L); X} X X X/* -------------------------------------------------------------------- X * Given a directory name and a lock on that directory, create a list X * of entries. Recursively decends into subdirectories if flaged. X * -------------------------------------------------------------------- */ XVOID DirIt (curlock, dirname) X struct FileLock *curlock; X BYTE *dirname; X{ X BYTE *matchpath; X BYTE *subdir; X LONG dnamlen; X LONG errcode; X LONG len; X LONG tmpflags; X BYTE tmpdpat[MAXFNLEN+2]; X BYTE tmpfpat[MAXFNLEN+2]; X struct FibEntry *tfibp; X struct FileLock *sublock; X struct List *fibheadp; X X/* Try to fill FileInfoBlock, bomb if not readable for some reason */ X if (Examine((BPTR)curlock, GFibp) == 0) X { X if ((errcode = IoErr()) == ERROR_DEVICE_NOT_MOUNTED) X asprintf(workstr, "ls: Device empty or not mounted\n"); X else X asprintf(workstr, "ls: Examine failed - IoErr %ld\n", errcode); X WSTR(workstr); X return; X } X X recurlevel++; X X/* Put directory header for each listing, if headers on and we know the name */ X if ((GFibp->fib_DirEntryType > 0) && ((LSFlags & NOHEADERS) == 0) && (dirname[0] != 0)) X { X /* Put directory header for each listing, if recursive and not top dir */ X if ((recurlevel > 1) && (strcmp(dirname, thePath) != 0)) X { X strcpy(workstr, dirname); X X len = 0; X if ((LSFlags & FULLPATHNAMES) == 0) X { X if ((strnicmp(initialpath, thePath, strlen(thePath)) == 0) || X (strnicmp(thePath, initialpath, strlen(initialpath)) == 0)) X { X if (strlen(thePath) <= strlen(initialpath)) X matchpath = thePath; X else X matchpath = initialpath; X len = strlen(matchpath); X if ((strnicmp(workstr, matchpath, len) == 0) && (len < strlen(workstr))) X { X if (*(workstr + len) == '/') X len++; X } X else X len = 0; X } X } X strcat(workstr, ":\n"); X X SetConPen(penstr3); X WSTR(workstr + len); X SetConPen(penstr0); X } X } X X/* If this is a single file list it verbosely */ X if (GFibp->fib_DirEntryType < 0) X { X if ((LSFlags & SHOWFILES) != 0) X { X GetPathString(thePath, thePath); X fixNumBlocks(curlock, GFibp); X X if ((LSFlags & OLDLONGFORMAT) != 0) X LListEntry(GFibp); X else X llistentry(GFibp); X X gfilecount++; gitemcnt++; X gtotblocks += blkalloc(GFibp); X gtotbytes += GFibp->fib_Size; X X LSFlagsX |= SINGLEFILEFLAG; X } X } X else /* It is a directory entry */ X { X tmpflags = LSFlags; X if ((LSFlags & WILDPATH) != 0) X LSFlags |= SEPFILESDIRS | FILESFIRST; X X /* Allocate, fill, and display a dir of entries, check for no ram or abort */ X if ((fibheadp = GetDir (curlock, GFibp)) != 0) X { X X /* Recursively descend any subdirs in this list, if wanted or a wild path */ X LSFlags = tmpflags; X if (((LSFlags & LISTALL) != 0) || ((LSFlags & WILDPATH) != 0)) X { X LSFlags &= ~WILDPATH; X for (tfibp = (struct FibEntry *)fibheadp->lh_Head; X tfibp->fe_Node.mln_Succ != 0; X tfibp = (struct FibEntry *)tfibp->fe_Node.mln_Succ) X { X TestBreak (); X if ((LSFlags & BREAKFLAG) != 0) X break; X X if (tfibp->fe_Fib->fib_DirEntryType > 0) X { X /* Alloc length of path + 1 + newdir name +1 + length of maxname + 1 for NULL X * + 1 for null + 3 for rounding. X */ X dnamlen = (LONG)(strlen (dirname) + strlen (tfibp->fe_Fib->fib_FileName) + 36); X if ((subdir = myalloc ((LONG)dnamlen)) != 0) X { X if (dirname[0] != 0) X { X (VOID) stpcpy (subdir, dirname); X dnamlen = strlen (dirname) - 1; X if (dirname[dnamlen] != ':' && dirname[dnamlen] != '/') X { X (VOID) strcat (subdir, SlashStr); X } X } X (VOID) strcat (subdir, tfibp->fe_Fib->fib_FileName); X X if ((recurlevel != recurlimit) && X ((sublock = (struct FileLock *)Lock(subdir, (LONG)ACCESS_READ)) != 0)) X { X if ((LSFlags & NOHEADERS) == 0) X WCHR(NLine); /* Put a blank line between directories */ X X curpath = subdir; X X if ((LSFlagsX & WILDPATHFLAG) != 0) X { X strcpy(tmpdpat, theDirPat); X theDirPat[0] = '*'; theDirPat[1] = '\0'; X strcpy(tmpfpat, theFilePat); X theFilePat[0] = '*'; theFilePat[1] = '\0'; X } X X DirIt(sublock, subdir); /* Recurse into this subdirectory */ X X if ((LSFlagsX & WILDPATHFLAG) != 0) X { X strcpy(theDirPat, tmpdpat); X strcpy(theFilePat, tmpfpat); X } X X UnLock((BPTR)sublock); /* Unlock our sublock */ X } X myfree(subdir); /* Free the current namespace */ X } X } X } X } X LSFlags = tmpflags; X /* Free up this fib list */ X FreeAllFibs(fibheadp); X } X LSFlags = tmpflags; X } X recurlevel--; X} X X X/* -------------------------------------------------------------------- */ XVOID GetCLIArgs (line, argc, argv) X BYTE *line; X LONG *argc; X BYTE **argv; X{ X BYTE **pargv, *qarg; X X *argc = 0; X while (*argc < MAXARG) X { X while (*line == ' ' || *line == '\t' || *line == '\n') X line++; X if (*line == 0) X break; X pargv = &argv[*argc]; X *argc += 1; X X if (*line == '"') X { X qarg = line; X line += 1; X *pargv = line; /* ptr inside quoted string */ X while (*line != 0 && *line != '"') X line++; X if (*line == 0) /* Hit end of string without quote! */ X { X *pargv = qarg; /* Must be okay */ X break; X } X else X *line++ = 0; /* terminate arg ontopof quote */ X } X else /* non-quoted arg */ X { X *pargv = line; X while (*line != 0 && !(*line == ' ' || *line == '\t' || *line == '\n')) X line++; X if (*line == 0) X break; X else X *line++ = 0; /* terminate arg */ X } X } /* while */ X} X X X/* -------------------------------------------------------------------- */ XLONG GetFileDate(name, ptime) X char *name; X struct DateStamp *ptime; X{ X LONG status; X struct FileLock *flock; X struct FileInfoBlock *fib; X X status = 0; X if ((fib = myalloc ((LONG)sizeof(struct FileInfoBlock))) != 0) X { X if ((flock = (struct FileLock *)Lock(name, (LONG)ACCESS_READ)) != 0) X { X if (Examine((BPTR)flock, fib) != 0) X { X *ptime = fib->fib_Date; /* Copy the Date structure */ X status = 1; X } X UnLock((BPTR)flock); X } X myfree(fib); X } X return(status); X} X X X/* -------------------------------------------------------------------- X * Trap for bad args, and/or explain how to use. X * -------------------------------------------------------------------- */ XVOID Usage(errcode) X LONG errcode; X{ X LONG i; X X switch(errcode) X { X case ILLEGAL_ARG: X asprintf(workstr, "ls: illegal option -- %s [-u for usage]\n", badopt); X break; X case MISSING_ARG: X asprintf(workstr, "ls: required arg missing on option -- %s [-u for usage]\n", badopt); X break; X default: X for (i = 0; ((LSFlags & BREAKFLAG) == 0) && (usagestrs[i] != 0); TestBreak(), i++) X WSTR(usagestrs[i]); X cleanup(0, 0); X } X WSTR(workstr); X cleanup(120L, 20L); X} X X X/* -------------------------------------------------------------------- */ XLONG ParseCmdOptions(ncnt, argc, argv) X LONG ncnt, argc; X BYTE **argv; X{ X LONG i, cnt, len; X struct Process *procp; X X cnt = ncnt; /* Current arg number that contains the options */ X ncnt += 1; /* Advance to next arg */ X X for (i = 1, len = strlen (argv[cnt]); i < len; i++) X { X switch (argv[cnt][i]) X { X case '?': X case 'u': X Usage(SYNTAX); X break; X case 'A': X LSFlags |= MATCHDOTFILES | MATCHINFOFILES | SHOWHIDDEN; X break; X case 'B': X if (argv[cnt][i+1] != 0) /* Blocksize tail of same arg? */ X { X (VOID) GetDecNum(&argv[cnt][i+1], &blksize); /* Yes */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required blocksize number */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X (VOID) GetDecNum(argv[ncnt], &blksize); X ncnt += 1; /* Bump arg counter */ X } X break; X case 'C': X LSFlags |= ONECOLFORMAT; X break; X case 'D': X LSFlags |= SEPFILESDIRS | FILESFIRST; X break; X case 'E': X LSFlags &= ~CONSOLE; X break; X case 'F': X if (argv[cnt][i+1] != 0) /* Format string tail of same arg? */ X { X thefmtstr = &argv[cnt][i+1]; /* Yes */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required format string */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X thefmtstr = argv[ncnt]; /* Else our format string is the next arg */ X ncnt += 1; /* Bump arg counter */ X } X LSFlags |= LONGLIST | OLDLONGFORMAT; X break; X case 'G': X LSFlags |= NODIRTOTAL; X break; X case 'H': X LSFlags |= NOHEADERS; X break; X case 'I': X LSFlags |= NOINTERACT; X break; X case 'K': X LSFlags |= SHOWDISKKEYS | LONGLIST; X break; X case 'L': X if (argv[cnt][i+1] != 0) /* Depth limit tail of same arg? */ X { X (VOID) GetDecNum(&argv[cnt][i+1], &recurlimit); /* Yes */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required depth number */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X (VOID) GetDecNum(argv[ncnt], &recurlimit); X ncnt += 1; /* Bump arg counter */ X } X LSFlags |= LISTALL; X break; X case 'M': X LSFlags |= IGNORECASEWILD; X break; X case 'N': X if (argv[cnt][i+1] != 0) /* Filename string tail of same arg? */ X { X if (GetFileDate(&argv[cnt][i+1], &thenewdate) == 0) X { X errmsg(&argv[cnt][i+1], -1L); X cleanup(ioerrcode, 20L); X } X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required name string */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X if (GetFileDate(argv[ncnt], &thenewdate) == 0) X { X errmsg(argv[ncnt], -1L); X cleanup(ioerrcode, 20L); X } X ncnt += 1; /* Bump arg counter */ X } X LSFlags |= SHOWNEWERTHAN; X break; X case 'O': X if (argv[cnt][i+1] != 0) /* Filename string tail of same arg? */ X { X if (GetFileDate(&argv[cnt][i+1], &theolddate) == 0) X { X errmsg(&argv[cnt][i+1], -1L); X cleanup(ioerrcode, 20L); X } X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required name string */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X if (GetFileDate(argv[ncnt], &theolddate) == 0) X { X errmsg(argv[ncnt], -1L); X cleanup(ioerrcode, 20L); X } X ncnt += 1; /* Bump arg counter */ X } X LSFlags |= SHOWOLDERTHAN; X break; X case 'P': X LSFlags |= FULLPATHNAMES | LONGLIST; X break; X case 'Q': X procp = (struct Process *)FindTask(0L); X procp->pr_WindowPtr = OldWindowPtr; X break; X case 'R': X recurlimit = MAXDEPTH; X LSFlags |= LISTALL; X break; X case 'S': X LSFlags |= SEPFILESDIRS; X break; X case 'T': X LSFlags |= TOTALIZE; X break; X case 'V': X LSFlags |= RELPATHNAMES | LONGLIST; X break; X case 'W': X LSFlagsX |= NOWILDPATHDIRS; X break; X case 'X': X if (argv[cnt][i+1] != 0) /* Width tail of same arg? */ X { X (VOID) GetDecNum(&argv[cnt][i+1], &CurWinCols); /* Yes */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required width number */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X (VOID) GetDecNum(argv[ncnt], &CurWinCols); X ncnt += 1; /* Bump arg counter */ X } X if ((CurWinCols < 12) || (CurWinCols > WORKSIZE)) CurWinCols = 0; X break; X case 'Y': X if (argv[cnt][i+1] != 0) /* Height tail of same arg? */ X { X (VOID) GetDecNum(&argv[cnt][i+1], &CurWinRows); /* Yes */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required height number */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X (VOID) GetDecNum(argv[ncnt], &CurWinRows); X ncnt += 1; /* Bump arg counter */ X } X if (CurWinRows < 4) CurWinRows = 0; X break; X case 'Z': X LSFlags |= CONSOLE | NOINTERACT; /* special purpose hack - see docs */ X break; X case 'a': X LSFlags |= MATCHDOTFILES; X break; X case 'b': X LSFlagsX |= DATABLKSONLY; X break; X case 'c': X LSFlags |= NOTEFLAG | LONGLIST; X break; X case 'd': X LSFlags &= ~SHOWFILES; X break; X case 'e': X exbit = 'e'; X break; X case 'f': X LSFlags &= ~SHOWDIRS; X break; X case 'h': X LSFlags |= SHOWHIDDEN; X break; X case 'i': X LSFlags |= MATCHINFOFILES; X break; X case 'k': X sortkey = 3; X LSFlags |= SHOWDISKKEYS; X break; X case 'l': X LSFlags |= LONGLIST; X break; X case 'm': X LSFlags |= IGNORECASELIST; X break; X case 'n': X LSFlags |= NOSORTFLAG; X break; X case 'o': X LSFlags |= OLDLONGFORMAT; X break; X case 'p': X LSFlags |= ADDDIRSLASH; X break; X case 'q': X LSFlagsX |= NOTFOUNDHALT; X break; X case 'r': X LSFlags |= REVFLAG; X break; X case 's': X sortkey = 1; X break; X case 't': X sortkey = 2; X break; X case 'v': X LSFlags |= VARCOLSFORMAT; X break; X case 'x': X if (argv[cnt][i+1] != 0) /* Pattern tail of same arg? */ X { X theAntiPat = &argv[cnt][i+1]; /* Yup */ X i = len; /* Blow off rest of this arg */ X } X else X { X if (argc < (ncnt + 1)) /* Missing required pattern string */ X { X badopt[0] = argv[cnt][i]; X Usage(MISSING_ARG); X } X theAntiPat = argv[ncnt]; /* Point to pattern area */ X ncnt += 1; /* Skip over arg */ X } X LSFlags |= ANTIMATCH; /* Set flag to use antipat */ X break; X case 'z': X LSFlagsX |= NOFIXNUMBLOCKS; /* special purpose hack - see docs */ X break; X case '0': /* AGE_TO_YEARS: MMM dD HH:MM or MMM dD YYYY */ X case '1': /* FULL_FORM: MMM DD YYYY HH:MM:SS */ X case '2': /* DASHA_FORM: DD-MMM-YY HH:MM:SS */ X case '3': /* DASHN_FORM: MM-DD-YY HH:MM:SS */ X case '4': /* SLASH_FORM: MM/DD/YY HH:MM:SS */ X case '5': /* EURO_FORM: DD/MM/YY HH:MM:SS */ X case '6': /* DOT_FORM: YY.MM.DD HH:MM:SS */ X datefmt = argv[cnt][i] - '0'; X break; X default: X badopt[0] = argv[cnt][i]; X Usage(ILLEGAL_ARG); X } X } X return(ncnt); X} X X X/* -------------------------------------------------------------------- */ XVOID _main (line) X BYTE *line; X{ X BYTE *argv[MAXARG]; /* arg pointers */ X LONG argc; /* arg count */ X LONG cnt; X struct Process *procp; X X/* Prevent system request from occuring by default */ X procp = (struct Process *)FindTask(0L); X OldWindowPtr = procp->pr_WindowPtr; X procp->pr_WindowPtr = SUPPRESS_ERR_REQ; X X/* Construct list of args */ X GetCLIArgs(line, &argc, argv); X X/* Grab FileHandles for input and output to console (or redirection file) */ X ConIn = (struct FileHandle *)Input(); X ConOut = (struct FileHandle *)Output(); X X/* Is this a CLI? Set a flag */ X if ((IsInteractive((BPTR)ConOut) != 0) && (IsInteractive((BPTR)ConIn) != 0)) X LSFlags |= CONSOLE; X X/* Allocate a global FileInfoBlock for ExNext() */ X if ((GFibp = myalloc((LONG)sizeof(struct FileInfoBlock))) == 0) X errmsg(NULLSTR, ERROR_NO_FREE_STORE); X X/* Allocate a global ID for Info() */ X if ((CurID = myalloc((LONG)sizeof(struct InfoData))) == 0) X errmsg(NULLSTR, ERROR_NO_FREE_STORE); X X/* Initialize arg count, zero grand totals */ X cnt = 1; X gtotblocks = gtotbytes = gdircount = gfilecount = gentrycnt = gitemcnt= 0; X X/* Get the path of the dir we were in when invoked [NO ERROR CHECKING] */ X MakePathString((struct FileLock *)procp->pr_CurrentDir, initialpath); X X/* Parse command line arguments, if any */ X do X { X if ((cnt < argc) && (argv[cnt][0] == '-')) X { X /* Reset for next arg */ X LSFlags &= CONSOLE; X LSFlags |= SHOWDIRS | SHOWFILES; X LSFlagsX = 0; X thefmtstr = deffmtstr; X recurlimit = MAXDEPTH; X X do X { X if (argv[cnt][1] == 0) X { X cnt++; X break; X } X cnt = ParseCmdOptions(cnt, argc, argv); X } while ((cnt < argc) && (argv[cnt][0] == '-')); X } X X LSFlagsX &= ~WILDPATHFLAG; X LSFlagsX &= ~SINGLEFILEFLAG; X LSFlagsX &= ~EMPTYDIRFLAG; X X theFilePat[0] = 0; /* Terminate pattern strings */ X theDirPat[0] = 0; X X /* Is there an named path arg to do? */ X if (cnt < argc) X { X LSFlags |= PATHNAMED; /* Flag that we have a name */ X stpcpy(thePath, argv[cnt]); /* Copy this arg to work space */ X cnt++; /* Advance arg counter */ X X /* Wild pathname? Separate into components until we find a non-wild path */ X if (iswild(thePath) != 0) X { X (VOID) GetFileString(theFilePat, thePath); X (VOID) stpcpy(theDirPat, theFilePat); X (VOID) GetPathString(thePath, thePath); X X /* Still wild? First part must be wild filename to match */ X if (iswild (thePath) != 0) X { X (VOID) GetFileString(theDirPat, thePath); X (VOID) GetPathString(thePath, thePath); X } X X if ((LSFlagsX & NOWILDPATHDIRS) == 0) X { X LSFlags |= WILDPATH; X LSFlagsX |= WILDPATHFLAG; X } X } X else X { X LSFlags &= ~WILDPATH; X LSFlagsX &= ~WILDPATHFLAG; X } X X#ifdef DEBUGIT X asprintf(workstr, " thePath: %s\n", thePath); WSTR(workstr); X asprintf(workstr, " theDirPat: %s\n", theDirPat); WSTR(workstr); X asprintf(workstr, "theFilePat: %s\n", theFilePat); WSTR(workstr); X#endif X X /* Filenames and dir nodes currently limited to 30 chars under AmigaDOS */ X if ((strlen(theDirPat) > MAXFNLEN+1) || (strlen(theFilePat) > MAXFNLEN+1)) X { X errmsg(NULLSTR, PATTERN_ERR); X if ((LSFlagsX & NOTFOUNDHALT) != 0) X cleanup(120L, 20L); X else X continue; X } X X /* No wildcards allowed in the final pathname! */ X if (iswild(thePath) != 0) X { X errmsg(argv[cnt-1], WILDSPEC_ERR); X if ((LSFlagsX & NOTFOUNDHALT) != 0) X cleanup(120L, 20L); X else X continue; X } X X /* Now try to lock the dir (or file) */ X if ((CurFLock = (struct FileLock *)Lock(thePath, (LONG)ACCESS_READ)) == 0) X { X errmsg(thePath, -1L); X if ((LSFlagsX & NOTFOUNDHALT) != 0) X cleanup(ioerrcode, 20L); X else X continue; X } X } X else X { X /* X * If no filename was specified, steal Lock on current directory from X * CLI process task info. We durn well better get something useful back; X * since we don't do any error checking on the "borrowed" Lock. X */ X CurFLock = (struct FileLock *)procp->pr_CurrentDir; X } X X /* Make a full pathname string from given CurFLock if no colon in path */ X if (aindex(thePath, ':') == 0) X MakePathString(CurFLock, thePath); X curpath = thePath; X X#ifdef DEBUGIT X asprintf(workstr, "Final path: %s\n", thePath); WSTR(workstr); X#endif X X /* If there isn't a dir pattern or file pattern specified, match everything */ X if (theDirPat[0] == 0) X { X theDirPat[0] = '*'; /* "*" default matchall dir pattern */ X theDirPat[1] = 0; /* Null terminate string */ X } X X if (theFilePat[0] == 0) X { X theFilePat[0] = '*'; X theFilePat[1] = 0; X } X X /* Auto enable display of dot files, if explicitally specified as filespec */ X if ((theFilePat[0] == '.') || (theDirPat[0] == '.') || (thePath[0] == '.')) X LSFlags |= MATCHDOTFILES; X X /* Get the directory for this path, display it */ X if (recurlevel != recurlimit) X DirIt(CurFLock, thePath); X X /* Release the lock if we locked it */ X if ((CurFLock != 0) && ((LSFlags & PATHNAMED) != 0)) X UnLock((BPTR)CurFLock); X CurFLock = 0; X X TestBreak(); X if ((LSFlags & BREAKFLAG) == 0) X { X /* Still more args and previous not a single file or empty dir? Put linefeed between listing outputs */ X if ((cnt < argc) && ((LSFlags & NOHEADERS) == 0) && ((LSFlagsX & SINGLEFILEFLAG) == 0) && X ((LSFlagsX & EMPTYDIRFLAG) == 0)) X WCHR(NLine); X X if ((cnt >= argc) && ((LSFlags & TOTALIZE) != 0) && (gentrycnt != 1) && (gitemcnt != 0)) X { X if (gentrycnt != 0) X { X SetConPen(penstr3); X WSTR(TotHeaderMsg); X SetConPen(penstr0); X asprintf(workstr, totalfmtstr, gdircount, gfilecount, gtotblocks, gtotbytes); X } X else X asprintf (workstr, filefmtstr, gfilecount, gtotblocks, gtotbytes); X WSTR(workstr); X } X } X } while ((cnt < argc) && ((LSFlags & BREAKFLAG) == 0)); X X/* All done! Clean exit */ X cleanup(0, 0); X} END_OF_FILE if test 20364 -ne `wc -c <'src/ls.c.ab'`; then echo shar: \"'src/ls.c.ab'\" unpacked with wrong size! fi # end of 'src/ls.c.ab' fi echo shar: End of archive 2 \(of 4\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 4 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@cs.odu.edu>. Mail comments to the moderator at <amiga-request@cs.odu.edu>. Post requests for sources, and general discussion to comp.sys.amiga.