[comp.sources.amiga] v90i078: mailchk 2.01 - mail client for DNet, Part01/01

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (02/21/90)

Submitted-by: <lobster@quiche.cs.mcgill.ca>
Posting-number: Volume 90, Issue 078
Archive-name: comm/dnet/mailchk-2.01

[ uuencoded executable enclosed.  ...tad ]

This package contains the source and binary of a mail client for Dnet
by Matt Dillon.  Also included is the source for a mail server on the
Unix end.

The client will inform you of any new mail and will give the choice of
viewing, deleting or printing a message.

Stephane Laroche
lobster@calvin.cs.mcgill.ca

#!/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 1 (of 1)."
# Contents:  amiga amiga/bin amiga/bin/mailchk.uu amiga/client
#   amiga/client/DMakefile amiga/client/mailchk.c amiga/doc
#   amiga/doc/mailchk.doc amiga/server amiga/server/servers.h
#   amiga/version.h unix unix/doc unix/doc/smailchk.doc unix/server
#   unix/server/servers.h unix/server/smailchk.c
# Wrapped by tadguy@xanth on Tue Feb 20 20:47:07 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test ! -d 'amiga' ; then
    echo shar: Creating directory \"'amiga'\"
    mkdir 'amiga'
fi
if test ! -d 'amiga/bin' ; then
    echo shar: Creating directory \"'amiga/bin'\"
    mkdir 'amiga/bin'
fi
if test -f 'amiga/bin/mailchk.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/bin/mailchk.uu'\"
else
echo shar: Extracting \"'amiga/bin/mailchk.uu'\" \(22712 characters\)
sed "s/^X//" >'amiga/bin/mailchk.uu' <<'END_OF_FILE'
Xbegin 644 mailchk
XM```#\P`````````#``````````(```YT```!3P````$```/I```.=$[Z)JA6H
XM:65W`%!R:6YT`$1E;&5T90!3879E`%9E<G-I;VX`4F5M;W9E`$UA:6Q#:&L`A
XM3E7_\B\$0JW__"M\````*/_X&WP``?_W0JW_\DAX`"=(>@(^3KHW]%!/*4"$-
XMY$JLA.1F"DAX``%.NC2T6$]X`6```31(>``"2'H"(C`$2,#E@"!M``PO,`@`A
XM3KHEM$_O``Q*@&9$2'H"!TZZ&=983TAZ`BI.NAG,6$](>@)#3KH9PEA/2'H"?
XMADZZ&;A83TAZ`JY.NAFN6$](>@+23KH9I%A/0J=.NC1(6$](>``"2'H"V#`$6
XM2,#E@"!M``PO,`@`3KHE3D_O``Q*@&88,`1(P.6`(&T`#")P"`!4B2M)__)@P
XM``"22'@``DAZ`J$P!$C`Y8`@;0`,+S`(`$ZZ)11/[P`,2H!F"!M\``'_]V!FQ
XM2'@``DAZ`GHP!$C`Y8`@;0`,+S`(`$ZZ).I/[P`,2H!F!D(M__=@/DAX``)($
XM>@)5,`1(P.6`(&T`#"\P"`!.NB3"3^\`#$J`9APP!$C`Y8`@;0`,(G`(`%2)G
XM+PE.NA\26$\K0/_X4D0P!$C`L*T`"&T`_L1";(3H0J=(>@(*3KHVC%!/*4"$'
XMW$*G2'H"#$ZZ-GQ03RE`A.!"IT*G2'@@#"\M__).NA'J3^\`$"M`__Q*K?_\O
XM9@Q(>@'Q3KH8B%A/8#I(;(&&2&R`"DZZ&IA03Q`M__=(@$C`+P`O+?_X+RW_!
XM_$ZZ`=!/[P`,2H!G#B\M__@O+?_\3KH")%!/2JR!NF<*+RR!NDZZ-Q183TJM^
XM__QG"B\M__Q.NA#<6$]*K(3<9PHO+(3<3KHU,%A/2JR$X&<*+RR$X$ZZ-2!8S
XM3TJLA.1G"B\LA.1.NC406$\H'TY=3G5A<G`N;&EB<F%R>0`M:`!-04E,0TA+^
XM("T@4W1E<&AA;F4@3&%R;V-H92!&96)R=6%R>2`U+"`Q.3DP"@!$3D54("`@L
XM("T@*$,I($UA='1H97<@1&EL;&]N(#$Y.#@*``I5<V%G93H@("UT*'1I;64I;
XM($EN=&5R=F%L(&)E='=E96X@8VAE8VMS(&EN('-E8V]N9',@6T1%1D%53%0@F
XM/2`T,"!S96-O;F1S70H`("`@("`@("`M9"!$:7-P;&%Y(&UA:6QB;W@@;VX@G
XM<W1A<G0M=7`@6T1E9F%U;'1="@`@("`@("`@("UN($1O;B=T(&1I<W!L87D@4
XM;6%I;&)O>"!O;B!S=&%R="UU<`H`("`@("`@("`M:"!4:&ES(&UE<W-A9V4N3
XM+BX*`"U.`"UD`"UN`"UT`&EN='5I=&EO;BYL:6)R87)Y`&=R87!H:6-S+FQI(
XM8G)A<GD`;F\@8V]N;F5C=`!.5?_^&WP`!/__2'@``4AM__\O+0`(3KH3FD_O+
XM``RPO`````%F/DAX``1(;0`,+RT`"$ZZ$WY/[P`,L+P````$9B)(>``!2&T`7
XM$R\M``A.NA-B3^\`#+"\`````68&<`%.74YU<`!@^$Y5_\(O!$*M__P;?``!7
XM__-"+?_R0JW_[D*M_^I"+?_H(&T`"'``$"@`#W(!X:$K0?_X0JW__$HM__-GZ
XM``3$("W__("M__B`O```4``O`$ZZ,_!83RM`__0(+0`$__9G"$(M__-@``2:;
XM""T`!O_V9Q1(>``"+RT`#"\M``A.NO\:3^\`#"`M__3`K?_\9P`"EB!L@;HO!
XM*`!63KHS-%A/*T#_Y&<``H`@;?_D("@`%&```D9(>``!0J<0+?_I2(!(P"\`-
XM3KH%V$_O``Q@``)*(&W_Y`QH`.@`&&8``(P@;?_D+R@`*"!M_^0O*``D+RW_F
XMZB\M_^Y.NC0B3^\`$$I`9RH0+?_IL"W_Z&8@2BW_Z6\80J<0+?_I2(!(P"\`<
XM+RT`"$ZZ"89/[P`,8!0@;?_D*V@`)/_N(&W_Y"MH`"C_ZDHM_^EF&$*G$"W_C
XMZ$B`2,`O`$*G3KH%2$_O``Q@!AMM_^G_Z&```)0@;?_D#&@`:``89@``AG@!I
XM*VR!MO_>(&W_Y#`H`")(P"!L@;H2*``W2(%(P9"!(&R$V'(`,B@`.DZZ*<)2K
XM@#M`_^*X;?_B9Q1*K?_>9PY21"!M_]XK:`"$_]Y@YDJM_]YF#!MM_^G_Z$(ML
XM_^E@)!MM_^/_Z4*G$"W_Z$B`2,`O`!`M_^E(@$C`+P!.N@2J3^\`#&```1P;&
XM?``!__)@``$2(&W_Y'``,"@`&,"\````'^&`(&W_Y'(`,B@`&.J)PKP````_Q
XM@($R`'``,`%@``"N0J<0+?_I2(!(P"\`+RT`"$ZZ"&!/[P`,8```I$AX``$0B
XM+?_I2(!(P"\`+RT`"$ZZ"$)/[P`,8```AA`M_^E(@$C`+P`O+0`(3KH&WE!/-
XM8&Y(>``"$"W_Z4B`2,`O`"\M``A.N@@.3^\`#&!22'H"KTAZ`J9(>@*"2&R$-
XM6$ZZ)"9/[P`02'C__TALA%@O+(&Z3KHRBD_O``Q@)$(M__-@'O]$_V#_?O^4_
XM_[#_WK"\````!F0*XX`P.P#H3OL``&`@58!G`/VX78!G`/W.D+P```#X9P#^4
XM_)"\```!`&<`_N@O+?_D3KHQ`EA/8`#];B`M__3`K?_X9P`!HD(M_^=(>``!&
XM2&W_YR\M``A.N@T\3^\`#+"\`````68``7P0+?_G2(!(P+"\````@&0``6@0F
XM+?_G2(!(P"\`2&R$6"\M``A.N@T&3^\`#!(M_^=(@4C!L(%F``%`$"W_YTB`E
XM2,!![(170C`(`$AX``=(>@&U2&R$6$ZZ'CQ/[P`,2H!F"AM\``'_\F```0Y(_
XM>``(2'H!FTALA%A.NAX:3^\`#$J`9@A"ITZZ,3)83TJL@;IF1$AL@89.NC%.(
XM6$\I0(&Z2JR!NF<N(&R!NBEH`#*$V$AL@6@O+(&Z3KHQ.%!/(&R!NB)H`%9P1
XM`!`I``]R`>&A*T'__&`*+RR!NDZZ,3A83T)M_^1(;?_D+RT`"$ZZ`4)03PQMM
XM``'_Y&\02'H!&DAM_\).NA?<4$]@#DAZ`1-(;?_"3KH7S%!/2&W_PC`M_^1(2
XMP"\`2'H!`4AM_\M.NB):3^\`$$AM_\M(;(183KHA2E!/2'@``4*G0J=.N@'^_
XM3^\`#$JL@;IG%DAX__](;(18+RR!NDZZ,)I/[P`,8`I(;(183KH18EA/8`1"Z
XM+?_S2BW_\F<B2JR!NF<<+RR!NDZZ,!)83R\L@;I.NC`46$]"K(&Z0JW__$(M6
XM__)@`/LX+RR!MDZZ":983TJL@;IG&"\L@;I.NB_>6$\O+(&Z3KHOX%A/0JR!Y
XMNB@?3EU.=4UA:6Q#:&L@5B5S)7,@+2!3+B!,87)O8VAE(#$Y.3``,BXP,0`N<
XM,#$`3F\@;6%I;`!.97<@;6%I;`!M97-S86=E<P!M97-S86=E`"`H)60@)7,I]
XM`$Y5__HO"B1M``P;?``!__\O+(&V3KH)%%A/2'@``4AM__\O+0`(3KH-H$_OQ
XM``RPO`````%F``#>2'@``4AM__\O+0`(3KH*MD_O``RPO`````%F``#`2BW_P
XM_V\``+A*K(&V9R!"ITAX`(A.NBU\4$\@;?_Z(4``A"!M__HK:`"$__I@%D*G[
XM2'@`B$ZZ+5Q03RE`@;8K;(&V__I*K?_Z9W0@;?_Z0J@`A!`M__](@$C`L+P`5
XM``"$;%80+?__2(!(P"\`+RW_^B\M``A.N@HP3^\`#!(M__](@4C!L(%F,$AX;
XM``%(;?__+RT`"$ZZ"A!/[P`,2JR!NF82$"W__TB`2,`@0-'M__I"*/__4E)@[
XM`F`$8`#_1"1?3EU.=4Y5_^8;?``!_^DK;(&V_^I*K(&Z9P``["!LA-@;:``[C
XM__\@;(38&V@`/__^(&R$V!MH`#W__2!L@;H0*``W2(`[0/_Z(&R!NC`H``A(J
XMP"!L@;H2*``X2(%(P9"!(&R!NA(H`#9(@4C!D($[0/_V(&R!NC`H``I(P"!LC
XM@;H2*``W2(%(P9"!(&R!NA(H`#E(@4C!D($[0/_X(&R!NA`H`#9(@#M`__0@I
XM;(&Z$"@`-TB`.T#_\DHM`!-G2$*G+RR$V$ZZ+2)03S`M__A(P#(M__)(P="!?
XM+P`P+?_V2,`R+?_T2,'0@2\`,"W_\DC`+P`P+?_T2,`O`"\LA-A.NBS63^\`O
XM%$JM_^IG``&V2JR!NF<<,"W_^DC`$BW__DB!2,'0@3(M__A(P;"!;``!E$JL*
XM@;IF%$HM`!-G#B\M_^I.N@Y.6$]@``%L2BT`$V86$"W_Z;`M``MG#!`M_^FPL
XM+0`/9@`!0A`M``NP+?_I9AQ(>``"+RR$V$ZZ+'Y03T*G+RR$V$ZZ+&)03V`:-
XM2'@``B\LA-A.NBQ24$]"IR\LA-A.NBQ64$\O+?_J3KH3_EA/*T#_[B\M_^XO\
XM+?_J+RR$V$ZZ+&!/[P`,.T#_YC`M_^:P;?_V;Q8P+?_V2,`2+?_]2(%(P4ZZ3
XM(I8K0/_N,"W_^DC`$BW__DB!2,'0@2\`(&R!NA`H`#9(@$C`+P`O+(383KHK:
XMLD_O``PO+?_N+RW_ZB\LA-A.NBOB3^\`#!`M``NP+?_I9A!(>``"+RR$V$ZZD
XM*ZA03V`<$"T`#[`M_^EG!DHM`!-G#$*G+RR$V$ZZ*XI03S`M__I(P!(M__]((
XM@4C!T(%3@"\`,"W_]DC`,BW_]$C!T($O`#`M__I(P"\`(&R$V#`H`"1(P"\`Z
XM+RR$V$ZZ*S9/[P`4$"W__TB`T6W_^E(M_^D@;?_J*V@`A/_J8`#^1DY=3G5.I
XM5?_2+P1X`2ML@;;__!M\``/_VT*M_]9X`6`H2&W_W$AM_](O+?_\3KH$W$_OG
XM``P@+?_2T:W_UB!M__PK:`"$__Q2!+@M``]G!DJM__QFS$JM__QF!B@?3EU.0
XM=4AM_]Q(;?_2+RW__$ZZ!)Q/[P`,2'@``4AM_]LO+0`(3KH);D_O``RPO```]
XM``%F``"82'@`!$AM_]8O+0`(3KH)4$_O``RPO`````1F>DAX``1(;?_2+RT`2
XM"$ZZ"31/[P`,L+P````$9EY(>``!2&W_VB\M``A.N@9,3^\`#+"\`````69"W
XM2BW_VF<\+RR!MDZZ!&!83TAZ`#1(;(183KH1V%!/2'C__TALA%@O+(&Z3KHJ$
XMYD_O``Q(>``!0J="ITZZ_"!/[P`,8`#_,$1E;&5T92!S=6-C97-S9G5L+"!RQ
XM969R97-H:6YG+BXN``!.5?YJ*VR!MO_\0BW_^AM\``+_^4(M__="K?_R*WP`^
XM```!_G)(>0`!``%(>!`F3KHHDE!/*T#^;F<6(&W^;B"\```/H"!M_FX1?`""K
XM``5@""`M_G).74YU2'H#$$AM_OY.NA$H4$\0+0`32(!(P&```*!(>@,!3KH+W
XM*%A/*T#^=F802'H"]TAM_V).NA#^4$]@&"\M_G9(;?]B3KH0[E!/+RW^=DZZ%
XM(\983TAZ`N)(;?]B3KH:?E!/2&W^_DAM_V).NAIP4$](>@+(2&W^>DZZ$+I0>
XM3QM\``'_]V!"2'H"NTAM_OY.NA"D4$](>@*R2&W^>DZZ$)903V`D2'H"K$AMC
XM_GI.NA"&4$\@+?YR8`#_1DJ`9P#_7E.`9\)3@&?<(&W^;M'\```%I"M(_^)("
XM;?YZ3KH0:%A/&T#_^!M\``'_^V`V$"W_^$B`2,!![?YZT(@O`$AM_^XO+?_\P
XM3KH"8$_O``P@+?_NT:W_\B!M__PK:`"$__Q2+?_[$"W_^[`M``]G!DJM__QF8
XMNDJM__QF""`M_G)@`/[`$"W_^$B`2,!![?YZT(@O`$AM_^XO+?_\3KH"#$_OS
XM``Q*+0`39AQ(>@'U2&W^>DZZ&6Q03TAM_V)(;?YZ3KH97E!/2'C__TAM_GHOD
XM+(&Z3KHHQ$_O``Q(>`/N2&W^_DZZ)AA03RM`_^9G``$\2'@``4AM__DO+0`(R
XM3KH&DD_O``RPO`````%F``$22'@`!$AM__(O+0`(3KH&=$_O``RPO`````1F`
XM``#T2'@`!$AM_^XO+0`(3KH&5D_O``RPO`````1F``#62'@`!$AM_^HO+0`(>
XM3KH#;$_O``RPO`````1F``"X2JW_ZF,``+`O+?_J+RW_XB\M``A.N@-&3^\`W
XM#+"M_^IF``"0+RW_ZB\M_^(O+?_F3KHEL$_O``RPK?_J9R`;?``!__I(>``!1
XM2&W_^B\M``A.N@763^\`#$*M_G)@6$HM__=G.B\M_FY"ITAM_V).N@BB3^\`;
XM#$J`;"`;?``!__I(>``!2&W_^B\M``A.N@6:3^\`#$*M_G)@'$(M__=(>``!X
XM2&W_^B\M``A.N@5\3^\`#&``_RXO+?_F3KHDE%A/8`1"K?YR2'C__TALA%@O:
XM+(&Z3KHG7$_O``Q(>!`F+RW^;DZZ):A03R`M_G)@`/SL1%!)4$4Z36%I;`!0R
XM04=%4@!S>7,Z=71I;&ET:65S+VUO<F4`(`!6:65W:6YG(`!04E0Z`%!R:6YT,
XM:6YG(`!3879I;F<@+BXN`"!U<VEN9R```$Y5__Q(>``O+RT`"$ZZ$U103RM``
XM__QG'B\M`!`O+0`,2'H`'E*M__PO+?_\3KH./D_O`!!@!B!M``Q"D$Y=3G4E+
XM;&0@)7,``$Y5``!*K0`(9QI(>`"(+RT`"$ZZ).Y03R!M``@K:`"$``A@X$*LR
XM@;9.74YU3E7_S#M\`"+_["!M``@P*``T2,`K0/_H*VT`"/_\*VT`"/_>2&W_>
XMT"!M``@O*``B3KHD^E!/(&T`"%*H`#P@;0`(0J@`.$AM_]`O+0`(3KH&5E!/0
XM(&T`"$AH`"9.NB3<6$\K0/_,9A`O+0`(3KHDB%A/*T#_S&<6(&W_S!%\``$`>
XM'R\M_\Q.NB2^6$]@QB\M``A.N@#J6$].74YU3E7_S$JM``AF"$'Z`-0K2``(-
XM+RT`"$AM_]!.N@4<4$\K0/_,#"T`?@`7;P8;?`!^`!<,+0"!`!=L!AM\`($`P
XM%PPM`'X`$V\&&WP`?@`3#"T`@0`3;`8;?`"!`!,@;?_,2J@`(F=L.WP`(/_LI
XM,"T`#DC`*T#_Z"MM_\S__"MM_\S_WAMM`!/_V1`M`!=(@$C`*T#_VDAM_]`@B
XM;?_,+R@`(DZZ(^Y03TAM_]!.N@G06$]*+?_O9AP@;?_,,6W_Z@`T+RW_S$ZZ>
XM!"183R`M_\Q.74YU+RW_S$ZZ``I83W``8.XP`$Y5```@;0`(<``0*``/+P!./
XMNB-:6$](>`!`+RT`"$ZZ(SA03TY=3G5.5?_X0JW__"M\_______X(&T`"$HH7
XM`#9G!G#_3EU.=4JM`!!G4DJM__AF"B\M``A.NB.<6$\O+0`0+RT`#"\M``A.V
XMN@`Z3^\`#"M`__A*K?_X;20@+?_XT:W__"`M__C1K0`,("W_^)&M`!`@;0`(1
XM2B@`-F8"8*@@+?_\8)Y.5?_X+PI"K?_\(&T`"$HH`#9G"'#_)%].74YU2JT`>
XM$&<``<H@;0`(2&@`)DZZ(NA83R1`2H!F$B\M``A.NB*46$\D0$J`9P`!I`PJ%
XM``<`"&9`(&T`"$JH`#QF#$AZ`=!.NA"R6$]@""!M``A3J``\2JH`)&<.+RH`(
XM)"\J`"A.NB(R4$](>``P+PI.NB(F4$]@BG``,"H`'&```38@;0`($7P``0`VX
XM+PI.NB)X6$]@``$X#"H`0``(9A(O"B!M``A(:``F3KHANE!/8!`O"B!M``A(]
XM:``F3KHA0E!/%7P`0``(2JW__&8(*WS____^__Q@``#Z("H`))"J`"`K0/_XR
XM2JW_^&P*2'H!/4ZZ$`A83R`M__BPK0`0;CPO+?_X+RT`#"!J`"#1Z@`H+PA.3
XMNB$B3^\`#"`M__B1K0`0("W_^-&M__P@+?_XT:T`#"\*3KHATEA/8%XO+0`0I
XM+RT`#"!J`"#1Z@`H+PA.NB#F3^\`#"`M`!#1K?_\("T`$-&J`"!"K0`0#"H`'
XM0``(9A(O"B!M``A(:``F3KH@Z%!/8!`O"B!M``A(:``F3KH@<%!/%7P`0``(W
XM8#(5?``!`!\O"DZZ(6)83V`B_K;^MO\._]#^S)"\````(K"\````!638XX`PL
XM.P#D3OL``&``_C(O+0`(3KH!<%A/(&T`"$HH`#9G)B!M``AP`!`H``]R`>&A'
XM+P$@;0`(<``0*``/<@'AH2\!3KHA$%!/("W__&``_>I$3E)E860Z(%-O9G1W#
XM87)E($5R<F]R`&QE;B!F86EL`$Y5_\PO"BMM`!#__"!M``A*J``X9P``E$*G*
XM+RT`"$ZZ`A103TJ`;7A(>0`!``%(>``P3KH?[%!/)$`U?``D`!P@;0`(,"@`W
XM-$C`)4``&"5M``@`+"5M``@`#DAX``$O+0`03KH?O%!/)4``*"5M`!``)"\M%
XM`!`O*@`H+RT`#$ZZ'X)/[P`,+PH@;0`(+R@`(DZZ("A03R!M``A2J``\8`@K`
XM?/_______&!6.WP`)/_H(&T`"#`H`#1(P"M`_^0K;0`(__@K;0`(_]HK;0`,6
XM__0K;0`0__!(;?_,(&T`""\H`").NA_64$](;?_,3KH%N%A/2BW_ZV<(*WS_6
XM______PO+0`(3KH`#EA/("W__"1?3EU.=4Y5```O"B1M``@@2M'\````&")JB
XM`!2SR&80($K1_````"HB:@`FL\AG'G``$"H`#W(!X:$O`7``$"H`#W(!X:$O3
XM`4ZZ'XQ03R1?3EU.=4Y5_]`O"B1M``A(>0`!``%(>`!`3KH>J%!/*T#__"!MK
XM__P1?``$``A(>/__3KH>A%A/(&W__!%```]"ITZZ'JQ83R!M__PA0``0(&W_R
XM_$AH`!1.NA[>6$\@;?_\2&@`)DZZ'M!83R!M__PQ:@`:`#0E;?_\`"Q*K0`,3
XM9R8O+0`,2'H`1$AZ`#M(;?_13KH1H$_O`!!(;?_13KH>1%A/)4``#B!M__PAV
XM:@`.`"(@+?_\)%].74YU1$Y%5"Y53DE4+@`E<R5S`$1.150N54Y)5"X``$Y5T
XM__XO"D)M__X@;0`((FT`""`H`#RPJ0`X;W(O+0`(3KH>K%A/+RT`"$ZZ'B18G
XM3R1`#"H`!P`(9D!*;?_^9@H0*@`?2(`[0/_^M>T`#&<@2JH`)&<.+RH`)"\JS
XM`"A.NAW04$](>``P+PI.NAW$4$\@;0`(4Z@`/&`0+PH@;0`(2&@`)DZZ'1)04
XM3V``_WXP+?_^2,`D7TY=3G4@;P`$0^\`""QLA.1.[O\<(F\`!"QLA.1.[O\0#
XM+PI,[P<```@L;(3D3J[]WB1?3G5.5?_N+RT`"$ZY```@GEA/6H`[0/_^2'@`2
XM`3`M__Y(P"\`3KD``#?&4$\K0/_Z0JW_]DJM__IG``#@2'H`Y"\M__I.N0``V
XM((Y03R\M``@O+?_Z3KD``"HV4$](>`/M+RW_^DZY```W$E!/*T#_\F<``)1(?
XM>``!0J<O+?_R3KD``#<^3^\`#$*G0J<O+?_R3KD``#<^3^\`#"M`_^Y*K?_N6
XM;58@+?_N4H`O`$ZY```S8%A/*T#_]F=`2'C__T*G+RW_\DZY```W/D_O``POO
XM+?_N+RW_]B\M__).N0``-RQ/[P`,L*W_[F<$0JW_[B`M_^X@;?_V0C`(`"\M/
XM__).N0``-LY83S`M__Y(P"\`+RW_^DZY```X"E!/("W_]DY=3G5%3E8Z``!.2
XM5?_P+RT`"$ZY```@GEA/6H`[0/_^+RT`#$ZY```@GEA/.T#__$*M__A(>``!7
XM,"W__DC`+P!.N0``-\903RM`__1*K?_T9P``A$AZ`(@O+?_T3KD``"".4$\O#
XM+0`(+RW_]$ZY```J-E!/2'@#[B\M__1.N0``-Q)03RM`__!G.#`M__Q(P"\`!
XM+RT`#"\M__!.N0``-V!/[P`,,BW__$C!L(%F""M\`````?_X+RW_\$ZY```V$
XMSEA/,"W__DC`+P`O+?_T3KD``#@*4$\@+?_X3EU.=45.5CH``$Y5_J9(YP@P`
XM)&T`""9M``PX*@`&+RL`'G``,"L`+B\`2'@!6DAM_J9.N0``.8)/[P`02H!FT
XM##M\`4#^LCM\`,C^M+A\``AM*#=J``P`!$IJ``QN"#`M_K+1:P`$-VH`#@`&?
XM2FH`#FX(,"W^M-%K``:X?``$;3@VJ@`(2FH`"&P0,"W^LDC`,BL`!$C!D('1G
XM4S=J``H``DIJ``IL$C`M_K1(P#(K``9(P9"!T6L``DI3;4!*:P`";3I*:P`$O
XM;S1*:P`&;RXP$TC`,BL`!$C!T($R+?ZR2,&P@6X8,"L``DC`,BL`!DC!T($RD
XM+?ZT2,&P@6\20FL``D)3-WP!0``$-WP`9``&N'P`"6T,,"H`$$C`X(`70``(:
XMN'P`"FT&%VH`$0`)3-\,$$Y=3G5,[P,```1(YP`R+'D```3JGOP`(A]\``0`2
XM"!]\````#A]\``0`#R]N`10`$$7O`!1'[P`8)(LFO``````E2@`((T\`#B1)L
XM3J[^DB\*83!8C][\`"),WTP`3G4@;P`$<``,*``%``AG`B`(3G4@;P`$<``@N
XM:``42I!G`B`(3G4@;P`$2.<`,B1()F@`#BQY```$Z@PJ``4`"&8.$BL`#W``L
XM`\!.KO["8.I.KO^((DI.KO\$3J[_@B`*3-],`$YU3.\``P`$2.<@."1`)D&?+
XM_````(`H3W0`<`$2$F8&2A-G``"@LCP`*F9(M'P`"&8&</]@``".,`+G0"F*?
XM```IBP`$4D)2BF#04T)K##`"YT`@=``$2A!G\$I":V0P`N=`)'0``%**4K0`T
XM!"9T``12@F"FLCP`/V8*2A-F-$I"9LA@/A`3L#P`064*L#P`6F($@#P`(!(23
XMLCP`064*LCP`6F($@CP`(+(`9P9*0F::8!!*&F8"4XI*&V8"4XM@`/]:<`#?A
XM_````(!,WQP$3G4B>0``!.HB:0$4".@````$9Q*SZ``(9Q!(YP#`<`!A'$S?!
XM`P`A20`(4F@`!DYU3.\!`0`$8`8@;P`$<``!Z``$9@).=4CG`"(L>0``!.I2P
XM+@$G`>@`!&<N/P`O+@$4+P@O$""/<!!.KO[","\`#"!O``0!Z``$9NR_T&<$A
XM(%!@^""7WOP`#DZN_W9,WT0`3G4@;P`$4V@`!F80<``A0``("*@````$(A!FY
XM&$YU3.\!`0`$8`8@;P`$<``!J``$(A!G,DCG("(4`"QY```$ZE(N`2<B$&<6L
XM)$&T*@`-9@HB:@`(<!!.KOZ\(A)FZDZN_W9,WT0$3G5,[P$!``1(YP`P(D!*!
XMD6<F(E%*D6<@("D`"F?TL<!G#B1`)DBW"F;H2BK__V;V(`E,WPP`3G5P`$S?T
XM#`!.=2!O``0@"")O``@0V6;\3G4@;P`$(`A*&&;\D<`@"%.`3G5.50``2.<,=
XM("1M``@,$@`@9P8,$@`)9@12BF#P>@`,$@`M9@9Z`5**8`@,$@`K9@)2BG@`6
XM8"`@2E**$!!(@$C`<@HO`"`$3KH5LB(?TH`H`9B\````,!`22(!(P$'L@?\([
XM,``""`!FSDJ%9P8@!$2`8`(@!$S?!#!.74YU3E4``"EM``B$0D(LA$9(;0`0I
XM+RT`#$AZ``Y.N@!<3^\`#$Y=3G5.50``2JT`"&8H(&R$0DH09Q@@;(1"4JR$#
XM0A`02(!(P,"\````_TY=3G49?``!A$9@'$HLA$9F%E.LA$(@;(1"$!!(@$C`Z
XMP+P```#_8-AP_V#43E7_<DCG#S`D;0`,)FT`$'H`*6T`"(1,($I2BA`02(!(V
XMP"@`9P`"]KB\````)68``KA"+?_[0BW_^D(M__DI?````'^$2`P2`"IF"%**Z
XM&WP``?_[$!)(@$C`0>R!_P@P``((`&<^0JR$2!`22(!(P'(*+P`@+(1(3KH4C
XMC"(?TH"2O````#`I081(4HH0$DB`2,!![('_"#```@@`9LP;?``!__D,$@!L<
XM9@@;?``!__I2BB!*4HH0$$B`2,`N`&```=9X)6```C8;?`#___I@!AM\``'_W
XM^G@,?`I@%AM\``'_^G@`?!!@"AM\``'_^G@.?`A.N@)82H!F``(B2&W__"\&O
XM0>R!U2)$T\@O"4'L@;XB1-/(+PE.N@)N2H!/[P`09P`!^DHM__MF,$HM__ILV
XM#"!+6(LB4#*M__Y@'$HM__IO#"!+6(LB4"*M__Q@"B!+6(LB4"*M__Q2A6``$
XM`8I"+?_Z#!(`7F<&#!(`?F8(4HH;?``!__I![?]R*TC_]&`*(&W_]%*M__00$
XMA"!*4HH0$$B`2,`H`+"\````76;B(&W_]$(08!P;?``!__H;?``@_W(;?``):
XM_W,;?``*_W1"+?]U3KH!B$J`9@`!4DHM__MF""!+6(LK4/_T0BW_^2`LA$A3J
XMK(1(2H!G<$*G(&R$3$Z0*`"PO/____]83V=<2BW_^F<8+P1(;?]R3KH"<DJ`$
XM4$]G!'`!8`)P`&`6+P1(;?]R3KH"6DJ`4$]F!'`!8`)P`&<.2'@``2!LA$Q.V
XMD%A/8!A*+?_[9@H@;?_T4JW_]!"$&WP``?_Y8(1*+?_Y9P``O$HM__MF$+Z\]
XM````8V<&(&W_]$(04H5@;$HM__EF""E\`````81(0BW_<AM\``'_^F``_SB0L
XMO````"5G`/XDD+P````?9P#^*)"\````"V<`_C:0O`````EG`/X@5X!G`/Z<&
XM48!GLE.`9P#^"EF`9P#]]E^`9P#^%EF`9P#^R%N`9P#]_F`P0>R!_P@P``1(]
XM`&<(859*@&8B8!Q"IR!LA$Q.D+"$6$]G#DAX``$@;(1,3I!83V`$8`#\_DJ%6
XM9BA"IR!LA$Q.D+"\_____UA/9@IP_TS?#/!.74YU2'@``2!LA$Q.D%A/(`5@;
XMZ$Y5``!"IR!LA$Q.D$'L@?\(,``$"`!83V<"8.A(>``!(&R$3$Z0L+S_____:
XM6$]F!G#_3EU.=7``8/A.5?_X2.<,($JLA$AN"G``3-\$,$Y=3G5"K?_X>@`KO
XM1?_\0J<@;(1,3I`H`+"\````+5A/9@PK?`````'_^%*%8!BXO````"MF!%*%+
XM8`Q(>``!(&R$3$Z06$]@=$*G(&R$3$Z06$\H`"\`+RT`"$ZZ`(@D0$J`4$]FJ
XM+@RM````$``09A9*K?_\9A"XO````'AG/+B\````6&<T2'@``2!LA$Q.D%A/#
XM8"XB+0`0("W__$ZZ$,XK0/_\(`J0K0`((&T`#!(P"`!(@4C!TZW__%*%NJR$A
XM2&V&2JW_^&<.(&T`%"`M__Q$@""`8`@@;0`4(*W__"`%8`#_&B!O``0@+P`($
XM$AAG"K(`9O@@"%.`3G5P`$YU,#Q__V`$,"\`#E-`:Q0@;P`$(F\`"+$)9@Q34
XM2$H85\C_]G``3G5C!'`!3G5P_TYU3E4``"\*)&T`"$H29R0@2E**$!!(@$C`0
XM+P!.N@F0L+S_____6$]F"'#_)%].74YU8-A(>``*3KH)=%A/8.QA<$/LA$)%R
XM[(1"M<EF#C(\`#YK"'0`(L)1R?_\*4^$\"QX``0I3H3L2.>`@`@N``0!*6<0U
XM2_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4"$]&8,+CP``X`'3J[_E&`$3KH`-
XM&E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y5```O"DAY``$``#`LA#C!_``&@
XM+P!.NA".*4"$^%!/9A1"ITAY``$``$ZZ$#!03RYLA/!.=2!LA/A":``$(&R$\
XM^#%\``$`$"!LA/@Q?``!``H@;(3P("R$\)"H``10@"E`A/P@;(3\(+Q-04Y8'
XM0J=.NA!@)$!*J@"L6$]G,"\M``PO+0`(+PI.N@"R*7P````!A.@@;(3X`&B`D
XM```$(&R$^`!H@```"D_O``Q@0DAJ`%Q.NA#42&H`7$ZZ$$XI0(4`(&R%`$JH)
XM`"103V<0(&R%`")H`"0O$4ZZ#N!83R\LA0`O"DZZ`G@I;(4`A0103TZZ#N`@)
XM;(3X((!.N@\$(&R$^"%```9G%DAX`^U(>@`L3KH.X"!LA/@A0``,4$\O+(4$;
XM+RR%"$ZZU^9"ITZZ#,Y/[P`,)%].74YU*@!.50``2.<,,"1M`!`@;0`(2J@`3
XMK&<8(&T`""`H`*SE@"@`($0@*``0Y8`F0&`$)FR$.A`32(!(P-"M``Q4@"E`U
XMA0Q"IR\LA0Q.N@\@*4"%$%!/9@A,WPPP3EU.=1`32(!(P"H`+P4@2U*(+P@OY
XM+(403KH!CB!LA1#1Q4/Z`5@0V6;\+RT`#"\*+RR%$$ZZ`4X@;(400C!8`"E\H
XM`````84((&R%$-'%)DA2BR1+3^\`&!`32(!(P"H`L+P````@9R"ZO`````EGK
XM&+J\````#&<0NKP````-9PBZO`````IF!%*+8,P,$P`@;0``C`P3`")F,E*+D
XM($M2BQ`02(!(P"H`9R`@2E**$(6ZO````")F$`P3`")F!%*+8`9"*O__8`)@L
XMTF!$($M2BQ`02(!(P"H`9S"ZO````"!G*+J\````"6<@NKP````,9QBZO```1
XM``UG$+J\````"F<(($I2BA"%8,(@2E**0A!*A68"4XM2K(4(8`#_/$(20J<@@
XM+(4(4H#E@"\`3KH-Y"E`A0103V8(0JR%"&``_KYZ`"9LA1!@'B`%Y8`@;(4$L
XM(8L(`"!+(`A*&&;\D<!3B%*(U\A2A;JLA0AMW"`%Y8`@;(4$0K`(`&``_H(@<
XM`#`\?_]@!#`O``X@;P`$2AAF_%-((F\`"%-`$-E7R/_\9P)"$"`O``1.=4SOH
XM`P``!"`((B\`#&`"$-E7R?_\9P9206`"0AA1R?_\3G5.50``2.<.,"1M``A"Q
XMITAZ`(Y.N@VZ*4"%%%!/9@A,WPQP3EU.=2!M``PB:``D+RD`!$ZZ#HXH`%A/`
XM9U)(>@!M($0O*``V3KH.8"9`2H!03V<T2'@#[2\+3KH,.BP`4$]G)"`&Y8`J\
XM`"!%)6@`"`"D)48`G$AX`^U(>@`X3KH,%B5``*!03R\$3KH.+%A/+RR%%$ZZU
XM#()"K(446$]@@&EC;VXN;&EB<F%R>0!724Y$3U<`*@!.50``+P0I;0`(A%!(Z
XM;0`0+RT`#$AZ`!I.N@"\*``@;(100A`@!$_O``PH'TY=3G5.50``(&R$4%*L#
XMA%`0+0`+$(!(@$C`P+P```#_3EU.=4Y5``!(YP@@)&T`$`RM````!``49@@@?
XM;0`(*!!@%$JM``QO""!M``@H$&`&(&T`""@00JT`%$JM``QL$D2M``Q*A&P*@
XM1(0K?`````$`%"(M``P@!$ZZ`]9![('L4XH4L`@`(BT`#"`$3KH#SB@`9MY*U
XMK0`49P93BA2\`"T@"DS?!!!.74YU3E7_%$CG"#`D;0`()FT`#$*M__@K;0`0"
XM__P@2U*+$!!(@$C`*`!G``,TN+P````E9@`##D(M_R(K?`````'_]"M\````;
XM(/_P*WP``"<0_^P@2U*+$!!(@$C`*`"PO````"UF$$*M__0@2U*+$!!(@$C`A
XM*`"XO````#!F%"M\````,/_P($M2BQ`02(!(P"@`N+P````J9AH@;?_\6*W_6
XM_"M0_^@@2U*+$!!(@$C`*`!@-$*M_^A@(G(*("W_Z$ZZ"=[0A)"\````,"M`$
XM_^@@2U*+$!!(@$C`*`!![('_"#```D@`9M*XO````"YF8B!+4HL0$$B`2,`HX
XM`+"\````*F8:(&W__%BM__PK4/_L($M2BQ`02(!(P"@`8#1"K?_L8")R"B`M=
XM_^Q.N@ETT(20O````#`K0/_L($M2BQ`02(!(P"@`0>R!_P@P``)(`&;2*WP`$
XM```$_^2XO````&QF%B!+4HL0$$B`2,`H`"M\````!/_D8!2XO````&AF#"!+>
XM4HL0$$B`2,`H`"`$8```@BM\````"/_@8!PK?`````K_X&`2*WP````0_^!@]
XM""M\____]O_@+RW_Y$AM_R(O+?_@+RW__$ZZ_;(K0/_<("W_Y-&M__Q/[P`0<
XM8%P@;?_\6*W__")0*TG_W"`)2AEF_)/`4XDK2?_D8$H@;?_\6*W__"@00>W_0
XM(2M(_]P0A&`HD+P```!C9^)3@&>2D+P````+9P#_;%F`9[)5@&<`_VQ7@&<`/
XM_W!@S$'M_R*1[?_<*TC_Y"`M_^2PK?_L;P8K;?_L_^1*K?_T9W`@;?_<#!``Q
XM+6<*(&W_W`P0`"MF-`RM````,/_P9BI3K?_H(&W_W%*M_]P0$$B`2,`O`$Z2W
XML+S_____6$]F"G#_3-\,$$Y=3G5@&"\M__!.DK"\_____UA/9@1P_V#B4JW_N
XM^"`M_^A3K?_HL*W_Y&[:0JW_X&`D(&W_W%*M_]P0$$B`2,`O`$Z2L+S_____6
XM6$]F!'#_8*I2K?_@(&W_W$H09PH@+?_@L*W_[&W*("W_X-&M__A*K?_T9BI@!
XM&DAX`"!.DK"\_____UA/9@9P_V``_W!2K?_X("W_Z%.M_^BPK?_D;MA@&"\$5
XM3I*PO/____]83V8&</]@`/](4JW_^&``_,`@+?_X8`#_.$CG2`!"A$J`:@1$7
XM@%)$2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*@&H$1(!21$J!C
XM:@)$@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``2$%*068@2$$VT
XM`30`0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!"04A!2$!"0'0/'
XMT(#3@;:!8@22@U)`4<K_\DS?``Q.=4Y5``!(;(*6+RT`"$ZZ``A03TY=3G5.L
XM50``+P0H+0`(+RT`#"\$3KH`-+B\````"E!/9B8@;0`,$"@`#$B`2,`(```'A
XM9Q1(>/__+RT`#$ZZ`/Q03R@?3EU.=6#X3E4``"\*)&T`#"!2L>H`!&4:("T`G
XM","\````_R\`+PI.N@#.4$\D7TY=3G4@4E*2$"T`"Q"`2(!(P,"\````_V#D.
XM3E4``"\*0>R"@"1(($K5_````!8O"&$06$]![(0XM<AEZB1?3EU.=4Y5``!(H
XMYP@@)&T`"'@`(`IF"G#_3-\$$$Y=3G5**@`,9U((*@`"``QG#$AX__\O"F%4N
XM*`!03Q`J``U(@$C`+P!.N@4TB(`(*@`!``Q83V<*+RH`"$ZZ`CQ83P@J``4`R
XM#&<2+RH`$DZZ`M@O*@`23KH"(E!/0I)"J@`$0JH`"$(J``P@!&".3E7__DCG9
XM""`D;0`(0?K_1"E(A1@(*@`$``QG"G#_3-\$$$Y=3G4(*@`"``QG-"!2D>H`D
XM""@(+P0O*@`($"H`#4B`2,`O`$ZZ`I:PA$_O``QG$`CJ``0`#$*20JH`!'#_<
XM8+P,K?____\`#&80"*H``@`,0I)"J@`$<`!@HDJJ``AF""\*3KH`I%A/#&H`U
XM`0`09C`;;0`/__](>``!2&W__Q`J``U(@$C`+P!.N@(RL+P````!3^\`#&:8G
XM("T`#&``_UXDJ@`(,"H`$$C`T*H`""5```0(Z@`"``P@4E*2$"T`#Q"`2(!(+
XMP,"\````_V``_RY.50``+PI![(*`)$A**@`,9QC5_````!9![(0XM<AE"'``H
XM)%].74YU8.)"DD*J``1"J@`((`I@ZDY5__PO"B1M``A(>`0`3KH`PBM`__Q8;
XM3V88-7P``0`0($K1_`````XE2``()%].74YU-7P$```0".H``0`,)6W__``(3
XM$"H`#4B`2,`O`$ZZ`-Y*@%A/9P8`*@"```Q@S$Y5``!(YP`P)&R$5&`4)E(@B
XM*@`$4(`O`"\*3KH%!%!/)$L@"F;H0JR$5$S?#`!.74YU3E4``"\*0?K_QBE(U
XMA1Q"IR`M``A0@"\`3KH$D"1`2H!03V8(<``D7TY=3G4DK(14)6T`"``$*4J$3
XM5"`*4(!@YDY5```O+0`(8;983TY=3G5.50``2.<`,)?+)&R$5&`.(&T`"%&(O
XML<IG$B9*)%(@"F;N</],WPP`3EU.=2`+9P0FDF`$*5*$5"`J``10@"\`+PI.%
XMN@1:<`!03V#83E4``"\*<@8@+0`(3KH"X"1`U>R$^$JM``AM$C`LA#A(P"(M`
XM``BR@&P$2I)F$"E\`````H4@</\D7TY=3G5R!B`M``A.N@*H(&R$^"\P"`!.D
XMN@+X2H!83V<$<`%@`G``8-9.50``+RT`"$ZZ`L)*@%A/9@Y.N@+,*4"%('#_4
XM3EU.=7``8/A.50``2.<,("@M``A.N@!V<@8@!$ZZ`E(D0-7LA/A*A&T.,"R$1
XM.$C`N(!L!$J29A(I?`````*%('#_3-\$,$Y=3G4P*@`$P'P``V8,*7P````%]
XMA2!P_V#B+RT`$"\M``PO$DZZ`KXJ`+"\_____T_O``QF#$ZZ`D8I0(4@</]@N
XMNB`%8+9.5?_\2'@0`$*G3KH#O"M`__P(```,4$]G$DJLA.AF""`M__Q.74YUK
XM3KH`!G``8/1.50``2'@`!$AZ`!Q.N@(@+P!.N@):2'@``4ZZ``Y/[P`03EU.R
XM=5Y#"@!.50``2JR%&&<&(&R%&$Z0+RT`"$ZZ``A83TY=3G5.5?_\+P0K;0`($
XM__Q*K(3X9RQX`&`*+P1.N@#\6$]2A#`LA#A(P+B`;>PP+(0XP?P`!B\`+RR$P
XM^$ZZ`I903TJLA1QG!B!LA1Q.D$JLA#YG"B\LA#Y.N@&\6$]*K(4D9P@@;(4D[
XM(*R%*$JLA2QG"B\LA2Q.N@'J6$]*K(4P9PHO+(4P3KH!VEA/2JR%-&<*+RR%M
XM-$ZZ`<I83TJLA3AG"B\LA3A.N@&Z6$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B#
XM*E]@!D*G\U].<TJLA0!F*DJLA1!G(B\LA0PO+(403KH!\B`LA0A2@.6`+P`O/
XM+(4$3KH!X$_O`!!@#DZZ`<HO+(4`3KH"/EA/("W__"YLA/!.=2@?3EU.=4Y5M
XM``!(YPX@*"T`"'(&(`1.N@!$)$#5[(3X2H1M#C`LA#A(P+B`;`1*DF82*7P`-
XM```"A2!P_TS?!'!.74YU,"H`!,!\@`!F""\23KH`,EA/0I)P`&#@2.=P`#0!E
XMQ,`F`4A#QL!(0T)#U(-(0,#!2$!"0-""3-\`#DYU3OH``B(O``0L;(3T3N[_N
XMW"(O``0L;(3T3N[_@B(O``0L;(3T3N[_N"QLA/1.[O_*+&R$]$[N_WPB+P`$'
XM+&R$]$[N_RA.^@`"3.\`!@`$+&R$]$[N_^(L;(3T3N[_Q$[Z``),[P`.``0L!
XM;(3T3N[_UD[Z``),[P`.``0L;(3T3N[_OD[Z``(B+P`$+&R$]$[N_Z9.^@`"O
XM3.\`#@`$+&R$]$[N_]!,[P,```0L;(3L3N[_"DCG`01,[R"```PL;(3L3J[_5
XME$S?((!.=4[Z``(B;P`$+&R$[$[N_F),[P,```0@+P`,+&R$[$[N_9`@+P`$F
XM+&R$[$[N_K9.^@`"3.\``P`$+&R$[$[N_SI,[P,```0L;(3L3N[_$")O``0L7
XM;(3L3N[^>D[Z``(B;P`$+&R$[$[N_MHL;(3L3N[_?$[Z``(B;P`$("\`""QL8
XMA.Q.[O\N("\`!"QLA.Q.[OZP3OH``B!O``0L;(3L3N[^C"!O``0@B%B00J@`6
XM!"%(``A.=4[Z``(L;(3L(F\`!"`O``A.[OW83.\#```$+&R$[$[N_I(@;P`$P
XM+&R$[$[N_OY.^@`"(F\`!"QLA.Q.[OZ&3OH``DSO``,`!"QLA.Q.[O[.("\`2
XM!"QLA.Q.[O["3OH``B!O``0L;(3L3N[^@")O``1,[P`#``@L;(3@3N[_$")O:
XM``1,[P`/``@L;(3@3N[^SB)O``0@+P`(+&R$X$[N_JHB;P`$("\`""QLA.!.<
XM[OZD(F\`!"!O``@@+P`,+&R$X"\'3J[_Q"X?3G4B;P`$(&\`""`O``PL;(3@;
XM3N[_RDSO`P``!"QLA11.[O^@(&\`!"QLA11.[O^F(&\`!"QLA11.[O^R(&\`X
XM!"QLA-Q.[O_*(&\`!"QLA-Q.[O^X(&\`!"QLA-Q.[O^@3.\`#P`$+&R$W$[NG
XM_YH@;P`$3.\"`P`(+&R$W$[N_E8@;P`$+&R$W$[N_S1,[P,```0L;(3<3N[^J
XM^"\*3.\'```(+&R$W$ZN_NPD7TYU(&\`!"QLA-Q.[O[(``````/L````%@``Q
XM`````!JN```:R```&N@``!KX```;"```&R(``!LT```;4```&V@``!M^```;/
XMH@``&[8``!O4```;Y@``'`(``!P>```<+@``'#X``!Q<```<?```')```!S.%
XM````!@````$``!W:```>7```'UP``!^D```@)```)QX````````#\@```^H`A
XM``$04U125`````!.5R`@````"@`"``+_L``H__]%3D0@```````!`0``````?
XM``````````0```````$!````````````````"0```````0$`````````````1
XM```/```````!`0```````````````!8```````$!````````````````&P``$
XM`````0$````````````````C`````````+P``````&0`"@!6`````````"(`'
XM````=@````````````#>````"@!D``H`5@`````````V`````'``````````(
XM```!`````!0`9``*`%8`````````2@````!D`````````````2(````>`&0`L
XM"@!&`````````%X`````<P````````````%$````*`!D``H`4@````````!R`
XM`````````````````````````#(`9``*`%8`````````A@````!R````````N
XM`````````````&0`/``!````*@```)H````````````````!0``R__\```,*C
XM``(`#P`````````````$5@```````````"``$O____\``0``````````04)#@
XM1$5&86)C9&5F.3@W-C4T,S(Q,``*"PP-#@\*"PP-#@\)"`<&!00#`@$``#`Q5
XM,C,T-38W.#EA8F-D968````@("`@("`@("`P,#`P,"`@("`@("`@("`@("`@1
XM("`@()!`0$!`0$!`0$!`0$!`0$`,#`P,#`P,#`P,0$!`0$!`0`D)"0D)"0$!`
XM`0$!`0$!`0$!`0$!`0$!`0$!0$!`0$!`"@H*"@H*`@("`@("`@("`@("`@("L
XM`@("`@)`0$!`(``````````````````!``````$`````````````````````L
XM`0$````!``````````````````````$"`````0``````````````````````'
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM```4``````````````/L````#0````$```":````K````+P```#.````W@``_
XM`/````$````!$@```2(```$T```!5@```7@```&>````!P`````````N`````
XI0@```%8```!J````?@```)(```%T`````````_(```/K`````0```_(N.
X``
Xend
Xsize 16196
END_OF_FILE
if test 22712 -ne `wc -c <'amiga/bin/mailchk.uu'`; then
    echo shar: \"'amiga/bin/mailchk.uu'\" unpacked with wrong size!
fi
# end of 'amiga/bin/mailchk.uu'
fi
if test ! -d 'amiga/client' ; then
    echo shar: Creating directory \"'amiga/client'\"
    mkdir 'amiga/client'
fi
if test -f 'amiga/client/DMakefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/client/DMakefile'\"
else
echo shar: Extracting \"'amiga/client/DMakefile'\" \(632 characters\)
sed "s/^X//" >'amiga/client/DMakefile' <<'END_OF_FILE'
X
X#	DNET CLIENTS
X#
X#  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
X#
X#   Aztec C Compilation and Makefile
X
XLFLAGS	= +Q
XSYMS	= include:symbols.m
XSYMD	= ram:symbols.m
XCFLAGS	= +L +I$(SYMS)
XBIN	= /bin/
XOBDIR	= tmp:dnet/
XSRCS	= *.c
XOBJS	= $(OBDIR)*.o
X
Xall: $(SYMS) /lib/dnetlib.lib $(BIN)*
X
X$(BIN)* : $(OBJS)
X	ln $(LFLAGS) %(right) -l/lib/dnetlib -la -lsup32 -lc32 -o %(left)
X
X
X$(OBJS): $(SRCS)
X	cc $(CFLAGS) %(right) -o t:dnet_temp.o
X	copy T:dnet_temp.o %(left)
X	-delete t:dnet_temp.o
X
X/lib/dnetlib.lib: /lib/dnetlib.c
X	cd /lib
X	dmake
X	cd /client
X
Xclean:
X	-delete $(OBDIR)#?.o
X
X$(SYMD) : $(SYMS)
X	Copy %(right) %(left)
X
END_OF_FILE
if test 632 -ne `wc -c <'amiga/client/DMakefile'`; then
    echo shar: \"'amiga/client/DMakefile'\" unpacked with wrong size!
fi
# end of 'amiga/client/DMakefile'
fi
if test -f 'amiga/client/mailchk.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/client/mailchk.c'\"
else
echo shar: Extracting \"'amiga/client/mailchk.c'\" \(14310 characters\)
sed "s/^X//" >'amiga/client/mailchk.c' <<'END_OF_FILE'
X
X/*
X *	MAILCHK.C
X *
X *	DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
X *
X *      Check the mailbox and reports if new mail
X *      has arrived.
X *      
X *      Written by S. Laroche.  
X *    
X *      Usage:  mailchk -N(host) -q -d -t(time)
X *              -d:  Display old mail on startup, if it exists
X *              -q:  Quiet, don't display old mail on startup
X *              Default:  -d
X *
X *              -t:  (time) is the number of seconds between checks.
X *              Default:  40 seconds
X *
X *              -h:  help message
X *
X *      Arp.library is needed... (Version 39.1)
X *      File requester doesn't work, or at least, not with this code.
X */
X
X#include <stdio.h>
X#include <local/typedefs.h>
X#include <arp/arpbase.h>
X#include "/dnet/channel.h"
X#include "/server/servers.h"
X#include <local/deemu.h>
X
Xshort Deemu[] = {
X    DMSTRT, 0, 0,
X    DMNW  , 0, 10, 2, 2, -80, 40, 0xFFFF,
X    DMEND , 0, 0
X};
X
X#define DMNWOFF 4
X
XITEXT IText[] = {
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"View"           },
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Print"          },
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Delete"         },
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Save"           },
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Version"        },
X    { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Remove"         }
X};
X
XITEM Item[] = {
X    { &Item[1], 0, 0, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText[0], NULL, 'v' },
X    { &Item[2], 0,10, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText[1], NULL, 'p' },
X    { &Item[3], 0,20, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText[2], NULL, 'd' },
X    { &Item[4], 0,30, 100, 10, ITEMTEXT|COMMSEQ|HIGHCOMP, 0, (APTR)&IText[3], NULL, 's' },
X    { &Item[5], 0,40, 100, 10, ITEMTEXT|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText[4], NULL},
X    { NULL    , 0,50, 100, 10, ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP, 0, (APTR)&IText[5], NULL, 'r' }
X};
X
XMENU Menu[] = {
X    { NULL    , 0, 0, 100, 10+50, MENUENABLED, "MailChk", &Item[0] }
X};
X
X#define NA  0
X#define MAILLENGTH 132
X
Xubyte Title[128];
X
XNW Nw = {
X    0, 0, 320, 50, -1, -1,
X    NEWSIZE|MENUPICK|CLOSEWINDOW|MOUSEBUTTONS,
X    WINSTD|NOCAREREFRESH,
X    NULL, NULL, Title, NULL, NULL,
X    32, 18, -1, -1, WBENCHSCREEN
X};
X
Xstruct MailMsg {
X  char msg[MAILLENGTH];
X  struct MailMsg *next;
X};
X
Xstruct MailMsg *MailP=NULL;
X
XWIN *Win = NULL;
XRP  *Rp;
X
X/* int Enable_Abort; */
X
Xlong IntuitionBase;
Xlong GfxBase;
Xlong ArpBase;
X
Xmain(ac,av)
Xchar *av[];
X{
X    long chan = NULL;
X    long numsecs = 40L;
X    char firstrun = 1;
X    char *host = NULL;
X
X    ArpBase = (long)OpenLibrary(ArpName,39L);
X    if (ArpBase == NULL) exit(1);
X    {
X      register short i;
X      for (i = 1; i < ac; ++i) {
X        if (strncmp(av[i],"-h",2) == 0) {
X            Printf("MAILCHK - Stephane Laroche February 5, 1990\n");
X            Printf("DNET    - (C) Matthew Dillon 1988\n");
X            Printf("\nUsage:  -t(time) Interval between checks in seconds [DEFAULT = 40 seconds]\n");
X            Printf("        -d Display mailbox on start-up [Default]\n");
X            Printf("        -n Don't display mailbox on start-up\n");
X            Printf("        -h This message...\n");
X            exit(0);
X        }
X        if (strncmp(av[i], "-N", 2) == 0) {
X            host = av[i]+2;                
X            continue;               
X        }
X        if (strncmp(av[i],"-d",2) == 0) {
X            firstrun = 1;
X            continue;
X        }
X        if (strncmp(av[i],"-n",2) == 0) {
X            firstrun = 0;
X            continue;
X        }
X        if (strncmp(av[i],"-t",2) == 0) {
X            numsecs = atoi(av[i]+2);
X            continue;
X        }
X      }
X    }
X
X
X    Enable_Abort = 0;
X    IntuitionBase = (long)OpenLibrary("intuition.library", 0);
X    GfxBase = (long)OpenLibrary("graphics.library", 0);
X    chan = DOpen(host, PORT_MAILCHK, 0, 0);
X    if (chan == NULL) {
X	Puts("no connect");
X	goto fail;
X    }
X    InitDeemuNW(Deemu+DMNWOFF, &Nw);
X    if (initmailserver(chan,numsecs,firstrun))
X         checkmail(chan,numsecs);
X
Xfail:
X    if (Win)
X	CloseWindow(Win);
X    if (chan)
X	DClose(chan);
X    if (IntuitionBase)
X	CloseLibrary(IntuitionBase);
X    if (GfxBase)
X	CloseLibrary(GfxBase);
X    if (ArpBase)
X        CloseLibrary(ArpBase);
X}
X
Xinitmailserver(chan,numsecs,firstrun)
X
Xlong chan, numsecs;
Xchar firstrun;
X
X{
X  char init = 4;
X
X    if ((DWrite(chan,&init,1) == 1) && (DWrite(chan,&numsecs,4) == 4)
X         && (DWrite(chan,&firstrun,1) == 1)) return(1);
X    return(0);
X
X}
Xcheckmail(chan,numsecs)
X
Xlong chan, numsecs;
X
X{
X    long imask=0, dmask, mask;
X    char notdone = 1, nowindow = 0;
X    ULONG prsec = 0, prmic = 0;
X    BYTE pos, oldpos = 0;
X
X    dmask   = 1 << ((PORT *) chan)->mp_SigBit;
X    imask   = 0;
X    while (notdone) {
X	mask = Wait(imask|dmask|SIGBREAKF_CTRL_C|SIGBREAKF_CTRL_E);
X	if (mask & SIGBREAKF_CTRL_C) {
X	    notdone = 0; break; }
X        if (mask & SIGBREAKF_CTRL_E)
X            initmailserver(chan,numsecs,2);
X	if (mask & imask) {
X	    IMESS *im;
X	    while (im = GetMsg(Win->UserPort)) {
X		switch(im->Class) {
X		case NEWSIZE: 
X		    dispnewmail(pos,0,1);
X		    break;
X		case MOUSEBUTTONS:
X		    if (im->Code == SELECTUP) {
X		      if (DoubleClick(prsec,prmic,im->Seconds,im->Micros)
X                          && pos == oldpos) {
X			if (pos > 0) {
X			    getmailmsg(chan,pos,0);
X                        }
X		      }
X		      else {
X			  prsec = im->Seconds;
X			  prmic = im->Micros;
X			    }
X		      if (pos == 0) dispnewmail(0,oldpos,0);
X                      else oldpos = pos;
X		    }
X		    else if (im->Code == SELECTDOWN) {
X                             register short i=1; 
X                             short temp;
X  			     struct MailMsg *p = MailP;
X
X  			     temp = (im->MouseY - Win->BorderTop) / Rp->TxHeight + 1;
X  			     while ( i != temp && p != NULL) { 
X    				i++;
X    				p = p->next;
X  			     }
X  			     if (p == NULL) { oldpos = pos; pos = 0;}
X                	     else { pos = temp;
X                                    dispnewmail(pos,oldpos,0);
X                                  }
X			 }
X		    break;
X		case CLOSEWINDOW:
X		    nowindow = 1;
X		    break;
X	        case MENUPICK:
X		    switch((uword)((MENUNUM(im->Code)<<8)|ITEMNUM(im->Code))) {
X		    case 0x0000:    /*	View 	*/
X			getmailmsg(chan,pos,0);
X                        break;
X		    case 0x0001:    /*	Print	*/
X                        getmailmsg(chan,pos,1);
X                        break;
X                    case 0x0002:    /*  Delete	*/
X                        delmailmsg(chan,pos);
X                        break;
X                    case 0x0003:
X                        getmailmsg(chan,pos,2);
X                        break;
X                    case 0x0004:
X                        sprintf(Title, "MailChk V%s%s - S. Laroche 1990", VERSION, MAILCHK_VERSION); 
X                        SetWindowTitles(Win,Title,-1);
X                        break;
X                    case 0x0005:
X                        notdone = 0;
X                        break;
X                    }	
X		}
X                ReplyMsg(im);
X	    }
X	}
X	if (mask & dmask) {
X	    char len = 0;
X
X	    if (DRead(chan, &len, 1) == 1) {
X		if (len < sizeof(Title) && DRead(chan, Title, len) == len) {
X		    Title[len-1] = 0;
X		    if (strncmp(Title,"No mail",7) == 0) nowindow = 1;
X		    else { if (strncmp(Title,"New mail",8) == 0) {
X			       DisplayBeep(NULL);
X			   }
X			   if (Win == NULL) {
X			       Win = OpenWindow(&Nw);
X			       if (Win != NULL) {
X				   Rp = Win->RPort;
X                                   SetMenuStrip(Win,Menu);
X				   imask   = 1 << Win->UserPort->mp_SigBit;
X			       }
X			   }
X			   else WindowToFront(Win);
X			   {
X                            short temp=0;
X                            char buf[25], buf2[9];
X
X    			    getnewmail(chan,&temp);
X                            if (temp > 1) strcpy(buf2,"messages");
X                            else strcpy(buf2,"message");
X			    sprintf(buf," (%d %s)",temp,buf2);
X                            strcat(Title,buf);
X			    dispnewmail(0,0,1);
X                           }
X			   if (Win != NULL) SetWindowTitles(Win, Title, -1);
X                           else Puts(Title);
X		    }
X		}
X	    }
X	    else notdone = 0;
X	}
X	if (nowindow && Win) {
X            ClearMenuStrip(Win);
X	    CloseWindow(Win);
X	    Win = NULL;
X	    imask = 0;
X	}
X	nowindow = 0;
X    }
X
X    freemail(MailP);
X    if (Win) {
X        ClearMenuStrip(Win);
X	CloseWindow(Win);
X	Win = NULL;
X    }
X}
X
X/*
X *  Utility routines.	************************************************
X */
X
Xgetnewmail(chan,count)
X
Xlong chan;
Xregister short *count;
X
X{
X  char len = 1;
X  struct MailMsg *p;
X  
X  freemail(MailP);
X  if (DWrite(chan, &len, 1) == 1 && DRead(chan, &len, 1) == 1) {
X      while (len > 0) {   
X        if (MailP) { 
X            p->next = AllocMem(sizeof(*p),0);
X            p = p->next;
X        }
X        else {
X            MailP = AllocMem(sizeof(*p),0);
X            p = MailP;
X        }
X        if (p == NULL) break;
X        else p->next = NULL; 
X        if (len < MAILLENGTH && (DRead(chan, p->msg, len) == len)) { 
X            DRead(chan,&len,1);
X            if (Win == NULL) p->msg[len-1] = 0;
X            (*count)++;
X        }
X        else break;
X        
X      }
X  }
X}
X
Xdispnewmail(ONmsgno,OFFmsgno,flag)
X
XBYTE ONmsgno, OFFmsgno, flag;
X
X{
X  char th, tb, tw;
X  short y, Wh, Ww, WOx, WOy;
X  int len;
X  struct MailMsg *p;
X  BYTE i=1;
X
X  p = MailP;
X  if (Win != NULL) {
X      th = Rp->TxHeight;
X      tb = Rp->TxBaseline;
X      tw = Rp->TxWidth;
X      y = Win->BorderTop;
X      Ww = Win->Width - Win->BorderRight - Win->BorderLeft;
X      Wh = Win->Height- Win->BorderTop - Win->BorderBottom;
X      WOx = Win->BorderLeft;
X      WOy = Win->BorderTop;
X      if (flag) {
X	  SetAPen(Rp, 0);
X	  RectFill(Rp, WOx, WOy, Ww + WOx, Wh + WOy);
X      }
X  }
X  while (p != NULL && ((Win == NULL) || ((y+tb) < Wh))) {
X    short tl;
X
X    if (! Win && flag) Puts(p->msg);
X    else { if (flag || i == ONmsgno || i == OFFmsgno) {
X               if (ONmsgno == i) {
X                   SetBPen(Rp,2);
X                   SetAPen(Rp,0);
X               }
X               else {
X                   SetAPen(Rp,2);
X                   SetBPen(Rp,0);
X               } 
X               len = strlen(p->msg);
X	       tl = TextLength(Rp,p->msg,len);
X	       if (tl > Ww) len = Ww / tw;
X	       Move(Rp,Win->BorderLeft,y+tb);
X	       Text(Rp,p->msg,len);
X               if (ONmsgno == i) SetAPen(Rp,2);
X               else if (OFFmsgno == i || flag) SetAPen(Rp,0);
X	       RectFill(Rp,Rp->cp_x,y,Ww+WOx,y+th-1);
X           }
X 	   y += th;
X	   i++;
X    }
X    p = p->next;
X  }
X}
X
Xdelmailmsg(chan,msgno)
X
Xlong chan;
XBYTE msgno;
X
X{
X  register BYTE i=1;
X  struct MailMsg *p = MailP;
X  char dummy[32];
X  BYTE dl = 3, ok;
X  unsigned long stchar = 0,nochars;
X
X  for (i=1; (i != msgno && p != NULL); i++) {
X    getmailprm(p,&nochars,dummy);
X    stchar += nochars;
X    p = p->next;
X  }
X  if (p == NULL) return();
X  getmailprm(p,&nochars,dummy);
X   
X  if ((DWrite(chan,&dl,1) == 1) &&
X      (DWrite(chan,&stchar,4) == 4) &&
X      (DWrite(chan,&nochars,4) == 4) &&
X      (DRead(chan,&ok,1) == 1)) {
X      if (ok) {
X          freemail(MailP);
X          strcpy(Title,"Delete successful, refreshing...");
X          SetWindowTitles(Win,Title,-1);
X          dispnewmail(0,0,1);
X      }
X  }
X}
X
Xint getmailmsg(chan,msgno,flag)
X
Xlong chan;
XBYTE msgno, flag;
X
X{
X  struct MailMsg *p = MailP;
X  BYTE i, ok=0, hd = 2, l, start = 0;
X  unsigned long stchar=0, nochars, len;
X  long fh;
X  ubyte *buf;
X  char pname[128], vname[100], title[132], *tmp;
X  int rcode = 1;
X  struct NewShell *NS;
X  struct FileRequester *FileReq;
X
X  if (NS = AllocMem(sizeof(*NS)+4096,MEMF_CLEAR|MEMF_PUBLIC)) {
X      NS->nsh_StackSize = 4000;
X      NS->nsh_Control = BACKGROUND_SHELL;
X  }
X  else return(rcode);
X  strcpy(vname,"DPIPE:Mail");
X  switch (flag) {
X    case 0:
X      if ((tmp = GetDEnv("PAGER")) == NULL) {
X          strcpy(pname,"sys:utilities/more");
X      }
X      else { strcpy(pname,tmp);
X             free(tmp);
X      }
X      strcat(pname," ");
X      strcat(pname,vname);
X      strcpy(title,"Viewing ");
X      start = 1;
X      break;
X    case 1:
X      strcpy(vname,"PRT:");
X      strcpy(title,"Printing ");
X      break;
X    case 2:
X      { /*struct DefaultTracker *TR;*/
X
X      strcpy(title,"Saving ...");
X/*      FileReq = ArpAllocFreq(); 
X      TR = LastTracker; 
X      FileReq->fr_Hail = "MAILCHK:  Save to which file?"; 
X      FileReq->fr_Dir = "MAIL:";
X      FileReq->fr_Window = Win; 
X      if (!(FileRequest(FileReq))) {             ->  Doesn't work... why?  
X           FreeTrackedItem(TR);  return(rcode);}
X      printf("vname= %s\n",vname);
X      strcpy(vname,FileReq->fr_Dir);
X      TackOn(vname,FileReq->fr_File); 
X      FreeTrackedItem(TR); */
X      return(rcode);
X      } 
X      break;
X  }
X  buf = (ubyte *) (NS + sizeof(*NS));
X  l = strlen(title);
X  for (i=1; (i != msgno && p != NULL); i++) {
X    getmailprm(p,&nochars,title+l);
X    stchar += nochars;
X    p = p->next;
X  }
X  if (p == NULL) return(rcode);
X  getmailprm(p,&nochars,title+l);
X  if (flag == 0) {
X      strcat(title," using ");
X      strcat(title,pname);
X  }
X  SetWindowTitles(Win, title, -1);
X  if (fh = Open(vname,1006)) {
X      if (DWrite(chan, &hd, 1) == 1 && DWrite(chan, &stchar, 4) == 4
X	  && DWrite(chan,&nochars,4) == 4) {
X	  while (DRead(chan,&len,4) == 4 && len > 0) {
X            if (DRead(chan,buf,len) == len) {
X	        if (Write(fh,buf,len) != len) {
X                    ok = 1;
X		    DWrite(chan,&ok,1);
X		    rcode = 0;
X		    break;
X		}
X                if (start) {
X                    if (ASyncRun(pname,0L,NS) < 0) {
X                        ok = 1;
X                        DWrite(chan,&ok,1);
X                        rcode = 0;
X                        break;
X                    }
X                    start = 0;
X                }
X	        DWrite(chan,&ok,1);
X	    }
X          }
X      }
X      Close(fh);
X  }
X  else {
X	rcode = 0;
X  }
X  SetWindowTitles(Win,Title,-1);
X  FreeMem(NS,sizeof(*NS)+4096);
X  return(rcode);
X}
X
Xgetmailprm(p,nochars,title)
X
Xstruct MailMsg *p;
Xunsigned long *nochars;
Xchar *title;
X
X{
X  char *str;
X
X  if (str = index(p->msg,'/')) {
X      sscanf(++str,"%ld %s",nochars,title);
X  }
X  else *nochars = 0;
X}
X
Xfreemail(p)
X
Xstruct MailMsg *p;
X
X{
X  while (p != NULL) {
X    FreeMem(p,sizeof(*p));
X    p = p->next;
X  }
X  MailP = NULL;
X}
X
X
END_OF_FILE
if test 14310 -ne `wc -c <'amiga/client/mailchk.c'`; then
    echo shar: \"'amiga/client/mailchk.c'\" unpacked with wrong size!
fi
# end of 'amiga/client/mailchk.c'
fi
if test ! -d 'amiga/doc' ; then
    echo shar: Creating directory \"'amiga/doc'\"
    mkdir 'amiga/doc'
fi
if test -f 'amiga/doc/mailchk.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/doc/mailchk.doc'\"
else
echo shar: Extracting \"'amiga/doc/mailchk.doc'\" \(2071 characters\)
sed "s/^X//" >'amiga/doc/mailchk.doc' <<'END_OF_FILE'
XAMIGA/MAILCHK
X
X    MAILCHK [-Nnet] [-tupdatetime] [-d] [-n] [-h]
X
X    The -N option specifies the network (default = 0).  This is the same
X    network as was specified when you ran DNET (if was not specified, is 0)
X
X    The -t option specifies the time between checks [DEFAULT = 40s].
X    The -d option notifies MAILCHK that you want to see your mailbox
X                  on startup [DEFAULT].
X    The -n option specifies no mailbox on startup
X    The -h option displays a help message.
X
X
X    The Mail/mail program must be present on the Unix host for this client
Xto work.  See SMAILCHK.DOC in the unix/doc directory.
X
X    With MAILCHK, you may view letters using you favorite text viewer. 
XThis viewer must be able to read from the DPIPE: device.  I know that TY
Xand MUCHMORE work as expected.  LESS V1.3 DOES NOT WORK with the DPIPE:
X(or the PIPE:) device.  The default viewer is SYS:UTILITIES/More.  To
Xchange it, use SETENV PAGER "path/your viewer".  The DPIPE: device must be
Xmounted for this option to work.
X
XNOTE:  You need ARP.LIBRARY V39.1 to run this program.
X------------------------------------------------------ 
X    
X    The other options are PRINT and DELETE.  PRINT output the selected
Xletter to the PRT: device and DELETE will remove a message from your UNIX
XMAILBOX, if you have write access to the unix spool directory.
X
X    REMOVE will terminate the client (equivalent to 'break [CLI #] c').
XClosing the window will not remove MAILCHK.  If you closed the window and
Xwant to get it back, use 'break [CLI #] e'.
X
X    In an earlier version, I had a SAVE option but I had to remove it
Xbecause it became unreliable.  If one day I learn how to get the ARP file
Xrequester to work correctly, I will put this option back...
X
XBUGS
X
X    The DPIPE: device seems to choke on big transfers. 
Xavoid reading files that contain a uuencoded program...
XIf the PIPE: device was working with ARP, it would also have simplified
Xthings a bit.
X
X 
XStephane Laroche
XFebruary 9, 1990
X
XINTERNET:  B85O@MUSICB.MCGILL.CA
X
XBefore (september 1990):  lobster@calvin.cs.mcgill.ca
X    
END_OF_FILE
if test 2071 -ne `wc -c <'amiga/doc/mailchk.doc'`; then
    echo shar: \"'amiga/doc/mailchk.doc'\" unpacked with wrong size!
fi
# end of 'amiga/doc/mailchk.doc'
fi
if test ! -d 'amiga/server' ; then
    echo shar: Creating directory \"'amiga/server'\"
    mkdir 'amiga/server'
fi
if test -f 'amiga/server/servers.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/server/servers.h'\"
else
echo shar: Extracting \"'amiga/server/servers.h'\" \(643 characters\)
sed "s/^X//" >'amiga/server/servers.h' <<'END_OF_FILE'
X
X/*
X *  SERVERS.H
X *
X *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
X *
X */
X
X#include "/version.h"
X
X#define PORT_FILECOPY	8192
X#define PORT_ALPHATERM	8193
X#define PORT_ECHO	8194
X#define PORT_IALPHATERM 8195
X#define PORT_AMIGASHELL 8196
X#define PORT_LOADAV	8197
X#define PORT_PRINTER	8198
X#define PORT_PASSWD	8199
X#define PORT_BBS	8200
X#define PORT_GFILECOPY	8201
X#define PORT_MAILCHK    8204
X
X#define DNET_WRITE  "DNET_WRITE"
X#define DNET_READ   "DNET_READ"
X#define DNET_LEVEL  "DNET_LEVEL"
X#define DNET_GROUP  "DNET_GROUP"
X
X#define FS_GROUP    "GR="   /*  MUST INCLUDE '=' cause I use strncmp()  */
X#define FS_ACCESS   "AC="
X
END_OF_FILE
if test 643 -ne `wc -c <'amiga/server/servers.h'`; then
    echo shar: \"'amiga/server/servers.h'\" unpacked with wrong size!
fi
# end of 'amiga/server/servers.h'
fi
if test -f 'amiga/version.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga/version.h'\"
else
echo shar: Extracting \"'amiga/version.h'\" \(527 characters\)
sed "s/^X//" >'amiga/version.h' <<'END_OF_FILE'
X
X#define VERSION 	    "2.01"
X
X#define DNET_VERSION	    ".10"
X#define STATDNET_VERSION    ".04"
X#define PUTFILES_VERSION    ".03"
X#define LOADAV_VERSION	    ".05"
X#define FTERM_VERSION	    ".04"
X#define QUITDNET_VERSION    ".01"
X#define GETFILES_VERSION    ".02"
X#define CLITERM_VERSION     ".01"
X#define MAILCHK_VERSION     ".01"
X
X#define SPRINT_VERSION	    ".01"
X#define SGCOPY_VERSION	    ".01"
X#define SCOPY_VERSION	    ".03"
X#define STERM_VERSION	    ".03"
X#define SCLI_VERSION	    ".02"
X#define SPASSWD_VERSION     ".01"
X
END_OF_FILE
if test 527 -ne `wc -c <'amiga/version.h'`; then
    echo shar: \"'amiga/version.h'\" unpacked with wrong size!
fi
# end of 'amiga/version.h'
fi
if test ! -d 'unix' ; then
    echo shar: Creating directory \"'unix'\"
    mkdir 'unix'
fi
if test ! -d 'unix/doc' ; then
    echo shar: Creating directory \"'unix/doc'\"
    mkdir 'unix/doc'
fi
if test -f 'unix/doc/smailchk.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'unix/doc/smailchk.doc'\"
else
echo shar: Extracting \"'unix/doc/smailchk.doc'\" \(682 characters\)
sed "s/^X//" >'unix/doc/smailchk.doc' <<'END_OF_FILE'
X
X
XUNIX/SMAILCHK
X
X
X
X	(Port number 8204: MAILCHK client)
X
X        This server handles only one connection.  You must add an entry in
Xyour 'dnet.servers' file for this server.
X
X      Eg:  8204  /u/home/loginname  /u/home/loginname/dnetbin/smailchk
X
X
X	This server expects to find your mailbox in the /var/spool/mail
Xdirectory.  If, on your system, your mailbox is located in a different
Xplace, then store the path in the environment variable MAIL.
X
X      Eg.  setenv MAIL /spool/mail
X
X	To compile the program, type 'make' in the dnet/unix/server
Xdirectory. 
X
X
X
XStephane Laroche
XFebruary 9, 1990
X
XINTERNET:  B85O@MUSICB.MCGILL.CA
X
XBefore (september 1990):  lobster@calvin.cs.mcgill.ca
X 
END_OF_FILE
if test 682 -ne `wc -c <'unix/doc/smailchk.doc'`; then
    echo shar: \"'unix/doc/smailchk.doc'\" unpacked with wrong size!
fi
# end of 'unix/doc/smailchk.doc'
fi
if test ! -d 'unix/server' ; then
    echo shar: Creating directory \"'unix/server'\"
    mkdir 'unix/server'
fi
if test -f 'unix/server/servers.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'unix/server/servers.h'\"
else
echo shar: Extracting \"'unix/server/servers.h'\" \(450 characters\)
sed "s/^X//" >'unix/server/servers.h' <<'END_OF_FILE'
X
X/*
X *  SERVERS.H
X *
X *	DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
X */
X
X#define PORT_FILECOPY	8192
X#define PORT_ALPHATERM	8193
X#define PORT_ECHO	8194
X#define PORT_IALPHATERM 8195
X#define PORT_AMIGATERM	8195
X#define PORT_AMIGASHELL 8196
X#define PORT_LOADAV	8197
X#define PORT_PRINTER	8198
X#define PORT_PASSWD	8199
X#define PORT_BBS	8200
X#define PORT_GFILECOPY	8201
X#define PORT_NFS	8202
X#define PORT_ND		8203
X#define PORT_MAILCHK	8204
X
END_OF_FILE
if test 450 -ne `wc -c <'unix/server/servers.h'`; then
    echo shar: \"'unix/server/servers.h'\" unpacked with wrong size!
fi
# end of 'unix/server/servers.h'
fi
if test -f 'unix/server/smailchk.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'unix/server/smailchk.c'\"
else
echo shar: Extracting \"'unix/server/smailchk.c'\" \(7731 characters\)
sed "s/^X//" >'unix/server/smailchk.c' <<'END_OF_FILE'
X
X/*
X *	SMAILCHK.C
X *
X *	DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
X *
X *      Check the mailbox and reports if new mail
X *      has arrived.  Connects to the Mailchk client on the Amiga.
X *      Accepts only one connection.
X *      
X *      Written by S. Laroche.  
X */
X
X#include <stdio.h>
X#include <sys/time.h>
X#include <sys/file.h>
X#include <errno.h>
X#include <signal.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X
X#include "servers.h"
X
X#define BUFLENGTH 512
X
Xextern int errno;
X
Xvoid do_mailchk();
Xchar delmailmsg();
Xchar copyfiles();
X
Xlong numsecs;
Xchar firstrun;
Xint fd;
X
Xmain(ac,av)
Xchar *av[];
X{
X    long chann = DListen(PORT_MAILCHK);
X    char result;
X
X    if (av[1])
X	chdir(av[1]);
X    signal(SIGPIPE, SIG_IGN);
X    signal(SIGALRM, do_mailchk);
X    for (;;) {
X	fd = DAccept(chann);
X	if (fd < 0) {
X	    if (errno == EINTR)
X		continue;
X	    break;
X	}
X    	getmailpath();
X        while (ggread(fd,&result,1) == 1) {
X          Whatdoyouwant(fd,result);
X        }
X    	close(fd);
X    	_exit(1);
X    }
X    perror("SMAILCHK");
X}
X
Xchar buf[256], mname[256];
X
Xgetmailpath()
X
X{
X    char *buffer;
X
X    buffer = (char *) getenv("MAIL");
X    if (buffer == NULL) {
X       strcpy(mname,"/var/spool/mail/");
X    }
X    else {
X       strcpy(mname,buffer);
X       strcat(mname,"/");
X    }
X    cuserid(buf);
X    strcat(mname,buf);
X}
X
XWhatdoyouwant(fd,result)
X
Xint fd;
Xchar result;
X
X/*  This function interprets requests from the Amiga client.
X    0 -> Do nothing
X    1 -> Send the mail header from Mail.
X    2 -> Send a particular message.
X    3 -> Delete a particular message.
X    4 -> Initial handshake
X*/
X
X{
X    char dummy, *buffer;
X    FILE *fi;
X
X    switch(result) {
X        case 1 : 
X          fi = popen("mail -H","r");
X          if (fi == NULL) {
X              perror("SMAILCHK, mail program not found");
X              exit(0);
X          }
X          while (fgets(buf,256,fi) != NULL) {
X            dummy = strlen(buf);
X            buf[dummy-1] = 0;
X            gwrite(fd,&dummy,1);
X            gwrite(fd,buf,dummy);
X          }
X          dummy = 0;
X          gwrite(fd,&dummy,1);
X	  if (ferror(fi)) {
X            perror("SMAILCHK, error executing mail");
X	    exit(0);
X          }
X	  pclose(fi);
X          break;
X        case 2 :
X          buffer = (char *) malloc(BUFLENGTH);
X          if (buffer == NULL) {
X              fprintf(stderr,"SMAILCHK:  not enough memory\n");
X          }
X          else {
X              sendmailmsg(fd,mname,buffer);
X              free(buffer);
X          }
X          break;
X	case 3 :
X          { char ok;
X           
X          ok = delmailmsg(fd,mname);
X          gwrite(fd,&ok,1);
X           if (ok) { alarm(0); do_mailchk();}
X          }
X          break;
X        case 4 :
X          if ((ggread(fd,&numsecs,4)  == 4) &&
X              (ggread(fd,&firstrun,1) == 1)) { alarm(0); do_mailchk(); }
X          else { close(fd); _exit(1); }
X    }
X}
X
Xvoid do_mailchk()
X
X{
X    char dummy, *s_mtime;
X    struct stat tempbuf;
X    static char nomail = 1;
X    static long lasttime = 0;
X    
X    strcpy(buf,"=");
X    alarm(numsecs);
X    if (stat(mname,&tempbuf) == -1) {
X        if (errno == ENOENT) { if (nomail) {
X                                   strcpy(buf,"No mail.");
X                                   nomail = 0;
X                               }
X        }
X        else perror("SMAILCHK, Unable to examine file");
X    }
X    else {
X        if (tempbuf.st_mtime >= tempbuf.st_atime) {
X            s_mtime = ctime(&tempbuf.st_mtime); 
X            strcpy(buf,"New mail arrived on "); 
X            strcat(buf,s_mtime);
X            nomail = 1;
X        }
X        else if ((firstrun && (tempbuf.st_mtime > lasttime)) ||
X                  firstrun == 2)
X                 strcpy(buf,"You have mail\n");
X        lasttime = tempbuf.st_mtime;
X    }
X    dummy = strlen(buf);
X    if (dummy > 2) {
X        gwrite(fd, &dummy, 1);
X        gwrite(fd, buf, dummy);
X    }
X    firstrun = 1;
X}
X
Xsendmailmsg(fd,mname,buffer)
X
Xchar *buffer, *mname;
Xint fd;
X
X{
X  int len= BUFLENGTH;
X  long nochars, stchar;
X  char dummy;
X  FILE *fi;
X
X  if (ggread(fd,&stchar,4) == 4) {
X      if (ggread(fd,&nochars,4) == 4) {
X          if (fi = fopen(mname,"r")) {
X              if (fseek(fi,stchar,0) < 0) {
X                  fclose(fi);
X                  exit;
X              }
X              else {
X                  dummy = 0;
X                  while (nochars > len) {
X                         fread(buffer,1,len,fi);
X                         nochars -= len;
X                         gwrite(fd,&len,4); 
X                         gwrite(fd,buffer,len);
X                         ggread(fd,&dummy,1);
X                         if (dummy) break;
X                        }
X                  if (dummy == 0) {
X                      if (fread(buffer,1,nochars,fi) != nochars) {
X                          perror("SMAILCHK, unable to read mail file");
X                          exit;
X                      }
X                      gwrite(fd,&nochars,4); 
X                      gwrite(fd,buffer,nochars);
X                      ggread(fd,&dummy,1);
X                      nochars = 0;
X                      gwrite(fd,&nochars,4);
X                  }
X              }
X              fclose(fi); 
X           }
X       }
X   }
X}
X
Xchar delmailmsg(fd,mname)
X
Xchar *mname;
Xint fd;
X
X{
X  long nochars, stchar;
X  FILE *f1, *f2;
X  char ok = 0, *tname;
X
X
X  if (!(tname = (char *) getenv("DNETDIR"))) return(ok);
X  strcpy(buf,tname);
X  strcat(buf,"MAIL0001");
X  if (ggread(fd,&stchar,4) == 4) 
X      if (ggread(fd,&nochars,4) == 4) 
X          if ((f1 = fopen(mname,"r")) && (f2 = fopen(buf,"w+"))) {
X              if (copyfiles(f1,f2,stchar)) 
X                  if (fseek(f1,nochars,1) == 0) 
X                      if (ok = copyfiles(f1,f2,-1)) {
X                          fclose(f1);
X                          if (unlink(mname) < 0) {
X                              perror("SMAILCHK, Error while removing");
X                              fclose(f2);
X                              unlink(buf);
X                              return(0);
X                          }
X                          rewind(f2);
X                          if (f1 = fopen(mname,"w")) {
X                              fchmod(f1,0600);
X                              ok = copyfiles(f2,f1,-1);
X                              fclose(f1);
X                              fclose(f2);
X                              unlink(buf);
X                          }
X                          else {
X                              perror("SMAILCHK, Error writing in spool dir");
X                              fclose(f2);
X                              return(0);
X                          }
X                          if (f1 = fopen(mname,"r")) { /* Touch the file */
X                              char f = 0;
X                              fseek(f1,0,2);
X                              if (ftell(f1) < 2) f = 1; 
X                              fclose(f1);
X                              if (f) unlink(mname);
X                          }
X                          return(ok);
X                      }
X              perror("SMAILCHK, Error while writing");
X              fclose(f1);
X              fclose(f2);
X              return(0);
X          }
X  perror("SMAILCHK, Delete operation");
X  return(0);
X}
X
Xchar copyfiles(f1,f2,n)
X
XFILE *f1, *f2;
Xlong n;
X
X{
X  char buffer[1024], ok = 1;
X  int tmp;
X
X  while (n > 1024 || n < 0) {
X    if (n > 0) n -= 1024;
X    if ((tmp = fread(buffer,1,1024,f1)) == 1024) 
X        if (fwrite(buffer,1,1024,f2) == 1024)
X            continue;
X    ok = 0;
X    break;
X  }
X  while (ok && n > 0) {
X      if (fread(buffer,1,n,f1) == n) 
X          if (fwrite(buffer,1,n,f2) == n)
X              break;
X      ok = 0;
X  }
X  if (n >= 0) return(ok); 
X  if (fwrite(buffer,1,tmp,f2) == tmp) ok = 1;
X  return(ok);
X}
END_OF_FILE
if test 7731 -ne `wc -c <'unix/server/smailchk.c'`; then
    echo shar: \"'unix/server/smailchk.c'\" unpacked with wrong size!
fi
# end of 'unix/server/smailchk.c'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    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.