[comp.sources.amiga] v91i099: MSClock 1.3 - yet another clock utility, Part01/01

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/08/91)

Submitted-by: stefanb@cip-s01.informatik.rwth-aachen.de (Stefan Becker)
Posting-number: Volume 91, Issue 099
Archive-name: utilities/msclock-1.3/part01

[ includes uuencoded executable and handler  ...tad ]

Yet another clock utility, nobody has been waiting for.
MSClock recognizes overscan-workbenches and displays memory, date, time and
online time (if connected to another computer via modem).

#!/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:  MSClock1_3.doc c c/MSClock.uu l l/MSClock-Han.uu source
#   source/MSClock-Handler.c source/MSClock.c source/makefile
# Wrapped by tadguy@ab20 on Tue May  7 20:24:57 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'MSClock1_3.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MSClock1_3.doc'\"
else
echo shar: Extracting \"'MSClock1_3.doc'\" \(949 characters\)
sed "s/^X//" >'MSClock1_3.doc' <<'END_OF_FILE'
XMSClock V1.3  (c) 12.02.91 by Martin Steppler
X
XYet another clock utility, nobody has been waiting for.
XMSClock recognizes overscan-workbenches and displays memory, date, time and
Xonline time (if connected to another computer via modem).
XThat's all. If it's not enough for you, enhance it by yourself!
XFeel free to use, copy or destroy it!
X
XUSAGE:  MSClock [-t] [-d] [-m] [-e] [-r] [-q] [quit] [h]
X
X        -t    time   off/on                default: on
X        -d    date   off/on                default: on
X        -m    memory off/on                default: on
X        -o    online time off/on           default: on
X        -e    English weekdays on/off      default: German on
X        -r    reverse date display on/off  default: off
X        -q    quit MSClock
X         quit
X         h    or any other key: help
X
XBye, Martin.
X
XInterNet: steppler@cip-s01.informatik.rwth-aachen.de
XFidoNet:  Martin Steppler @ 2:242/7.12
XPhone:    +47-(0)241-158579
END_OF_FILE
if test 949 -ne `wc -c <'MSClock1_3.doc'`; then
    echo shar: \"'MSClock1_3.doc'\" unpacked with wrong size!
fi
# end of 'MSClock1_3.doc'
fi
if test ! -d 'c' ; then
    echo shar: Creating directory \"'c'\"
    mkdir 'c'
fi
if test -f 'c/MSClock.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'c/MSClock.uu'\"
else
echo shar: Extracting \"'c/MSClock.uu'\" \(8630 characters\)
sed "s/^X//" >'c/MSClock.uu' <<'END_OF_FILE'
Xbegin 666 MSClock
XM```#\P`````````#``````````(```7E0```'`````$```/I```%Y4[Z$&I.H
XM50``2.<``'``3-\``$Y=3G5.5?_@2.<`()/)+&R`#DZN_MHD0"M\````)__\A
XM0JW_]$*M__`K0O_H)#P```/M0?H($B((+&R`$DZN_^(D+?_H*T#_['``0_H'L
XM_"QL@`Y.KOW8*4"`%F<`!Z9P`$/Z!_@L;(`.3J[]V"E`@!IG``>00_H'\"QLV
XM@`Y.KOYZ*4"`'F<```P@;(`>*V@`/O_\*WP````!__A@```&4JW_^"`M__BPA
XMK0`(;``!_DAZ!\H@+?_XY8`@;0`,+S`(`$ZZ#W103TJ`9P``($AZ![$@+?_X5
XMY8`@;0`,+S`(`$ZZ#U903TJ`9@``#BM\`````?_T8``!MDAZ!XH@+?_XY8`@]
XM;0`,+S`(`$ZZ#RQ03TJ`9@``*@@M``#__V<``!`@+?_\`H`````^8```"B`M%
XM__P(P```*T#__&```6Q(>@='("W_^.6`(&T`#"\P"`!.N@[F4$]*@&8``"H(L
XM+0`!__]G```0("W__`*`````/6````H@+?_\",```2M`__Q@``$F2'H'!"`ML
XM__CE@"!M``PO,`@`3KH.H%!/2H!F```J""T``O__9P``$"`M__P"@````#M@<
XM```*("W__`C```(K0/_\8```X$AZ!L$@+?_XY8`@;0`,+S`(`$ZZ#EI03TJ`-
XM9@``*@@M``/__V<``!`@+?_\`H`````W8```"B`M__P(P``#*T#__&```)I(C
XM>@9^("W_^.6`(&T`#"\P"`!.N@X44$]*@&8``"H(+0`$__]G```0("W__`*`"
XM````+V````H@+?_\",``!"M`__Q@``!42'H&.R`M__CE@"!M``PO,`@`3KH-(
XMSE!/2H!F```J""T`!?__9P``$"`M__P"@````!]@```*("W__`C```4K0/_\$
XM8```#BM\`````?_P8```!F``_?9*K?_P9P`!B$JM_^QG``&`2.T`#/_D2'H&*
XM!DZZ$J!83R8`0?H%QB0((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H&1DZZ0
XM$G983R8`0?H&!"0((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H&BDZZ$DQ81
XM3R8`0?H&1B0((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H&T$ZZ$B)83R8`$
XM0?H&C"0((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H'%DZZ$?A83R8`0?H&R
XMTB0((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H'7$ZZ$<Y83R8`0?H'&"0(8
XM(BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H'J4ZZ$:183R8`0?H'7B0((BW_1
XM["QL@!).KO_03.T`#/_D2.T`#/_D2'H']TZZ$7I83R8`0?H'LB0((BW_["QL_
XM@!).KO_03.T`#/_D2.T`#/_D2'H((DZZ$5!83R8`0?H'^B0((BW_["QL@!).E
XMKO_03.T`#/_D8``#S$JL@!YF``)V2JW_]&8``FXB/``!``%P2BQL@`Y.KO\Z[
XM*4"`'F<``E(@;(`>$7P``@`.(&R`'D(H``D@;(`>$7P`!``(<@%P%"QL@`Y.4
XMKO\Z(&R`'B%```H@;(`>0J@`+B!L@!XA2@`J(&R`'B%\````2@`F+RW__$ZZ3
XM"K983R!L@!XA0``V3KH+&"!L@!Z0J``V(&R`'B%``#(@;(`>0J@`.B!L@!XA!
XM;?_\`#X@;(`>(6W__`!"2'H'="!L@!XO*``*3KH0CE!/(&R`'M'\````%"\(J
XM3KH0:EA/0?H'9"((+&R`$DZN_VH@;(`>(4``(F8``!A!^@=:(@@L;(`23J[_>
XM:B!L@!XA0``B(&R`'DJH`")F``!><!0@;(`>(F@`"BQL@`Y.KO\N(&R`'B`H<
XM`"8B;(`>+&R`#DZN_RY*K?_L9P``+$CM``S_Y$AZ!W!.N@_>6$\F`$'Z!QXDY
XM""(M_^PL;(`23J[_T$SM``S_Y&```0@B;(`>+&R`#DZN_IY([0`<_^`H/```&
XM$``@;(`>)B@`(G0%0?H';"((+&R`$DZN_W9,[0`<_^`@/```(``L;(`.3J[^F
XMPB!L@!Y*J``N9@``AB)L@!XL;(`.3J[^F'`4(&R`'B)H``HL;(`.3J[_+B!LY
XM@!Y*J``B9P``$B!L@!XB*``B+&R`$DZN_V0@;(`>("@`)B)L@!XL;(`.3J[_O
XM+DJM_^QG```L2.T`#/_D2'H'2TZZ#PI83R8`0?H&^20((BW_["QL@!).KO_0>
XM3.T`#/_D8```-$JM_^QG```L2.T`#/_D2'H'HDZZ#M183R8`0?H'3R0((BW_"
XM["QL@!).KO_03.T`#/_D8``!4$JL@!YG``#D2JW_]&<``-P@;(`>(4H`*B`\A
XM```@`"!L@!XB:``N+&R`#DZN_KP@/```(``L;(`.3J[^PB)L@!XL;(`.3J[^(
XMF'`4(&R`'B)H``HL;(`.3J[_+B!L@!Y*J``B9P``$B!L@!XB*``B+&R`$DZN<
XM_V0@;(`>("@`)B)L@!XL;(`.3J[_+DJM_^QG``!62.T`#/_D2'H'@TZZ#A18'
XM3R8`0?H',20((BW_["QL@!).KO_03.T`#/_D2.T`#/_D2'H'QTZZ#>I83R8`K
XM0?H'DR0((BW_["QL@!).KO_03.T`#/_D8```9DJL@!YG``!>(&R`'B%M__P`J
XM0B\M__Q.N@>R6$\@;(`>(4``-DZZ"!0@;(`>D*@`-B!L@!XA0``R(&R`'B%*0
XM`"H@/```$``@;(`>(F@`+BQL@`Y.KOZ\(#P``"``+&R`#DZN_L)*K?_L9P``[
XM#B(M_^PL;(`23J[_W$JL@!9G```.(FR`%BQL@`Y.KOYB2JR`&F<```XB;(`:=
XM+&R`#DZN_F),WP0`3EU.=2H`:6YT=6ET:6]N+FQI8G)A<GD`9&]S+FQI8G)A-
XM<GD`36%R=&EN)W,@0VQO8VLM4&]R=`!Q=6ET`"UQ`"UT`"UD`"UM`"UE`"URL
XM`"UO`!M;,6U-4T-L;V-K(%8Q+C,;6S!M(*D@,3(N,#(N.3$@8GD@36%R=&EN1
XM(%-T97!P;&5R"@`;6S%M35-#;&]C:R!6,2XS&ULP;2"I(#$R+C`R+CDQ(&)YC
XM($UA<G1I;B!3=&5P<&QE<@H`55-!1T4Z("!-4T-L;V-K(%LM=%T@6RUD72!;<
XM+6U=(%LM95T@6RUR72!;+7%=(%MQ=6ET70H`55-!1T4Z("!-4T-L;V-K(%LM6
XM=%T@6RUD72!;+6U=(%LM95T@6RUR72!;+7%=(%MQ=6ET70H`("`@("`@("`M5
XM="`@("!T:6UE("`@;V9F+V]N("`@("`@("`@("`@("`@(&1E9F%U;'0Z(&]NF
XM"@`@("`@("`@("UT("`@('1I;64@("!O9F8O;VX@("`@("`@("`@("`@("`@!
XM9&5F875L=#H@;VX*`"`@("`@("`@+60@("`@9&%T92`@(&]F9B]O;B`@("`@<
XM("`@("`@("`@("!D969A=6QT.B!O;@H`("`@("`@("`M9"`@("!D871E("`@5
XM;V9F+V]N("`@("`@("`@("`@("`@(&1E9F%U;'0Z(&]N"@`@("`@("`@("UM'
XM("`@(&UE;6]R>2!O9F8O;VX@("`@("`@("`@("`@("`@9&5F875L=#H@;VX*F
XM`"`@("`@("`@+6T@("`@;65M;W)Y(&]F9B]O;B`@("`@("`@("`@("`@("!D^
XM969A=6QT.B!O;@H`("`@("`@("`M;R`@("!O;FQI;F4@=&EM92!O9F8O;VX@Y
XM("`@("`@("`@(&1E9F%U;'0Z(&]N"@`@("`@("`@("UO("`@(&]N;&EN92!T;
XM:6UE(&]F9B]O;B`@("`@("`@("`@9&5F875L=#H@;VX*`"`@("`@("`@+64@:
XM("`@16YG;&ES:"!W965K9&%Y<R!O;B]O9F8@("`@("!D969A=6QT.B!'97)M8
XM86X@;VX*`"`@("`@("`@+64@("`@16YG;&ES:"!W965K9&%Y<R!O;B]O9F8@V
XM("`@("!D969A=6QT.B!'97)M86X@;VX*`"`@("`@("`@+7(@("`@<F5V97)SV
XM92!D871E(&1I<W!L87D@;VXO;V9F("!D969A=6QT.B!O9F8*`"`@("`@("`@D
XM+7(@("`@<F5V97)S92!D871E(&1I<W!L87D@;VXO;V9F("!D969A=6QT.B!O$
XM9F8*`"`@("`@("`@+7$@("`@<75I="!-4T-L;V-K"@`@("`@("`@("UQ("`@K
XM('%U:70@35-#;&]C:PH`36%R=&EN)W,@0VQO8VLM4&]R=`!-87)T:6XG<R!#D
XM;&]C:RU0;W)T`$U30VQO8VLM2&%N9&QE<@!,.DU30VQO8VLM2&%N9&QE<@!-\
XM87)T:6XG<R!#;&]C:RU0;W)T`$EN<W1A;&QA=&EO;B!O9B`;6S%M36%R=&EN<
XM(%-T97!P;&5R)W,@0VQO8VL;6S!M(&9A:6QE9"X@1&]N)W0@<&%N:6,A"@!)6
XM;G-T86QL871I;VX@;V8@&ULQ;4UA<G1I;B!3=&5P<&QE<B=S($-L;V-K&ULPX
XM;2!F86EL960N($1O;B=T('!A;FEC(0H`36%R=&EN)W,@0VQO8VL`36%R=&EN.
XM)W,@0VQO8VLM4&]R=`!);G-T86QL871I;VX@;V8@&ULQ;4UA<G1I;B!3=&5PZ
XM<&QE<B=S($-L;V-K&ULP;2!F86EL960N($1O;B=T('!A;FEC(0H`26YS=&%L\
XM;&%T:6]N(&]F(!M;,6U-87)T:6X@4W1E<'!L97(G<R!#;&]C:QM;,&T@9F%I3
XM;&5D+B!$;VXG="!P86YI8R$*`$ET(&ES(&UY('!L96%S=7)E('1O(&EN<W1A7
XM;&P@&ULQ;4UA<G1I;B!3=&5P<&QE<B=S($-L;V-K&ULP;2!F;W(@>6]U(0H`N
XM270@:7,@;7D@<&QE87-U<F4@=&\@:6YS=&%L;"`;6S%M36%R=&EN(%-T97!PE
XM;&5R)W,@0VQO8VL;6S!M(&9O<B!Y;W4A"@!-87)T:6XG<R!#;&]C:RU0;W)TN
XM`$ET(&ES(&UY('-A=&ES9F%C=&EO;B!T;R!C;&]S92`;6S%M36%R=&EN(%-TF
XM97!P;&5R)W,@0VQO8VL;6S!M(&%G86EN"@!)="!I<R!M>2!S871I<V9A8W1IU
XM;VX@=&\@8VQO<V4@&ULQ;4UA<G1I;B!3=&5P<&QE<B=S($-L;V-K&ULP;2!A>
XM9V%I;@H`=VET:"!T:&4@:VYO=VQE9&=E(&]F(&$@:F]B('=E;&P@9&]N92$*\
XM`'=I=&@@=&AE(&MN;W=L961G92!O9B!A(&IO8B!W96QL(&1O;F4A"@``3E7_U
XM_$CG``!"K?_\""T````+9P``"@:M````4/_\""T``0`+9P``"@:M````</_\4
XM""T``@`+9P``"@:M````F/_\""T`!0`+9P``"@:M````4/_\2JW__&8```HKZ
XM?````%#__"`M__Q,WP``3EU.=4Y5``!(YR`@<``L;(`63J[^8B0`(&R`%B1H&
XM`#P@0BQL@!9.KOY<<``P*@`4`H`````/#(`````!9@``%C`J``Q(P`2`````,
XM/DS?!`1.74YU)%(@"F;0(#P```)"8.I,[P,```2SR&<,<``0&+`95LC_^F8$Q
XM<`!.=6,$<`%.=7#_3G5A<$/L@`Y%[(`.M<EF#C(\`!AK"'0`(L)1R?_\*4^`=
XM(BQX``0I3H`.2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYHD
XM*4"`$F8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y..
XM=4CG`#`F;P`0+PXB/``!```P+(`"+P%(P"(`XXC0@>.((A\L;(`.3J[_.BQ?;
XM*4"`)F8>2.<!!IO-+CP``0``+&R`#DZN_Y1,WV"`+FR`(DYU(&R`)D)H``0@;
XM;(`F,7P``0`0(&R`)C%\``$`"B!L@"(@+(`BD*@`!%"`*4"`*B!L@"H@O$U!5
XM3E@O#I/)+&R`#DZN_MHL7R1`2JH`K&<R+PLO+P`0+PI.N@#L*7P````!@"X@J
XM;(`F6(@`4(``(&R`)M'\````"@!0@`!/[P`,8%8O#D'J`%PL;(`.3J[^@"Q?*
XM+PY!Z@!<+&R`#DZN_HPL7RE`@#(@;(`R2J@`)&<B+PX@;(`R(&@`)"(0+&R`D
XM$DZN_X(L7R\L@#(O"DZZ`EI03REL@#*`-B\.+&R`$DZN_\HL7R!L@"8@@"\.F
XM+&R`$DZN_\0L7R!L@"8A0``&2JH`I&<D2.<@`B0\```#[4'Z`#0B""QL@!).B
XMKO_B3-]`!"!L@"8A0``,+RR`-B\L@#I.NNVP4$\O`$ZZ`SQ83TS?#`!.=2H`(
XM2.<X,B8O`!PH+P`@)F\`)"!#2J@`K&<4($,@*`"LY8`L0"`N`!#E@"1`8`0D-
XM;(`$$!)(@$C`T(14@"E`@#XO#G(`("R`/BQL@`Y.KO\Z+%\I0(!"9@9,WTP<Z
XM3G40$DB`2,`D`"\"0>H``2\(+RR`0DZZ`EQ(>@%&($+1[(!"+PA.N@*@+P0O=
XM"R\L@$).N@$P(&R`0D(P*``I?`````&`.B1"U>R`0E**)DI/[P`@$!)(@$C`N
XM)``,@````"!G(`R"````"6<8#((````,9Q`,@@````UG"`R"````"F8$4HI@&
XMS`P2`"!M=@P2`")F*E**$!I(@$C`)`!G'!;"#((````B9A`,$@`B9@12BF`&D
XM0BO__V`"8-I@.!`:2(!(P"0`9RP,@@```"!G)`R"````"6<<#((````,9Q0,$
XM@@````UG#`R"````"F<$%L)@RD(;2H)F`E.*4JR`.F``_U)"$R\.<@`@+(`ZH
XMY8!8@"QL@`Y.KO\Z+%\I0(`V9@A"K(`Z8`#^U'0`)&R`0F`:(`+E@"!L@#8AT
XMB@@`+PI.N@%BU<!2BEA/4H*TK(`Z;>`@`N6`(&R`-D*P"`!@`/Z<(`!,[P,`D
XM``0@""(O``Q*&&;\4X@0V5?)__P$@0`!``!J\D(@3G5(YS@R)F\`'"@O`"`OC
XM#G``0_H`Q"QL@`Y.KOW8+%\I0(!&9@9,WTP<3G4O#B!$(&@`)"!H``0L;(!&I
XM3J[_LBQ?)$!*@&=X+PY#^@"9(&H`-BQL@$9.KO^@+%\L0$J`9U!(YR`")#P`Z
XM``/M(B\`!"QL@!).KO_B3-]`!"8`9S(@`^6`)``@0B=H``@`I"=#`)Q(YR`":
XM)#P```/M0?H`3B((+&R`$DZN_^),WT`$)T``H"\.($HL;(!&3J[_IBQ?+PXB0
XM;(!&+&R`#DZN_F(L7T*L@$9@`/]0:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$SOK
XM`P``!"`((B\`#&`"$-E7R?_\9PP$@0`!``!J\$YU0AA1R?_\!($``0``:O).G
XM=2!O``0@"$H89OQ32)'`(`A.=2!O``0@B%B00J@`!"%(``A.=4SO`P``!"`(Z
XM$-EF_$YU2JR`2F<4(&R`2B!H``1.D"!L@$HI4(!*8.9*K(!.9P8@;(!.3I`O`
XM+P`$3KH`!EA/3G5(YS``)B\`#$JL@"9G-'0`8`HO`DZZ`4I83U*",&R``K'"0
XM;NXO#C`L@`)(P"(`XXC0@>.((FR`)BQL@`Y.KO\N+%]*K(!29P8@;(!23I!*1
XMK(`(9Q`O#B(L@`@L;(`23J[_IBQ?2JR`5F<((&R`5B"L@%I*K(!>9Q`O#B)LM
XM@%XL;(`.3J[^8BQ?2JR`8F<0+PXB;(!B+&R`#DZN_F(L7TJL@&9G$"\.(FR`2
XM9BQL@`Y.KOYB+%]*K(!J9Q`O#B)L@&HL;(`.3J[^8BQ?2.<`!BQX``0(+@`$C
XM`2EG$$OZ``A.KO_B8`9"I_-?3G,J7TJL@#)F-$JL@$)G+"\.("R`/B)L@$(L&
XM;(`.3J[_+BQ?+PX@+(`ZY8!8@")L@#8L;(`.3J[_+BQ?8!PO#BQL@`Y.KO]\B
XM+%\O#B)L@#(L;(`.3J[^ABQ?+PXB;(`2+&R`#DZN_F(L7R`#+FR`(DYU3-\`P
XM#$YU2.<@("0O``P@`B(`XXC0@>.()$#5[(`F2H)M##!L@`*QPF\$2I)F$"E\3
XM`````X!N</],WP0$3G4P*@`$`D"``&8.+PXB$BQL@!).KO_<+%]"DG``8-P`G
XM`````^P````!`````0``$.`````````#\@```^H````#`!0`````````````:
X0```#\@```^L````!```#\N``Y
X``
Xend
Xsize 6136
END_OF_FILE
if test 8630 -ne `wc -c <'c/MSClock.uu'`; then
    echo shar: \"'c/MSClock.uu'\" unpacked with wrong size!
fi
# end of 'c/MSClock.uu'
fi
if test ! -d 'l' ; then
    echo shar: Creating directory \"'l'\"
    mkdir 'l'
fi
if test -f 'l/MSClock-Han.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'l/MSClock-Han.uu'\"
else
echo shar: Extracting \"'l/MSClock-Han.uu'\" \(12674 characters\)
sed "s/^X//" >'l/MSClock-Han.uu' <<'END_OF_FILE'
Xbegin 666 MSClock-Handler
XM```#\P`````````#``````````(```:L0```U$```#,```/I```&K$[Z"91TK
XM;W!A>BYF;VYT``!.5?]02.<(()/)+'D````\3J[^VB1`0>W_C$/Y````5'`-C
XM(-E1R/_\0JW_8$*M_UQ"K?]8*WS______U1*J@"L9P``#'`*3-\$$$Y=3G5#>
XM^0``"$PL>0```#Q.KOYZ(\````!`9@``!G`*8-IP`$/Y```(8"QY````/$ZN6
XM_=@CP````$1F```@(#P``"``('D```!`(F@`*BQY````/$ZN_KQP%&"@<`!#9
XM^0``"'(L>0```#Q.KOW8(\````!(9@``,B)Y````1"QY````/$ZN_F(@/```@
XM(``@>0```$`B:``J+'D````\3J[^O'`48`#_5G``0_D```B#+'D````\3J[].
XMV"/`````3&8``$(B>0```$@L>0```#Q.KOYB(GD```!$+'D````\3J[^8B`\'
XM```@`"!Y````0")H`"HL>0```#Q.KOZ\<!1@`/[Z0J=(>0``"(].N0``"J10F
XM3R/`````4&<``')R`$'Y````4")(<`%!^0``")HL>0```#Q.KOY$2H!F``!&C
XM(_D```!0````7C/\``D```!L0CD```!N0CD```!O0KD```!P(_P`#T)`````<
XM=$'Y````4")(+'D````\3J[^,F````A.N0``"1)@```(3KD```D2D\DL>0``*
XM`#Q.KO[:('D```!`(4``+B!Y````0"%\`````0!&('D```!`#*@````!`$9FO
XM``"4('D```!`(7P````"`$8@>0```$`SZ``T````'"!Y````0#/H`#@````@B
XM0?D````<+'D```!$3J[_-"/`````3&<``#`@>0```$P@:`"`#&@`"``48P``4
XM#D'Y`````"/(````$"!Y````0$*H`$9@```(3KD```D2(#P``"``('D```!`K
XM(F@`*BQY````/$ZN_KP@>0```$!*J`!&9@`$*G("+'D````\3J[_*'(*XJ`K1
XM0/]H<@0L>0```#Q.KO\H<@KBH"M`_V1![?^`(@@L>0```'A.KO]`("W_@`2`L
XM```(RRM`_WP@+?]\Y8!6@"(\```%M4ZY```3UBM`_VP@+?]L(CP```6U3KD`Q
XM``J`<@1.N0``$]:1K?]\!JT```?`_VP@+?]\(@#EB-"!5(`B/````)E.N0``(
XM$]8K0/]T("W_="(\````F4ZY```*@%2`<@5.N0``$]8B+?]\DH!2@2M!_W!6J
XMK?]T('D```!`*V@`/O]\#*T````,_W1O```.4JW_;`2M````#/]T0CD`````/
XM""T``O]_9P``*B\M_V@O+?]D("W_:-"M_V0O`$AY```(ITAY`````$ZY```*-
XM'$_O`!0(+0`%_W]G``#*<``0.0"_T``(```%9@``?B!Y````0$JH`#IF```<7
XM0JW_6$*M_UQ"K?]@('D```!`(7P````!`#H@+?^(<C).N0``$]:PK?]49P``.
XM/B`M_XAR,DZY```3UBM`_U12K?]8#*T````\_UAF```>0JW_6%*M_UP,K0``C
XM`#S_7&8```I"K?]<4JW_8&````P@>0```$!"J``Z+RW_6"\M_UPO+?]@2'D`^
XM``B\2&W_Q$ZY```*'$_O`!1(;?_$2'D`````3KD```IL4$\(+0`!_W]G``&P<
XM""T``_]_9P``"'`'8```!'``*T#_>`@M``3_?V<``,(@;?]L2&CXE"\M_W`O@
XM+?]T("W_;`RM`````_]T;```"'(!8```!'(`D(%R!$ZY```3UB\`("W_="(`,
XMXXC0@2(?TH`@`="M_W#0K?]L#*T````"_W1O```(<@%@```$<@#2@9"!+P`@E
XM+?]T4X`,K0````C_=&\```AR`6````1R`)"!<@).N0``$]8B'Y*`(`%4@'('=
XM3KD``!/^T*W_>.6`0>W_C"\P"`!(>0``"-!(;?_$3KD```H<3^\`&&```+X@C
XM;?]L2&CXE"\M_W0O+?]P("W_;`RM`````_]T;```"'(!8```!'(`D(%R!$ZY@
XM```3UB\`("W_="(`XXC0@2(?TH`@`="M_W#0K?]L#*T````"_W1O```(<@%@V
XM```$<@#2@9"!+P`@+?]T4X`,K0````C_=&\```AR`6````1R`)"!<@).N0``<
XM$]8B'Y*`(`%4@'('3KD``!/^T*W_>.6`0>W_C"\P"`!(>0``".=(;?_$3KD`J
XM``H<3^\`&$AM_\1(>0````!.N0``"FQ03P@M``#_?V<``%(@+?^(<C).N0``\
XM$]8O`"`M_X1R/$ZY```3_B\`("W_A'(\3KD``!/6+P!(>0``"/Y(;?_$3KD``
XM``H<3^\`%$AM_\1(>0````!.N0``"FQ03W(`<`!!^0````@B2"!Y````3"!H(
XM`#(L>0```$1.KO\H('D```!0<``0*``/<@'AH0"!```P`"`!+'D````\3J[^`
XMPB@`"`0`#6<``&).N0``"1(B>0```$0L>0```#Q.KOYB(GD```!(+'D````\.
XM3J[^8B)Y````3"QY````/$ZN_F(L>0```#Q.KO]\(#P``"``('D```!`(F@`W
XM*BQY````/$ZN_KQP`&``^.`(!``,9P``0DJY````3&<``!@@>0```$PL>0``"
XM`$1.KO^X0KD```!,('D```!`(GD```!`(V@`0@`^('D```!`(7P````!`$8@:
XM>0```%!P`!`H``]R`>&A(`3`@6<``#H@>0```%`L>0```#Q.KOZ,2H!G```D@
XM0KD```!P(_P`#T)`````=$'Y````4")(+'D````\3J[^,F``^@!3;VX`36]N$
XM`$1I90!-:70`1&]N`$9R90!386T`4W5N`$UO;@!4=64`5V5D`%1H=0!&<FD`;
XM4V%T`$UA<G1I;B=S($-L;V-K+5!O<G0`:6YT=6ET:6]N+FQI8G)A<GD`9W)A+
XM<&AI8W,N;&EB<F%R>0!D;W,N;&EB<F%R>0!4:6UE<B!0;W)T`'1I;65R+F1E!
XM=FEC90!!.B4M-&0@1CHE+31D($,Z)2TS9``@("4P,FQD.B4P,FQD.B4P,FQD5
XM`"`@)7,@)3`R;&0M)3`R;&0M)3`R;&0`("`E<R`E,#)L9"XE,#)L9"XE,#)L,
XM9``@("4P,FQD.B4P,FQD.B4P,FQD`$Y5``!(YP``2KD```!09P``$B!Y````4
XM4"QY````/$ZN_HQ*N0```%YG```40?D```!0(D@L>0```#Q.KOX^2KD```!0S
XM9P``%B\Y````4$ZY```+5%A/0KD```!02KD```!,9P``&"!Y````3"QY````E
XM1$ZN_[A"N0```$Q,WP``3EU.=6%\0_D```-01?D`````M<EF#C(\`#)K"'0`Z
XM(L)1R?_\(\\```!\+'@`!"/.````/$CG@(`(+@`$`2EG$$OZ``A.KO_B8`9"8
XMI_-?3G-#^@`D3J[^:"/`````>&8,+CP``X`'3J[_E&`&3KD````04$].=61O_
XM<RYL:6)R87)Y`$GY``!__DYU3E7_ZDCG(#`D;0`(0>T`$"9(.WQ$"/_V*TK_4
XMZBM*__(K2O_N!JT``'___^XO"R\M``Q(;?_J3KD```NL)`!",B@`(`)/[P`,Z
XM3-\,!$Y=3G5,[P,```0@"$H89OQ32!#99OQ.=4CG<``T`<3`)@%(0\;`2$-"=
XM0]2#2$#`P4A`0D#0@DS?``Y.=4CG(#`F;P`0+PYP_RQY````/$ZN_K8L7R0`+
XM#(#_____9@AP`$S?#`1.=2\.(CP``0`!<"(L>0```#Q.KO\Z+%\D0$J`9A0O+
XM#B`"+'D````\3J[^L"Q?<`!@RB5+``H5;P`7``D5?``$``A"*@`.%4(`#R\.X
XMD\DL>0```#Q.KO[:+%\E0``0(`MG$B\.(DHL>0```#Q.KOZ>+%]@#D'J`!0O^
XM"$ZY```0REA/(`I@`/]V2.<`("1O``A*J@`*9Q`O#B)*+'D````\3J[^F"Q?5
XM%7P`_P`()7S_____`!0O#G``$"H`#RQY````/$ZN_K`L7R\.<"(B2BQY````U
XM/$ZN_RXL7TS?!`!.=4Y5_?1(YS\R)FT`""QM`!!^`"1M``P6$F8*(`=,WTS\G
XM3EU.=5**#`,`)6=$)`<@4['K``1D#"!34I,0@W``$`-@$'``$`,O`"\+3KD`H
XM`!$(4$\,@/____]G``2*4H(6$F8$(`)@ME**#`,`)6;`+@)X`"M\````(/_\S
XM%AIP`!`#8&H(Q```8/((Q``!8.P(Q``"8.8(Q``#8.!-[@`$)"[__$J";`8(I
XMQ```1((6&F!8*WP````P__QT`&`8(`+G@'(`$@/0@=""T((D``2"````,!8:_
XM<``0`T'Y````C1`P``!(@`@```)FTF`<!$``(&><5T!GGE]`9Z!30&>*54!GY
XM@%=`9ZI@L"M"__@D/```?<8,`P`N9F`6&@P#`"IF%DWN``0D+O_\2H)L!B0\1
XM``!]QA8:8#)T`&`8(`+G@'(`$@/0@=""T((D``2"````,!8:<``0`T'Y````]
XMC1`P``!(@`@```)FT@R"``!]QF<(*WP````@__PJ`@P#`&AF!@C$``=@%@P#`
XM`&QF!@C$``9@"@P#`$QF!@C$``@6&BM*``QP`!`#8``!I&```S@(!``'9PQ-6
XM[@`$(&[__#"'8!P(!``&9PQ-[@`$(&[__""'8`I-[@`$(&[__""'=`!@``&X(
XM3>X`!"1N__PO"DZY```0N"0`#(4``'W&6$]G!K2%;P(D!6```9)-[@`$%B[_H
XM_T'M_?@D2!"#=`%@``%\=`A@$`!$`$AV>'008`8(Q``$=`H,`P!89@A!^@*P3
XM(`A@!D'Z`KD@""M`_?0(!``&9PI-[@`$+"[__&`8"`0`!&<*3>X`!"PN__Q@,
XM"$WN``0L+O_\"`0`!&<*2H9L!D2&",0`!4'M__@D2`R%``!]QF8">@%*AF8$\
XM2H5G("`&(@).N0``%!@@;?WT%3`(`"`&(@).N0``%"0L`&;@0>W_^)'*)`@(-
XM!``#9VX,`P!O9A1*@F<*#!(`,&<(M(5M!"H"4H5@5`P#`'AG!@P#`%AF2$J"$
XM9T0,$@`P9SZTA6P00>W]^K'*9`@5/``P4H)@[`@$``!F'`RM````,/_\9A(@*
XM`E2`L*W_^&P(*BW_^%6%8,H5`Q4\`#!4@K2%;!!![?WXL<ID"!4\`#!2@F#L_
XM8$P$0``E9P#^O@1``#-G`/[.!$``"V<`_J930&<`_L1;0&<`_KY;0&<`_CI3#
XM0&<`_J130&<`_J)70&<`_EQ50&<`_J170&<`_I9@`/X4"`0`!&<H"`0`!6<&Z
XM%3P`+6`:"`0``6<&%3P`*V`."`0``F<&%3P`(&`"4X)2@MZ""`0``&8``)0,%
XMK0```##__&9$"`0`!&<^,`0"0``F9S8@4['K``1D#B!34I,0FG``$"K__V`0/
XM<``0&B\`+PM.N0``$0A03PR`_____V<``,Y3K?_X4X)@-B!3L>L`!&00(%-2M
XMDQ"M__]P`!`M__]@$G``$"W__R\`+PM.N0``$0A03PR`_____V<``))2AR`ME
XM__A3K?_XL()NOBH"(`)3@DJ`9S`@4['K``1D#B!34I,0FG``$"K__V`0<``0O
XM&B\`+PM.N0``$0A03PR`_____V=*8,@(!```9SXD!6`N(%.QZP`$9`X@4U*3H
XM$+P`('``<"!@#DAX`"`O"TZY```1"%!/#(#_____9Q)2AR`M__A3K?_XL()NH
XMQF``^S!P_V``^S0P,3(S-#4V-S@Y04)#1$5&`#`Q,C,T-38W.#EA8F-D968`3
XM(&\`!"`(2AAF_%-(D<`@"$YU(&\`!""(6)!"J``$(4@`"$YU2.<`($'Y```!E
XMCB1(+PI.N0``$I)83]7\````%D'Y```#1K7(9>9,WP0`3G5(YSP@)&\`&"@OV
XM`!P@"F<``70T*@`,9P`!;`@"``EF``%D"`(``V8``5Q!Z@`,`E#O_4JJ``AFE
XM'@R$_____V8(<`!,WP0\3G4O"DZY```4?C0J``Q83P@"``YF-B!2L>H`"&,@E
XM2'@``2`2D*H`!"\`$"H`#DB`2,`O`$ZY```62D_O``PDJ@`((&H`$-'2)4@`8
XM!`R$_____V8$=@!@`A8$(!*0J@`(*@`P`@)``*!G2`R$_____V<<(%)2DA"#%
XM0>H`#`C0``8T$$'Z_PHCR````(!2A0R$_____V<,#`,`"F<&NJH`$&4$>/]@8
XM#"52``1P`!`#8`#_3`@"``YG*DJ%9QXO!2\J``@0*@`.2(!(P"\`3KD``!<F2
XML(5/[P`,9E!!Z@`,")``!@R$_____V82)*H`""5J``@`!'``$`-@`/\"0?K^<
XMD"/(````@$'J``P(T``&)*H`""!J`!#1TB5(``0@4E*2$(-P`!`#8`#^U$'J=
XM``P(Z``"``$E:@`(``0DJ@`(</]@`/ZZ3E7_]DCG."`D;0`(=``@"F<&2FH`N
XM#&8*</],WP0<3EU.=0@J``$`#&8,+PI.N0``$W"$@%A/$"H`#DB`2,`O`$ZY1
XM```:4H2`""H````-6$]G#"\J``A.N0``%/I83TIJ`!1G6$AZ`'1(;?_W3KD`5
XM`!70."H`%'8`4$]P`#`$<@I.N0``$_X&@````#!R!Y*#0>W_]Q&`&`!(1$)$+
XM2$2(_``*4H,,@P````5MSD(M__](;?_W3KD``!;J6$]"DD*J``1"J@`(0FH`H
XM#$J"9P9P_V``_TAP`&``_T)435``2.<`("1O``@@"F9*0?D```&.)$A*:@`,6
XM9R@P*@`,`D`""&8>2'C__R\*3KD``!$(#(#_____4$]F"'#_3-\$`$YUU?P`C
XM```60?D```-&M<AEPG``8.9(>/__+PI.N0``$0A03V#62.=(`$*$2H!J!$2`8
XM4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$@%)$2H%J-
XM`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!9B!(038!+
XM-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%(0$)`=`_06
XM@-.!MH%B!)*#4D!1RO_R3-\`#$YU2.<@("1O``QT01`J``Y(@$C`+P!.N0``O
XM%=Y*@%A/9P1T(6`*0?D```&ZM<AG&B5\```$```02'@$`$ZY```5?B5```A89
XM3V84)7P````!`!!!Z@`/)4@`"#0\`(!!Z@`,<``P$#("2,&`@3"`)6H`"``$*
XM)*H`"$S?!`1.=4CG`#(L;P`0E\LD>0```(1@#$'J``B]R&<.)DHD4B`*9O!,F
XMWTP`3G4@"V<$)I)@!B/2````A"\.("H`!%"`(DHL>0```#Q.KO\N+%]@U$CG:
XM`#`D>0```(1@&B92+PX@*@`$4(`B2BQY````/$ZN_RXL7R1+(`IFXD*Y````[
XMA$S?#`!.=4CG("`D+P`,2H)F"'``3-\$!$YU+PYR`"`"4(`L>0```#Q.KO\ZC
XM+%\D0$J`9@1P`&#<0?K_EB/(````B"2Y````A"5"``0CR@```(0@"E"`8+Q,Q
XM[P,```0@"!#99OQ.=4CG("`D+P`,(`(B`..(T('CB"1`U?D```",2H)M#C!Y3
XM```#1K'";P1*DF82(_P````#````D'#_3-\$!$YU+PX@`B(`XXC0@>.(('D`;
XM``",(C`(`"QY````>$ZN_R@L7TJ`9P1P`6`"<`!@S$CG,"`D+P`03KD``!?F[
XM(`(B`..(T('CB"1`U?D```",2H)M#C!Y```#1K'";P1*DF82(_P````#````^
XMD'#_3-\$#$YU2.<P`B`O`"13@"8`)"\`("(2+'D```!X3J[_ODS?0`PF``R`P
XM_____V88+PXL>0```'A.KO]\+%\CP````)!P_V"X2.<P`G8`=``B$BQY````T
XM>$ZN_[Y,WT`,8)Y(YP`@)&\`""\.(@HL>0```'A.KO^X+%]*@&8<+PXL>0``"
XM`'A.KO]\+%\CP````)!P_TS?!`!.=7``8/9(YS`P)"\`%"9O`!A.N0``%^8@;
XM`B(`XXC0@>.()$#5^0```(Q*@FT.,'D```-&L<)O!$J29A(C_`````,```"0N
XM</],WPP,3G4P*@`$`D```V8.(_P````&````D'#_8.((*@`#``1G&$CG,`)V!
XM`70`(A(L>0```'A.KO^^3-]`#$CG,`(F+P`H)`LB$BQY````>$ZN_]!,WT`,6
XM)@`,@/____]F&"\.+'D```!X3J[_?"Q?(\````"0</]@AB`#8()(YR``+PXB#
XM/```$`!P`"QY````/$ZN_LXL7R0`"```#&<62KD```"49@@@`DS?``1.=4ZY%
XM```8(G``8/!(YS`"=@1!^@`T)`@O`R\"+'D```!X3J[_Q"(`)!\F'RQY````^
XM>$ZN_]!,WT`,2'@``4ZY```88EA/3G5>0PH`2KD```"89QH@>0```)@@:``$J
XM3I`@>0```)@CT````)A@WDJY````@&<(('D```"`3I`O+P`$3KD``!BB6$].9
XM=4CG,``F+P`,2KD```",9SYT`&`,+P).N0``&E)83U*",'D```-&L<)NZB\.B
XM,#D```-&2,`B`..(T('CB")Y````C"QY````/$ZN_RXL7TJY````B&<(('D`2
XM``"(3I!*N0```TQG%"\.(CD```-,+'D```!X3J[_IBQ?2KD```"<9PP@>0``.
XM`)P@N0```*!*N0```*1G%"\.(GD```"D+'D````\3J[^8BQ?2KD```"H9Q0O0
XM#B)Y````J"QY````/$ZN_F(L7TJY````K&<4+PXB>0```*PL>0```#Q.KOYB$
XM+%]*N0```+!G%"\.(GD```"P+'D````\3J[^8BQ?2.<`!BQX``0(+@`$`2EGQ
XM$$OZ``A.KO_B8`9"I_-?3G,J7TJY````M&9"2KD```"X9S@O#B`Y````O")Y+
XM````N"QY````/$ZN_RXL7R\.(#D```#`Y8!8@")Y````Q"QY````/$ZN_RXLU
XM7V`B+PXL>0```#Q.KO]\+%\O#B)Y````M"QY````/$ZN_H8L7R\.(GD```!X)
XM+'D````\3J[^8BQ?(`,N>0```'Q.=4S?``Q.=4CG("`D+P`,(`(B`..(T('C\
XMB"1`U?D```",2H)M#C!Y```#1K'";P1*DF82(_P````#````D'#_3-\$!$YU0
XM,"H`!`)`@`!F$"\.(A(L>0```'A.KO_<+%]"DG``8-H```/L````20``````\
XM``!@````@````+H```$&```!8@```6@```&&```!X````>H```*8```#&@``W
XM`RX```,V```#6@```VX```-X```#U````^````0R```$1@``!)8```2@```$O
XMM```!1(```5J```%>@``!8X```68```%T@``!BH```8Z```&3@``!E@```9L4
XM```&A```!I(```:@```&J```!K(```;&```'&@``"6(```H````*5```"T@`!
XM``OX```-F@``#DP```Y>```/M```#_```!`X```0<```$.P``!%4```1A```P
XM$AP``!+````2U```$NH``!,````3%```$T@``!.<```3S@``%)0``!2Z```63
XM5```%S0``!@:```85@``&)H``!BZ````*P````$````L```!<````9P```(\G
XM```"2@```E````)@```":@```GX```*$```&T@``!MH```;N```'@@``!XP`Z
XM``><```'P@``!]H```D<```))@``"5(```E<```):@``"7````EZ```)B@``C
XM"9H```H6```,A@``#00``!#B```0^@``$WX``!.Z```4I```%?X``!9P```7H
XM4```&,0``!C0```9`@``&0P``!IR````K`````(````<````9@```'````"&&
XM````D````*````"J````P````,H```#4````V@```.H```#T```!#````18`4
XM``$@```!)@```3````$V```!1@```5````%\```!C````:````&H```!K@``+
XM`;0```&Z```!Q````<H```'2```!\@```?P```(&```"%````B8```(T```"!
XM0@```E8```**```"I````JX```*X```"R````MP```+T```#C@```[(```/:W
XM```$!```!!X```2````$K@``!F8```;````&Y```!P8```<@```')@``!S``4
XM``<V```'0```!T8```=0```'8```!VH```>2```'H@``!Z@```>T```'X```3
XM!_````?Z```(````"`@```DL```)-@``"4````E(```)@```":````FX```):
XMP@``">P```JR```*V@``"O````L<```+-```"V@```N*```+G```$=8``!)0O
XM```5!@``%2P``!4\```53@``%6(``!5T```5G```%;8``!6\```5Q@``%?0`!
XM`!80```6*@``%C0``!9F```6@@``%J(``!:\```6R```%MP``!;X```7"@``-
XM%Q8``!=&```78@``%WX``!>:```7M```%\X``!?:```7]@``&`H``!@T```8]
XM1```&&0``!AL```8>```&'X``!B&```8C@``&*P``!C@```8Y@``&/(``!CZ$
XM```9$@``&1X``!DF```9+```&3(``!D\```90@``&4X``!E8```97@``&6H`S
XM`!ET```9>@``&88``!F0```9E@``&<0``!G,```9U@``&=P``!GB```9\```!
XM&?H``!H````:$```&AX``!HD```:,@``&C@``!I&```::```&H0``!J@````E
XM`````_(```/J````U`````0`"`````$!````````````````````````D@`!7
XM`;``"`$`````````"`````````````````````````````````````````$`#
XM````````````"!0```@8```('```""````@D```(*```""P```@P```(-```,
XM"#@```@\```(0```"$0```A(`"`@("`@("`@(#`P,#`P("`@("`@("`@("`@X
XM("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)^
XM`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("`@("J
XM`@("`@("`D!`0$`@````````````````````````````````````````````N
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````@````````$```````````````````0``0``(
XM```!```````````````````$``(``````0``````````````````````````(
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````%```4
XM```````````#[`````$````"````%`````\``````````````%0```!8````!
XM7````&````!D````:````&P```!P````=````'@```!\````@````(0```"(8
X4`````````_(```/K````,P```_)P[
X``
Xend
Xsize 9020
END_OF_FILE
if test 12674 -ne `wc -c <'l/MSClock-Han.uu'`; then
    echo shar: \"'l/MSClock-Han.uu'\" unpacked with wrong size!
fi
# end of 'l/MSClock-Han.uu'
fi
if test ! -d 'source' ; then
    echo shar: Creating directory \"'source'\"
    mkdir 'source'
fi
if test -f 'source/MSClock-Handler.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/MSClock-Handler.c'\"
else
echo shar: Extracting \"'source/MSClock-Handler.c'\" \(7683 characters\)
sed "s/^X//" >'source/MSClock-Handler.c' <<'END_OF_FILE'
X/*
X *    MSClock-Handler.c        (c) 12.02.91 by Martin Steppler
X */
X
X// includes
X
X#include <stdio.h>
X#include <libraries/dos.h>
X#include <libraries/dosextens.h>
X#include <devices/inputevent.h>
X#include <devices/printer.h>
X#include <devices/timer.h>
X#include <devices/input.h>
X#include <graphics/gfx.h>
X#include <graphics/gfxbase.h>
X#include <graphics/gfxmacros.h>
X#include <intuition/intuition.h>
X#include <intuition/intuitionbase.h>
X#include <exec/exec.h>
X#include <hardware/cia.h>
X#include <functions.h>
X
X// prototypes
X
Xvoid ciao(void);
X
X// reference to the absolute address of ciab
X
Xextern struct CIA ciab;
X
X// defines
X
X#define SIG_CHANGE   SIGBREAKF_CTRL_C
X#define SIG_CLOSE    SIGBREAKF_CTRL_D
X#define CHILD_READY  SIGBREAKF_CTRL_D
X#define EOS 0
X#define PORTNAME "Martin's Clock-Port"
X
Xstruct TheClock
X{
X   struct MsgPort    Port;          // Global messageport.
X   BPTR              Segment;       // Pointer to handler segment.
X   LONG              SegSize;       // Size of TheClock structure.
X   struct Task      *Father;        // Calling process.
X   struct Task      *Child;         // Waiting process
X   int               LeftEdge;      // LeftEdge of our window
X   int               Width;         // Width of our window
X   int               Online;        // Online flag
X   int               Flags;         // display-flags
X   int               FlagsBackup;   // backup of the display-flags
X   int               Status;        // status-flag
X};
X
X// globals
X
Xchar                  DateBuf[60];
Xstruct TextAttr       TopazText    = { (UBYTE *)"topaz.font",8,0,0};
Xstruct IntuiText      TextPrint    = { 0,1,JAM2,0,0,NULL,(UBYTE *)DateBuf,NULL};
Xstruct NewWindow      ClockWindow  = { 146,1,432,8,1,0,EOS, BORDERLESS, NULL,NULL,EOS,NULL,NULL,0,0,0,0,WBENCHSCREEN};
Xstruct Window        *Window=NULL;
Xstruct timerequest    TimeReq;
Xstruct MsgPort       *TimerPort=NULL;
Xstruct IntuitionBase *IntuitionBase;
Xstruct GfxBase       *GfxBase;
Xstruct DosLibrary    *DosBase;
Xstruct TheClock      *TheClock;
X
X        /* _main():
X         *
X         *      Modified Aztec C startup-routine, no CLI parsing,
X         *      no Workbench parsing, absolutely nothing.
X         */
X
Xlong
X_main()
X{
X   register struct Process *ThatsMe = (struct Process *)FindTask(NULL);
X   register ULONG SignalSet;
X   char TempBuf[60];
X   char *Days[14]={ "Son","Mon","Die","Mit","Don","Fre","Sam",
X                    "Sun","Mon","Tue","Wed","Thu","Fri","Sat" };
X   struct DateStamp Date;
X   long n,eng,Month,Day,Year,chip_free,fast_free,hh=0,mm=0,ss=0,lastsec=-1;
X   int i;
X
X      // If somebody called us from CLI...
X
X   if(ThatsMe -> pr_CLI) return(10);
X
X      // Is the TheClock structure anywhere?
X
X   if(!(TheClock = (struct TheClock *)FindPort(PORTNAME))) return(10);
X
X      // open libraries
X
X   if(!(IntuitionBase = OpenLibrary("intuition.library",0))) {
X      Signal(TheClock -> Father, CHILD_READY);
X      return(20);
X   }
X   if(!(GfxBase       = OpenLibrary("graphics.library",0))) {
X      CloseLibrary(IntuitionBase);
X      Signal(TheClock -> Father, CHILD_READY);
X      return(20);
X   }
X   if(!(DosBase       = OpenLibrary("dos.library",0))) {
X      CloseLibrary(GfxBase);
X      CloseLibrary(IntuitionBase);
X      Signal(TheClock -> Father, CHILD_READY);
X      return(20);
X   }
X
X   if(TimerPort=(struct MsgPort *) CreatePort("Timer Port",0)) {
X      if(OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IORequest *)&TimeReq,0)==(long)NULL) {
X         TimeReq.tr_node.io_Message.mn_ReplyPort=TimerPort;
X         TimeReq.tr_node.io_Command=TR_ADDREQUEST;
X         TimeReq.tr_node.io_Flags=0;
X         TimeReq.tr_node.io_Error=0;
X         TimeReq.tr_time.tv_secs=0;
X         TimeReq.tr_time.tv_micro=1000000;  // delay
X         SendIO((struct IORequest *) &TimeReq.tr_node);
X      }
X      else ciao();
X   }
X   else ciao();
X
X   TheClock -> Child = (struct Task *)FindTask(NULL);
X   TheClock -> Status = 1;
X
X           // Go into infinite loop waiting for signals.
X
X   FOREVER
X   {
X      if(TheClock -> Status == 1) {      // switch clock on
X         TheClock -> Status = 2;
X         ClockWindow.LeftEdge = TheClock -> LeftEdge;
X         ClockWindow.Width    = TheClock -> Width;
X         if(Window=(struct Window *) OpenWindow(&ClockWindow)) {
X            if(Window->IFont->tf_YSize>8) TextPrint.ITextFont=&TopazText;
X            TheClock->Status = 0;
X         }
X         else ciao();
X
X           // Tell father to finish.
X
X         Signal(TheClock -> Father, CHILD_READY);
X      }
X      if(!TheClock->Status) {     // show mem, date, online-time and/or time
X         chip_free = AvailMem(MEMF_CHIP) >> 10;
X         fast_free = AvailMem(MEMF_FAST) >> 10;
X         DateStamp((struct DateStamp *)&Date) ;
X         n = Date.ds_Days - 2251;
X         Year = (4 * n + 3) / 1461;
X         n -= 1461 * Year / 4;
X         Year += 1984;
X         Month = (5 * n + 2) / 153;
X         Day = n - (153 * Month + 2) / 5 + 1;
X         Month += 3; n=TheClock->Flags;
X         if(Month>12) { Year++; Month -= 12; }
X         DateBuf[0]=EOS;
X         if(n & 4) sprintf(DateBuf, "A:%-4d F:%-4d C:%-3d", chip_free+fast_free, fast_free, chip_free);
X         if(n & 32) {
X
X            // Check port a of cia b. Is there a carrier?
X
X            if(!(ciab . ciapra & CIAF_COMCD)) // Online ?
X            {
X               if(!TheClock -> Online) {    // Time reset
X                  hh=mm=ss=0; TheClock -> Online = TRUE;
X               }
X
X                       // Increment time counter.
X
X               if(lastsec != Date.ds_Tick/TICKS_PER_SECOND) {
X                  lastsec = Date.ds_Tick/TICKS_PER_SECOND;
X                  if(++ss == 60) {
X                     ss=0; if(++mm == 60) { mm=0; ++hh; }
X                  }
X               }
X            }
X            else TheClock -> Online = FALSE;
X            sprintf(TempBuf, "  %02ld:%02ld:%02ld", hh, mm, ss);
X            strcat(DateBuf,TempBuf);
X         }
X         if(n & 2) {
X            eng = (n & 8) ? 7:0;
X            if(n & 16) sprintf(TempBuf, "  %s %02ld-%02ld-%02ld", Days[(Day + Year + (Year - (Month < 3)) / 4 + 3 * Month - 2 * (Month > 2) - (Month - 1 - (Month > 8)) / 2 + 2) % 7 +eng], Month, Day, Year-1900);
X            else       sprintf(TempBuf, "  %s %02ld.%02ld.%02ld", Days[(Day + Year + (Year - (Month < 3)) / 4 + 3 * Month - 2 * (Month > 2) - (Month - 1 - (Month > 8)) / 2 + 2) % 7 +eng], Day, Month, Year-1900);
X            strcat(DateBuf,TempBuf);
X         }
X         if(n & 1) {
X            sprintf(TempBuf, "  %02ld:%02ld:%02ld", Date.ds_Minute/60, Date.ds_Minute%60, Date.ds_Tick/TICKS_PER_SECOND);
X            strcat(DateBuf, TempBuf);
X         }
X         PrintIText(Window->RPort,&TextPrint, 0,0);
X      }
X      SignalSet = Wait(SIG_CLOSE | SIG_CHANGE | (1 << TimerPort->mp_SigBit));
X      if(SignalSet & SIG_CLOSE) {
X         ciao();
X         CloseLibrary(IntuitionBase);
X         CloseLibrary(GfxBase);
X         CloseLibrary(DosBase);
X         Forbid();
X         Signal(TheClock -> Father, CHILD_READY);
X         return(0);
X      }
X      else if(SignalSet & SIG_CHANGE) {
X         if(Window) { CloseWindow(Window); Window = NULL; }
X         TheClock->Flags = TheClock->FlagsBackup;
X         TheClock->Status = 1;
X      }
X      if(SignalSet & (1 << TimerPort->mp_SigBit)) {
X         if(GetMsg(TimerPort)) {
X            TimeReq.tr_time.tv_secs=0;
X            TimeReq.tr_time.tv_micro=1000000;
X            SendIO((struct IORequest *) &TimeReq.tr_node);
X         }
X      }
X   }
X}
Xvoid
Xciao(void)
X{
X   if(TimerPort) GetMsg(TimerPort);
X   if(TimeReq.tr_node.io_Message.mn_ReplyPort) CloseDevice((struct IORequest *)&TimeReq);
X   if(TimerPort) { DeletePort(TimerPort); TimerPort = NULL; }
X   if(Window) { CloseWindow(Window); Window = NULL; }
X}
END_OF_FILE
if test 7683 -ne `wc -c <'source/MSClock-Handler.c'`; then
    echo shar: \"'source/MSClock-Handler.c'\" unpacked with wrong size!
fi
# end of 'source/MSClock-Handler.c'
fi
if test -f 'source/MSClock.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/MSClock.c'\"
else
echo shar: Extracting \"'source/MSClock.c'\" \(8715 characters\)
sed "s/^X//" >'source/MSClock.c' <<'END_OF_FILE'
X/*
X *    MSClock.c        (c) by Martin Steppler 12.02.91
X *
X *    Yet another clock utility for use with L:MSClock-Handler
X */
X
X// includes
X
X#include <stdio.h>
X#include <libraries/dos.h>
X#include <devices/timer.h>
X#include <devices/input.h>
X#include <intuition/intuition.h>
X#include <intuition/intuitionbase.h>
X#include <exec/exec.h>
X#include <functions.h>
X
X//defines
X
X#define SIG_CHANGE  SIGBREAKF_CTRL_C
X#define SIG_CLOSE   SIGBREAKF_CTRL_D
X#define CHILD_READY SIGBREAKF_CTRL_D
X#define EOS 0
X#define PORTNAME "Martin's Clock-Port"
X#define WriteStdOut(str) Write(StdOut, str, (LONG)strlen(str))
X
X#define TIME_WIDTH         80
X#define DATE_WIDTH         112
X#define ONLINE_WIDTH       80
X#define MEM_WIDTH          152
X#define FRONTBACKGAD_WIDTH 62
X
X// prototypes
X
Xlong Chk_Abort() { return(0); }
Xvoid main(int, char **);
Xint GetWidth(int DefFlag);
Xint GetOverscan(void);
X
X// globals
X
Xstruct TheClock
X{
X   struct MsgPort    Port;          // Global messageport.
X   BPTR              Segment;       // Pointer to handler segment.
X   LONG              SegSize;       // Size of TheClock structure.
X   struct Task      *Father;        // Calling process.
X   struct Task      *Child;         // Waiting process
X   int               LeftEdge;      // LeftEdge of our window
X   int               Width;         // Width of our window
X   int               Online;        // online-flag
X   int               Flags;         // display-flags
X   int               FlagsBackup;   // backup of the display-flags
X   int               Status;        // status-flag
X};
X
Xstruct IntuitionBase *IntuitionBase;
Xstruct DosLibrary    *DosBase;
Xstruct TheClock      *TheClock;
X
X// here we go ...
X
Xvoid
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X   register struct Process *ThatsMe = (struct Process *)FindTask(NULL);
X   int DefFlag = 39; // display time, date, online time and mem
X   int i, quit=0, help=0;
X   BPTR StdOut = (BPTR)Open("*", MODE_OLDFILE);
X
X
X      // open libraries
X
X   if(IntuitionBase = OpenLibrary("intuition.library",0)) {
X      if(DosBase = OpenLibrary("dos.library",0)) {
X
X         // Is the TheClock structure anywhere?
X
X         if(TheClock = (struct TheClock *)FindPort(PORTNAME)) DefFlag = TheClock->Flags;
X         for (i = 1; i < argc; i++) {
X            if(!strcmp(argv[i], "quit") || !strcmp(argv[i], "-q")) {
X               quit = 1;
X               break;
X            }
X            else if(!strcmp(argv[i], "-t")) { DefFlag = (DefFlag &  1) ? (DefFlag & 62):(DefFlag |  1); }
X            else if(!strcmp(argv[i], "-d")) { DefFlag = (DefFlag &  2) ? (DefFlag & 61):(DefFlag |  2); }
X            else if(!strcmp(argv[i], "-m")) { DefFlag = (DefFlag &  4) ? (DefFlag & 59):(DefFlag |  4); }
X            else if(!strcmp(argv[i], "-e")) { DefFlag = (DefFlag &  8) ? (DefFlag & 55):(DefFlag |  8); }
X            else if(!strcmp(argv[i], "-r")) { DefFlag = (DefFlag & 16) ? (DefFlag & 47):(DefFlag | 16); }
X            else if(!strcmp(argv[i], "-o")) { DefFlag = (DefFlag & 32) ? (DefFlag & 31):(DefFlag | 32); }
X            else { help = 1; break; }
X         }
X         if(help && StdOut) {
X             WriteStdOut("\33[1mMSClock V1.3\33[0m (c) 12.02.91 by Martin Steppler\n");
X             WriteStdOut("USAGE:  MSClock [-t] [-d] [-m] [-e] [-r] [-q] [quit]\n");
X             WriteStdOut("        -t    time   off/on                default: on\n");
X             WriteStdOut("        -d    date   off/on                default: on\n");
X             WriteStdOut("        -m    memory off/on                default: on\n");
X             WriteStdOut("        -o    online time off/on           default: on\n");
X             WriteStdOut("        -e    English weekdays on/off      default: German on\n");
X             WriteStdOut("        -r    reverse date display on/off  default: off\n");
X             WriteStdOut("        -q    quit MSClock\n");
X         }
X         else if(!TheClock && !quit) {
X
X                     // No, then Create Process
X
X            if(TheClock = (struct TheClock *)AllocMem(sizeof(struct TheClock),MEMF_PUBLIC | MEMF_CLEAR)) {
X
X                     // Dummy MessagePort.
X
X               TheClock -> Port . mp_Flags         = PA_IGNORE;
X               TheClock -> Port . mp_Node . ln_Pri = 0;
X               TheClock -> Port . mp_Node . ln_Type= NT_MSGPORT;
X               TheClock -> Port . mp_Node . ln_Name= AllocMem(sizeof(PORTNAME),MEMF_PUBLIC);
X               TheClock -> Child                   = NULL;
X               TheClock -> Father                  = (struct Task *)ThatsMe;
X               TheClock -> SegSize                 = sizeof(struct TheClock);
X               TheClock -> Width                   = GetWidth(DefFlag);
X               TheClock -> LeftEdge                = GetOverscan() - TheClock->Width;
X               TheClock -> Online                  = FALSE;
X               TheClock -> Flags                   = DefFlag;
X               TheClock -> FlagsBackup             = DefFlag;
X
X                     // Init port.
X
X               strcpy(TheClock -> Port . mp_Node . ln_Name,PORTNAME);
X               NewList(&TheClock -> Port . mp_MsgList);
X
X                     // Load the handler code.
X
X               if(!(TheClock -> Segment = LoadSeg("MSClock-Handler")))
X                  TheClock -> Segment = LoadSeg("L:MSClock-Handler");
X               if(!TheClock -> Segment)
X               {
X                  FreeMem(TheClock -> Port . mp_Node . ln_Name,sizeof(PORTNAME));
X                  FreeMem(TheClock,TheClock -> SegSize);
X                  if(StdOut)  WriteStdOut("Installation of \33[1mMartin Steppler's Clock\33[0m failed. Don't panic!\n");
X               }
X               else
X               {
X                     // Install the port and start the handler.
X
X                  AddPort(&TheClock -> Port);
X                  CreateProc("Martin's Clock", 5,TheClock -> Segment,4096);
X
X                     // Wait for child task to ring back...
X
X                  Wait(CHILD_READY);
X                  if(!TheClock -> Child)  // failed
X                  {
X                     RemPort(&TheClock -> Port);
X                     FreeMem(TheClock -> Port . mp_Node . ln_Name,sizeof(PORTNAME));
X                     if(TheClock -> Segment) UnLoadSeg(TheClock -> Segment);
X                     FreeMem(TheClock,TheClock -> SegSize);
X                     if(StdOut)  WriteStdOut("Installation of \33[1mMartin Steppler's Clock\33[0m failed. Don't panic!\n");
X                  }
X                  else             // Yeah, it works
X                     if(StdOut)  WriteStdOut("It is my pleasure to install \33[1mMartin Steppler's Clock\33[0m for you!\n");
X               }
X            }
X         }
X         else if(TheClock && quit) {
X            TheClock -> Father = (struct Task *)ThatsMe;
X            Signal(TheClock -> Child,SIG_CLOSE);
X            Wait(CHILD_READY);
X
X               // Remove port and associated data.
X
X            RemPort(&TheClock -> Port);
X            FreeMem(TheClock -> Port . mp_Node . ln_Name,sizeof(PORTNAME));
X            if(TheClock -> Segment) UnLoadSeg(TheClock -> Segment);
X            FreeMem(TheClock,TheClock -> SegSize);
X            if(StdOut) {
X               WriteStdOut("It is my satisfaction to close \33[1mMartin Steppler's Clock\33[0m again\n");
X               WriteStdOut("with the knowledge of a job well done!\n");
X            }
X         }
X         else if(TheClock) {
X
X            // store changes and signal child
X
X            TheClock->FlagsBackup = DefFlag;
X            TheClock->Width = GetWidth(DefFlag);
X            TheClock->LeftEdge = GetOverscan() - TheClock->Width;
X            TheClock -> Father = (struct Task *)ThatsMe;
X            Signal(TheClock -> Child,SIG_CHANGE);
X            Wait(CHILD_READY);
X         }
X      }
X   }
X   if(StdOut)          Close(StdOut);
X   if(IntuitionBase)   CloseLibrary(IntuitionBase);
X   if(DosBase)         CloseLibrary(DosBase);
X}
X
X// calculate width of our window
X
XGetWidth(int DefFlag)
X{
X   int Width = 0;
X
X   if(DefFlag &  1) Width+= TIME_WIDTH;
X   if(DefFlag &  2) Width+= DATE_WIDTH;
X   if(DefFlag &  4) Width+= MEM_WIDTH;
X   if(DefFlag & 32) Width+= ONLINE_WIDTH;
X
X   // default width
X
X   if(!Width) Width = TIME_WIDTH;
X
X   return(Width);
X}
XGetOverscan(void)
X{
X   register struct Screen *WBench;
X   register ULONG IntuiLock;
X
X           // Start with the first one.
X
X   IntuiLock = LockIBase(0L);
X   WBench = IntuitionBase -> FirstScreen;
X   UnlockIBase(IntuiLock);
X
X           // Scan the list...
X   do
X   {
X           // The type we want?
X
X      if((WBench -> Flags & SCREENTYPE) == WBENCHSCREEN)
X         return(WBench -> Width - FRONTBACKGAD_WIDTH);
X   }
X   while(WBench = WBench -> NextScreen);
X
X           // Failed!
X
X   return(640 - FRONTBACKGAD_WIDTH);
X}
END_OF_FILE
if test 8715 -ne `wc -c <'source/MSClock.c'`; then
    echo shar: \"'source/MSClock.c'\" unpacked with wrong size!
fi
# end of 'source/MSClock.c'
fi
if test -f 'source/makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/makefile'\"
else
echo shar: Extracting \"'source/makefile'\" \(479 characters\)
sed "s/^X//" >'source/makefile' <<'END_OF_FILE'
X# makefile for MSClock with Aztec C 5.0d and SKShell
X
Xif [ MSClock-Handler.o -ot MSClock-Handler.c -o ! -f MSClock-Handler.o ]
Xthen
X   echo "Compiling and linking $_ANSI_P3 MSClock-Handler.c $_ANSI_P1 "
X   cc -3 +D +L  MSClock-Handler.c
X   ln +cdb +q -o l:MSClock-Handler MSClock-Handler.o -lcl
Xfi
Xif [ MSClock.o -ot MSClock.c -o ! -f MSClock.o ]
Xthen
X   echo "Compiling and linking $_ANSI_P3 MSClock.c $_ANSI_P1 "
X   cc -wu MSClock.c
X   ln +cdb +q -o c:MSClock MSClock.o -lc
Xfi
END_OF_FILE
if test 479 -ne `wc -c <'source/makefile'`; then
    echo shar: \"'source/makefile'\" unpacked with wrong size!
fi
# end of 'source/makefile'
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@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.