home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!zephyr.ens.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v14i021: xpilot - Multiplayer gravity war game hand-shake program, Part19/24
- Message-ID: <3316@master.CNA.TEK.COM>
- Date: 4 Aug 92 19:30:56 GMT
- Sender: news@master.CNA.TEK.COM
- Lines: 1695
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: Bjoern Stabell <bjoerns@staff.cs.uit.no>
- Posting-number: Volume 14, Issue 21
- Archive-name: xpilot/Part19
- Environment: X11, ANSI C
-
-
-
- #! /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 19 (of 24)."
- # Contents: maps/CAMD.uue src/lib/socklib.c
- # Wrapped by billr@saab on Tue Aug 4 10:38:58 1992
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'maps/CAMD.uue' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'maps/CAMD.uue'\"
- else
- echo shar: Extracting \"'maps/CAMD.uue'\" \(31341 characters\)
- sed "s/^X//" >'maps/CAMD.uue' <<'END_OF_FILE'
- Xbegin 644 CAMD.map
- XM,34P>#$U,`HP"E1H92!#;VUP=71E<B!!:61E9"!-87`@1&5S:6=N97(G<R!F
- XM:7)S="!R96%L('1E<W0N+BX*5&]M($=R>61E;&%N9`IX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'@*>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AS("`@("`@("!A>'AX>&-X>'AX>'AX>'AX>'AX>'AX>'AX>'AS("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('%X"GAX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@(&$@<R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>`IX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX8R`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!Q>'@*>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX<R`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>'AX"GAX>'AX>'AX>'AS8R!A>'AX>'AX>'AX
- XM>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@($9X>`IX>'AX>'AX
- XM>'AS("`@("!A>'AX>'AX9B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X("`@("`@("`@("`@("`@
- XM("`@<7AX<W@*>'AX>'AX>'AS("`@("`@("!A>'AS("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!D
- XM>'<@("`@("`@("`@("`@("`@<7AX<R!X"GAX>'AX>'AS("`@("`@("`@("!&
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('AX=R`@("`@("`@("`@("`@<7AX>"`@>`IX>'AX
- XM>'AX("`@("`@("`@('%X>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX=R`@("`@("`@
- XM("`@<7AX>',@('@*>'AX>'AX>"`@("`@("`@("!X>',@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>'AX>'<@("`@("`@<7AX>'@@("!X"GAX>'AX>',@("`@("`@("`@
- XM>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AW("`J<7AX>'AS("`@>`IX
- XM>'AX>'@@("`@("`@("`@<7AS("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
- XM>'AX>'AX>',@("`@('@*>'AX>'AS("`@("`@("`@('AX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!A>'AX>'AX>',@("`@("!X"GAX>'AX("`@("`@("`@
- XM("!X<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>',@("`@("`@
- XM>`IX>'AX>"`@("`@("`@("!Q>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>',@("`@("`@('@*>'AX>',@("`@("`@("`@>'@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@87@@("`@("`@("!X"GAX>',@("`@("`@
- XM("`@('AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@<7AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@>`IX>'@@("`@("`@("`@("!X("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!Q>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('@*>'AX("`@("`@("`@("`J>&8@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX=R`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"GAX<R`@("`@
- XM("`@("`@87,@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q
- XM>'AX>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>`IX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX1GAX=R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('@*>'@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"GAX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>`IX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AW("`@("`@("`@
- XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>$9X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX<R`@("`@("`@("`@("`@("`@
- XM("`@("`@87AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX<R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>'AX>'AX>'@@("`@
- XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AS("`@8R`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX
- XM>'AX>'AX>'AX>'AX("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX
- XM>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@87AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@
- XM(&1X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!Q>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>'AX
- XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX<R`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@87AX>'AX>'AX>"`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX
- XM>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'@@("`@("`@("`@("`@
- XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX
- XM>'AX("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!A>'AX>'AX>"`@("`@("`@("`@("`@("`@('@*>"`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX
- XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'AW("`@("`@("`@
- XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@<7AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM>'AX>'AF("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AS("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@>'AX>'AX>',@("`@("`@("`@("`@("`@('@*>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@9'AX>'AX>'@@("`@("`@
- XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!X>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X>'AX>'AS("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!D>'AF("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>'AX>'AX("`@("`@("`@("`@("`@("`@('@*
- XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>"`@("`@
- XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@('%X>'AX>'@@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!X>'AX>'AX("`@("`@("`@("`@("`@("`@
- XM('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('(@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>"`@
- XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('%X=R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('AX>'AX>'@@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AW("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX("`@("`@("`@("`@("`@
- XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!Q>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX
- XM<R`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('%X>'AX>'@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('AX>'AX>"`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AS("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'@@("`@("`@("`@("`@
- XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX
- XM>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX
- XM>'AX("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@<7AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@>`IX("`@
- XM("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AS("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>',@("`@("`@("`@
- XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
- XM("`@('%X>'AX>'AX>'AX>'A&("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('%X>'AX>'@@("`@("`@("`@("`@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AS("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX
- XM>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
- XM("`@("!X>'AX>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!&>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@
- XM>`IX("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>',@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@>'AX>'AX>'AX
- XM>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
- XM("`@("`@('AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@>`IX("`@("`@("`@("`@("`@("!X>'AX>'AX>'AS("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('AX=R`@("`@<7AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@>'AX>'AX
- XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AW*B`@
- XM<7AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
- XM("`@("`@("`@('AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@87AX>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>`IX("`@("`@("`@("`@("`@('%X>'AX>'AX>'@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("!X>'AX
- XM>'AX>'AX9B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
- XM("`@("`@("`@("`@>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@('AX>'AX>'AX>',@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("!X
- XM>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@>'AX>'AX>'AX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@('AX>'AX>'AX<R`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
- XM("!X>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@87AX>'AX>'@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("!X>'AX>'AX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM<7AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X"G@@("`@("`@("`@("`@("`@('AX>'AX>'@@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@<7AX>',@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("!X>'AX>'AX
- XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X"G@@("`@("`@("`@("`@("`@('AX>'AX>'AX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!Q>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("!X>'AX
- XM>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'<@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
- XM("`@("`@("`@("`@87AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX
- XM>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!X"GAW("`@("`@("`@("`@("`@("!X>'AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!X>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@>`IX>'<@("`@("`@("`@("`@("`@
- XM>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>'AX
- XM=R`@("`@("`@("`@("`@('AX>'AX>'AX9B`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@
- XM("`@("`@("`@("!X"GAX>'AW("`@("`@("`@("`@("!X>'AX>'AX>"`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'<@("`@("`@("`@("`@("`@("`@("`@>`IX>'AX>'AX>'AW("`@("`@
- XM("`@>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@('@*
- XM>'AX>'AX>'AX>'AW("`@("`@(&%X>'AX>'AX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX=R`@("`@
- XM("`@("`@("`@("`@("!X"GAS87AX>'AX>'AX>'<@("`@("`@>'AX>'AX>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
- XM>'AX>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@>`IX("!A>'AX>'AX>'AX
- XM>"`@("`@('AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@87AX>'AX>'AX>'AX("`@("`@("`@("`@("`@("`@
- XM('@*>"`@("!A>'AX>'AX>'@@("`@("!X>'AX>'AX>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>"`@
- XM("`@("`@("`@("`@("`@("!X"G@@("`@('AX>'AX>'AX("`@("`@>'AX>'AX
- XM>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@>`IX("`@("!A>'AX
- XM>'AX>"`@("`@('AX>'AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@/B`@("`@87AX>'AX>'AX("`@("`@("`@("`@("`@
- XM("`@('@*>"`@("`@("`@87AX>'@@("`@("!X>'AX>'AX>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
- XM>"`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("!X>'AX("`@("`@>'AX
- XM>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!X>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
- XM("`@87AX>"`@("`@<7AX>'AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@<B`@("`@>'AX>'AX>'AS("`@("`@("`@("`@
- XM("`@("`@('@*>"`@("`@("`@('%X>'@@("`@('AX>'AX>'AX>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@9$9F("`@('AX>'AX
- XM>',@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("!X>'AS("`@("!X
- XM>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!C("`@("!X>'AX>'@@("`@("`@("`@("`@("`@("`@("`@>`IX("`@
- XM("`@("`@>'AS("`@("`@>'AX>'AX>'AX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX("`@("`@("`@("`@
- XM("`@("`@("`@('@*>"`@("`@("`@<7AS("`@("`@<7AX>'AX>'AX<R`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX
- XM>'AX>"`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@(',@("`@("`@
- XM<7AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!X>'AX>'@@("`@("`@("`@("`@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@<7AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@/"`@("`@>'AX>'AS("`@("`@("`@
- XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@<7AX>'AX>'AS("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM<7AX>'AS("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
- XM<7AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@<7AX>'AX9B`@("`@("`@("`@("`@("`@("`@("`@
- XM>`IX("`@("`@("`@=R`@<7AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AS("`@("`@("`@
- XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@(&%W<7AX>'AX>',@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
- XM>'AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
- XM>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('%X>'AX>'AX>$8@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@>`IX("`@("`@("`@($9X>'AX<R`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("!X>'AX<R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX
- XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
- XM("!Q>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@<7AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>`IX("`@<7AW("!Q>'AX<R`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AS("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@(&%X>"IQ>'AX<R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AS
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
- XM87AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@<7AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('AX>'AX>'AX>'AX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX
- XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'AX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX
- XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@87AX>'AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'<@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX
- XM>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@87AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'<@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX=R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX
- XM>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@87AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AW("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('AX>'AX1B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@*B`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!A>'AX>',@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'@@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*
- XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@87AS("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("L@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&1X("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!R("`@("`@("`@>`IX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>"H@("`@("`@("`@("`@("`@("`@("`@("!D>'=Q("`@("`@
- XM('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('AS("`@("`@("`@("`@("`@("`@
- XM("`@("`@<7AX<R`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!S("`@
- XM("`@("`@("`@("`@("`@("`@("`@<7AX<R`@("`@("`@>`IX("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX<R`@("`@
- XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('AX<R`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X>'<J("`@("`@("`@>`IX("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@
- XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@<7AX>',@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@<7AX>$8@("`@("`@("`@>`IX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@9'<@('%F("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AS
- XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X("!X("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('%X>'AX=R`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@('AW("!Q>"`@>"`@<7@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'@@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!X>'<@>'@@('@@<7AX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX
- XM>'AX("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX<GA&('%X
- XM<GAX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('%X>'AX>'AX>'<@("`@("`@("!X"GAX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- X">`IX
- X`
- Xend
- END_OF_FILE
- if test 31341 -ne `wc -c <'maps/CAMD.uue'`; then
- echo shar: \"'maps/CAMD.uue'\" unpacked with wrong size!
- fi
- # end of 'maps/CAMD.uue'
- fi
- if test -f 'src/lib/socklib.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/lib/socklib.c'\"
- else
- echo shar: Extracting \"'src/lib/socklib.c'\" \(23176 characters\)
- sed "s/^X//" >'src/lib/socklib.c' <<'END_OF_FILE'
- X/* -*-C-*-
- X *
- X * Project : TRACE
- X *
- X * File : socklib.c
- X *
- X * Description
- X *
- X * Copyright (C) 1991 by Arne Helme, The TRACE project
- X *
- X * Rights to use this source is granted for all non-commercial and research
- X * uses. Creation of derivate forms of this software may be subject to
- X * restriction. Please obtain written permission from the author.
- X *
- X * This software is provided "as is" without any express or implied warranty.
- X *
- X * RCS: socklib.c,v 1.3 1992/06/25 04:31:37 bjoerns Exp
- X * Log: socklib.c,v
- X * Revision 1.3 1992/06/25 04:31:37 bjoerns
- X * Added source id to socklib.
- X *
- X * Revision 1.2 1992/05/19 21:11:39 bjoerns
- X * Minor.
- X *
- X * Revision 1.1.1.1 1992/05/11 12:32:34 bjoerns
- X * XPilot v1.0
- X *
- X * Revision 1.2 91/10/02 08:38:01 08:38:01 arne (Arne Helme)
- X * "ANSI C prototypes added.
- X * Timeout interface changed."
- X *
- X * Revision 1.1 91/10/02 08:34:45 08:34:45 arne (Arne Helme)
- X * Initial revision
- X *
- X */
- X
- X#ifndef lint
- Xstatic char sourceid[] =
- X "@(#)$Id: ";
- X#endif
- X
- X/* _SOCKLIB_LIBSOURCE must be defined int this file */
- X#define _SOCKLIB_LIBSOURCE
- X
- X/* Socklib Includes And Definitions */
- X#include "socklib.h"
- X
- X/* Debug macro */
- X#ifdef DEBUG
- X#define DEB(x) x
- X#else
- X#define DEB(x)
- X#endif
- X
- X/* Default timeout value of socklib_timeout */
- X#define DEFAULT_S_TIMEOUT_VALUE 10
- X#define DEFAULT_US_TIMEOUT_VALUE 0
- X
- X/* Default retry value of sl_default_retries */
- X#define DEFAULT_RETRIES 5
- X
- X/* External references */
- Xextern int errno;
- X
- X/* Environment buffer for setjmp and longjmp */
- Xstatic jmp_buf env;
- X
- X/* Global socklib errno variable */
- Xint sl_errno = 0;
- X
- X/* Global timeout variable. May be modified by users */
- Xint sl_timeout_s = DEFAULT_S_TIMEOUT_VALUE;
- Xint sl_timeout_us = DEFAULT_US_TIMEOUT_VALUE;
- X
- X/* Global default retries variable used by DgramSendRec */
- Xint sl_default_retries = DEFAULT_RETRIES;
- X
- X/* Global variable containing the last address from DgramReceiveAny */
- Xstruct sockaddr_in sl_dgram_lastaddr;
- X
- X/* Global broadcast enable variable (super-user only), default disabled */
- Xint sl_broadcast_enabled = 0;
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SetTimeout()
- X *
- X *******************************************************************************
- X * Description
- X * Sets the global timout value to s + us.
- X *
- X * Input Parameters
- X * s - Timeout value in seconds
- X * us - Timeout value in useconds
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * void
- X *
- X * Globals Referenced
- X * sl_timeout_us - Timeout value in useconds
- X * sl_timeout_s - Timeout value in seconds
- X *
- X * External Calls
- X * None
- X *
- X * Called By
- X * User applications
- X *
- X * Originally coded by Arne Helme
- X */
- X#ifdef __STDC__
- Xvoid
- XSetTimeout(int s, int us)
- X#else
- XSetTimeout(s, us)
- Xint s, us;
- X#endif /* __STDC__ */
- X{
- X sl_timeout_us = us;
- X sl_timeout_s = s;
- X} /* SetTimeout */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * CreateServerSocket()
- X *
- X *******************************************************************************
- X * Description
- X * Creates a TCP/IP server socket in the Internet domain.
- X *
- X * Input Parameters
- X * port - Server's listen port.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The function returns the socket descriptor, or -1 if
- X * any errors occured.
- X *
- X * Globals Referenced
- X * sl_errno - if errors occured: SL_ESOCKET, SL_EBIND,
- X * SL_ELISTEN
- X *
- X * External Calls
- X * socket
- X * bind
- X * listen
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XCreateServerSocket(int port)
- X#else
- XCreateServerSocket(port)
- Xint port;
- X#endif /* __STDC__ */
- X{
- X struct sockaddr_in addr_in;
- X int fd;
- X int retval;
- X
- X fd = socket(AF_INET, SOCK_STREAM, 0);
- X if (fd < 0)
- X {
- X sl_errno = SL_ESOCKET;
- X return (-1);
- X }
- X memset((char *)&addr_in, 0, sizeof(struct sockaddr_in));
- X addr_in.sin_family = AF_INET;
- X addr_in.sin_addr.s_addr = INADDR_ANY;
- X addr_in.sin_port = htons(port);
- X
- X retval = bind(fd, &addr_in, sizeof(struct sockaddr_in));
- X if (retval < 0)
- X {
- X sl_errno = SL_EBIND;
- X (void) close(fd);
- X return (-1);
- X }
- X
- X retval = listen(fd, 5);
- X if (retval < 0)
- X {
- X sl_errno = SL_ELISTEN;
- X (void) close(fd);
- X return (-1);
- X }
- X
- X return (fd);
- X} /* CreateServerSocket */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * GetPortNum()
- X *
- X *******************************************************************************
- X * Description
- X * Returns the port number of a socket connection.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The port number on host standard format.
- X *
- X * Globals Referenced
- X * None
- X *
- X * External Calls
- X * getsockname
- X *
- X * Called By
- X * User applications
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XGetPortNum(int fd)
- X#else
- XGetPortNum(fd)
- Xint fd;
- X#endif /* __STDC__ */
- X{
- X int len;
- X struct sockaddr_in addr;
- X
- X len = sizeof(struct sockaddr_in);
- X if (getsockname(fd, &addr, &len) < 0)
- X return (-1);
- X
- X return (ntohs(addr.sin_port));
- X} /* GetPortNum */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * CreateClientSocket()
- X *
- X *******************************************************************************
- X * Description
- X * Creates a client TCP/IP socket in the Internet domain.
- X *
- X * Input Parameters
- X * host - Pointer to string containing name of the peer
- X * host on either dot-format or ascii-name format.
- X * port - The requested port number.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * Returns the socket descriptor or the error value -1.
- X *
- X * Globals Referenced
- X * sl_errno - If errors occured: SL_EHOSTNAME, SL_ESOCKET,
- X * SL_ECONNECT.
- X *
- X * External Calls
- X * memset
- X * gethostbyname
- X * socket
- X * connect
- X * close
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XCreateClientSocket(char *host, int port)
- X#else
- XCreateClientSocket(host, port)
- Xchar *host;
- Xint port;
- X#endif /* __STDC__ */
- X{
- X struct sockaddr_in peer;
- X struct hostent *hp;
- X int fd;
- X
- X memset((char *)&peer, 0, sizeof(struct sockaddr_in));
- X peer.sin_family = AF_INET;
- X peer.sin_port = htons(port);
- X
- X peer.sin_addr.s_addr = inet_addr(host);
- X if (peer.sin_addr.s_addr == (int)-1)
- X {
- X hp = gethostbyname(host);
- X if (hp == NULL)
- X {
- X sl_errno = SL_EHOSTNAME;
- X return (-1);
- X }
- X else
- X peer.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr))->s_addr;
- X }
- X
- X fd = socket(AF_INET, SOCK_STREAM, 0);
- X if (fd < 0)
- X {
- X sl_errno = SL_ESOCKET;
- X return (-1);
- X }
- X
- X if (connect(fd, &peer, sizeof(struct sockaddr_in)) < 0)
- X {
- X sl_errno = SL_ECONNECT;
- X (void) close(fd);
- X return (-1);
- X }
- X
- X return (fd);
- X} /* CreateClientSocket */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SocketAccept()
- X *
- X *******************************************************************************
- X * Description
- X * This function is called in a TCP/IP server to accept incoming calls.
- X *
- X * Input Parameters
- X * fd - The listen socket.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The functions returns a new descriptor which is used to the
- X * actual data transfer.
- X *
- X * Globals Referenced
- X * None
- X *
- X * External Calls
- X * setsockopt
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XSocketAccept(int fd)
- X#else
- XSocketAccept(fd)
- Xint fd;
- X#endif /* __STDC__ */
- X{
- X int socket;
- X#ifdef __hp9000s300
- X long linger = 1;
- X int lsize = sizeof(long);
- X#else
- X static struct linger linger = {1, 300};
- X int lsize = sizeof(struct linger);
- X#endif
- X socket = accept(fd, NULL, 0);
- X
- X if (setsockopt(socket, SOL_SOCKET, SO_LINGER, (char *)&linger,
- X lsize) == -1)
- X return (-1);
- X else
- X return (socket);
- X} /* SocketAccept */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SocketReadable()
- X *
- X *******************************************************************************
- X * Description
- X * Checks if data have arrived on the TCP/IP socket connection.
- X *
- X * Input Parameters
- X * fd - The socket descriptor to be checked.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * TRUE (non-zero) or FALSE (zero).
- X *
- X * Globals Referenced
- X * socket_timeout
- X *
- X * External Calls
- X * select
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XSocketReadable(int fd)
- X#else
- XSocketReadable(fd)
- Xint fd;
- X#endif /* __STDC__ */
- X{
- X int readfds = 0, writefds = 0, exceptfds = 0;
- X struct timeval timeout;
- X
- X timerclear(&timeout); /* macro function */
- X timeout.tv_sec = sl_timeout_s;
- X timeout.tv_usec = sl_timeout_us;
- X readfds = (1 << fd);
- X
- X (void) select(fd + 1, &readfds, &writefds, &exceptfds, &timeout);
- X
- X if (readfds & (1 << fd))
- X return (1);
- X return (0);
- X} /* SocketReadable */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * inthandler()
- X *
- X *******************************************************************************
- X * Description
- X * Library routine used to jump to a previous state.
- X *
- X * Input Parameters
- X * None
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * None
- X *
- X * Globals Referenced
- X * env
- X *
- X * External Calls
- X * longjmp
- X *
- X * Called By
- X * SocketRead
- X *
- X * Originally coded by Arne Helme
- X */
- X#ifdef __STDC__
- Xstatic void
- X#else
- Xstatic
- X#endif /* __STDC__ */
- Xinthandler()
- X{
- X DEB(fprintf(stderr, "Connection interrupted, timeout\n"));
- X (void) longjmp(env, 1);
- X} /* inthandler */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SocketRead()
- X *
- X *******************************************************************************
- X * Description
- X * Receives <size> bytes and put them into buffer <buf> from
- X * socket <fd>.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * size - The expected amount of data to receive.
- X *
- X * Output Parameters
- X * buf - Pointer to a message buffer.
- X *
- X * Return Value
- X * The number of bytes received or -1 if any errors occured.
- X *
- X * Globals Referenced
- X * sl_timeout
- X *
- X * External Calls
- X * setjmp
- X * alarm
- X * signal
- X * read
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XSocketRead(int fd, char *buf, int size)
- X#else
- XSocketRead(fd, buf, size)
- Xint fd, size;
- Xchar *buf;
- X#endif /* __STDC__ */
- X{
- X int ret, ret1;
- X
- X if (setjmp(env))
- X {
- X (void) alarm(0);
- X (void) signal(SIGALRM, SIG_DFL);
- X return (-1);
- X }
- X ret = 0;
- X while (ret < size)
- X {
- X (void) signal(SIGALRM, ((void (*) ())inthandler));
- X (void) alarm(sl_timeout_s);
- X ret1 = read(fd, &buf[ret], size - ret);
- X DEB(fprintf(stderr, "Read %d bytes\n", ret1));
- X (void) alarm(0);
- X (void) signal(SIGALRM, SIG_DFL);
- X ret += ret1;
- X if (ret1 <= 0)
- X return (-1);
- X }
- X return (ret);
- X} /* SocketRead */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SocketWrite()
- X *
- X *******************************************************************************
- X * Description
- X * Writes <size> bytes from buffer <buf> onto socket <fd>.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * buf - Pointer to a send buffer.
- X * size - The amount of data to send.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The number of bytes sent or -1 if any errors occured.
- X *
- X * Globals Referenced
- X * None
- X *
- X * External Calls
- X * write
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XSocketWrite(int fd, char *buf, int size)
- X#else
- XSocketWrite(fd, buf, size)
- Xint fd, size;
- Xchar *buf;
- X#endif /* __STDC__ */
- X{
- X /*
- X * A SIGPIPE exception may occur if the peer entity has disconnected.
- X */
- X return (write(fd, buf, size));
- X} /* SocketWrite */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * SocketClose()
- X *
- X *******************************************************************************
- X * Description
- X * performs a gracefule shutdown and close on a TCP/IP socket. May
- X * cause errounous behaviour when used on the same connection from
- X * more than one process.
- X *
- X * Input Parameters
- X * fd - The socket to be closed.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * -1 if any errors occured, else 1.
- X *
- X * Globals Referenced
- X * sl_errno - If any errors occured: SL_ESHUTD, SL_ECLOSE.
- X *
- X * External Calls
- X * shutdown
- X * close
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XSocketClose(int fd)
- X#else
- XSocketClose(fd)
- Xint fd;
- X#endif /* __STDC__ */
- X{
- X if (shutdown(fd, 2) == -1)
- X {
- X sl_errno = SL_ESHUTD;
- X return (-1);
- X }
- X
- X if (close(fd) == -1)
- X {
- X sl_errno = SL_ECLOSE;
- X return (-1);
- X }
- X return (1);
- X} /* SocketClose */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * CreateDgramSocket()
- X *
- X *******************************************************************************
- X * Description
- X * Creates a UDP/IP datagram socket in the Internet domain.
- X *
- X * Input Parameters
- X * port - The port number. A value of zero may be specified in
- X * clients to assign any available port number.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * A UDP/IP datagram socket descriptor.
- X *
- X * Globals Referenced
- X * sl_errno - If any errors occured: SL_ESOCKET, SL_EBIND.
- X *
- X * External Calls
- X * socket
- X * memset
- X * bind
- X * close
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XCreateDgramSocket(int port)
- X#else
- XCreateDgramSocket(port)
- Xint port;
- X#endif /* __STDC__ */
- X{
- X struct sockaddr_in addr_in;
- X int fd;
- X int retval;
- X
- X fd = socket(AF_INET, SOCK_DGRAM, 0);
- X if (fd < 0)
- X {
- X sl_errno = SL_ESOCKET;
- X return (-1);
- X }
- X
- X memset((char *)&addr_in, 0, sizeof(struct sockaddr_in));
- X addr_in.sin_family = AF_INET;
- X addr_in.sin_addr.s_addr = INADDR_ANY;
- X addr_in.sin_port = htons(port);
- X retval = bind(fd, &addr_in, sizeof(struct sockaddr_in));
- X if (retval < 0)
- X {
- X sl_errno = SL_EBIND;
- X (void) close(fd);
- X return (-1);
- X }
- X
- X return (fd);
- X} /* CreateDgramSocket */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramSend()
- X *
- X *******************************************************************************
- X * Description
- X * Transmits a UDP/IP datagram.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * host - Pointer to string containing destination host name.
- X * port - Destination port.
- X * sbuf - Pointer to the message to be sent.
- X * size - Message size.
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The number of bytes sent or -1 if any errors occured.
- X *
- X * Globals Referenced
- X * sl_broadcast_enabled
- X * sl_errno - If any errors occured: SL_EHOSTNAME.
- X *
- X * External Calls
- X * memset
- X * inet_addr
- X * gethostbyname
- X * sendto
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XDgramSend(int fd, char *host, int port,
- X char *sbuf, int size)
- X#else
- XDgramSend(fd, host, port, sbuf, size)
- Xint fd, port, size;
- Xchar *host, *sbuf;
- X#endif /* __STDC__ */
- X{
- X struct sockaddr_in the_addr;
- X struct hostent *hp;
- X
- X (void) memset((char *)&the_addr, 0, sizeof(struct sockaddr_in));
- X the_addr.sin_family = AF_INET;
- X the_addr.sin_port = htons(port);
- X if (sl_broadcast_enabled)
- X the_addr.sin_addr.s_addr = INADDR_BROADCAST;
- X else
- X {
- X the_addr.sin_addr.s_addr = inet_addr(host);
- X if (the_addr.sin_addr.s_addr == (int)-1)
- X {
- X hp = gethostbyname(host);
- X if (hp == NULL)
- X {
- X sl_errno = SL_EHOSTNAME;
- X return (-1);
- X }
- X else
- X the_addr.sin_addr.s_addr =
- X ((struct in_addr*)(hp->h_addr))->s_addr;
- X }
- X }
- X return (sendto(fd, sbuf, size, 0, &the_addr,
- X sizeof(struct sockaddr_in)));
- X} /* DgramSend */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramReceiveAny()
- X *
- X *******************************************************************************
- X * Description
- X * Receives a datagram from any sender.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * size - Expected message size.
- X *
- X * Output Parameters
- X * rbuf - Pointer to a message buffer.
- X *
- X * Return Value
- X * The number of bytes received or -1 if any errors occured.
- X *
- X * Globals Referenced
- X * sl_dgram_lastaddr
- X *
- X * External Calls
- X * memset
- X *
- X * Called By
- X * User applications
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XDgramReceiveAny(int fd, char *rbuf, int size)
- X#else
- XDgramReceiveAny(fd, rbuf, size)
- Xint fd;
- Xchar *rbuf;
- Xint size;
- X#endif /* __STDC__ */
- X{
- X int addrlen = sizeof(struct sockaddr_in);
- X
- X (void) memset((char *)&sl_dgram_lastaddr, 0, addrlen);
- X return (recvfrom(fd, rbuf, size, 0, &sl_dgram_lastaddr, &addrlen));
- X} /* DgramReceiveAny */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramReceive()
- X *
- X *******************************************************************************
- X * Description
- X * Receive a datagram from a specifc host. If a message from another
- X * host arrives, an error value is returned.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * from - Pointer to the specified hostname.
- X * size - Expected message size.
- X *
- X * Output Parameters
- X * rbuf - Pointer to message buffer.
- X *
- X * Return Value
- X * The number of bytes received or -1 if any errors occured.
- X *
- X * Globals Referenced
- X * sl_dgram_lastaddr
- X * sl_errno - If any errors occured: SL_EHOSTNAME, SL_EWRONGHOST.
- X *
- X * External Calls
- X * inet_addr
- X * gethostbyname
- X * DgramReceiveAny
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XDgramReceive(int fd, char *from, char *rbuf, int size)
- X#else
- XDgramReceive(fd, from, rbuf, size)
- Xint fd, size;
- Xchar *from, *rbuf;
- X#endif /* __STDC__ */
- X{
- X struct sockaddr_in tmp_addr;
- X struct hostent *hp;
- X int retval;
- X
- X tmp_addr.sin_addr.s_addr = inet_addr(from);
- X if (tmp_addr.sin_addr.s_addr == (int)-1)
- X {
- X hp = gethostbyname(from);
- X if (hp == NULL)
- X {
- X sl_errno = SL_EHOSTNAME;
- X return (-1);
- X }
- X else
- X tmp_addr.sin_addr.s_addr =
- X ((struct in_addr*)(hp->h_addr))->s_addr;
- X }
- X retval = DgramReceiveAny(fd, rbuf, size);
- X if (retval == -1 ||
- X tmp_addr.sin_addr.s_addr != sl_dgram_lastaddr.sin_addr.s_addr)
- X {
- X sl_errno = SL_EWRONGHOST;
- X return (-1);
- X }
- X return (retval);
- X} /* DgramReceive */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramInthandler()
- X *
- X *******************************************************************************
- X * Description
- X * Library routine used by DgramSendRec to handle alarm interrupts.
- X *
- X * Input Parameters
- X * None
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * None
- X *
- X * Globals Referenced
- X * None
- X *
- X * External Calls
- X * signal
- X *
- X * Called By
- X * DgramSendRec
- X *
- X * Originally coded by Arne Helme
- X */
- X#ifdef __STDC__
- Xstatic void
- XDgramInthandler(void)
- X#else
- Xstatic
- XDgramInthandler()
- X#endif /* __STDC__ */
- X{
- X (void) signal(SIGALRM, ((void (*) ())DgramInthandler));
- X} /* DgramInthandler */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramSendRec()
- X *
- X *******************************************************************************
- X * Description
- X * Sends a message to a specified host and receives a reply from the
- X * same host. Messages arriving from other hosts when this routine is
- X * called will be discarded. Timeouts and retries can be modified
- X * by setting the global variables sl_timeout and sl_default_retries.
- X *
- X * Input Parameters
- X * fd - The socket descriptor.
- X * host - Pointer to string contaning a hostname.
- X * port - The specified port.
- X * sbuf - Pointer to buffer containing message to be sent.
- X * sbuf_size - The size of the outgoing message.
- X * rbuf_size - Expected size of incoming message.
- X *
- X * Output Parameters
- X * rbuf - Pointer to message buffer.
- X *
- X * Return Value
- X * The number of bytes received from the specified host or -1 if any
- X * errors occured.
- X *
- X * Globals Referenced
- X * errno
- X * sl_errno
- X * sl_timeout
- X * sl_default_retries
- X *
- X * External Calls
- X * alarm
- X * signal
- X * DgramSend
- X * DgramReceive
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XDgramSendRec(int fd, char *host, int port, char *sbuf,
- X int sbuf_size, char *rbuf, int rbuf_size)
- X#else
- XDgramSendRec(fd, host, port, sbuf, sbuf_size, rbuf, rbuf_size)
- Xint fd, port, sbuf_size, rbuf_size;
- Xchar *host, *sbuf, *rbuf;
- X#endif /* __STDC__ */
- X{
- X int retval;
- X int retry = sl_default_retries;
- X
- X (void) signal(SIGALRM, ((void (*) ())DgramInthandler));
- X while (retry)
- X {
- X if (DgramSend(fd, host, port, sbuf, sbuf_size) == -1)
- X return (-1);
- X
- X (void) alarm(sl_timeout_s);
- X retval = DgramReceive(fd, host, rbuf, rbuf_size);
- X if (retval == -1)
- X if (errno == EINTR || sl_errno == SL_EWRONGHOST)
- X /* We have a timeout or a message from wrong host */
- X if (--retry)
- X continue; /* Try one more time */
- X else
- X {
- X sl_errno = SL_ENORESP;
- X break; /* Unable to get response */
- X }
- X else
- X {
- X sl_errno = SL_ERECEIVE;
- X break; /* Unable to receive response */
- X }
- X else
- X break; /* Datagram from <host> arrived */
- X }
- X (void) alarm(0);
- X (void) signal(SIGALRM, SIG_DFL);
- X return (retval);
- X} /* DgramInthandler */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramLastaddr()
- X *
- X *******************************************************************************
- X * Description
- X * Extracts the last host address from the global variable
- X * sl_dgram_lastaddr.
- X *
- X * Input Parameters
- X * None
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * Pointer to string containing the host address. Warning, the string
- X * resides in static memory area.
- X *
- X * Globals Referenced
- X * sl_dgram_lastaddr
- X *
- X * External Calls
- X * inet_ntoa
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xchar *
- X#ifdef __STDC__
- XDgramLastaddr(void)
- X#else
- XDgramLastaddr()
- X#endif /* __STDC__ */
- X{
- X return (inet_ntoa(sl_dgram_lastaddr.sin_addr));
- X} /* Dgram_Lastaddr */
- X
- X
- X/*
- X *******************************************************************************
- X *
- X * DgramLastport()
- X *
- X *******************************************************************************
- X * Description
- X * Extracts the last host port from the global variable sl_dgram_lastaddr.
- X *
- X * Input Parameters
- X * None
- X *
- X * Output Parameters
- X * None
- X *
- X * Return Value
- X * The last port number on host standard format.
- X *
- X * Globals Referenced
- X * sl_dgram_lastaddr
- X *
- X * External Calls
- X * None
- X *
- X * Called By
- X * User applications.
- X *
- X * Originally coded by Arne Helme
- X */
- Xint
- X#ifdef __STDC__
- XDgramLastport(void)
- X#else
- XDgramLastport()
- X#endif /* __STDC__ */
- X{
- X return (ntohs((int)sl_dgram_lastaddr.sin_port));
- X} /* Dgram_Lastaddr */
- END_OF_FILE
- if test 23176 -ne `wc -c <'src/lib/socklib.c'`; then
- echo shar: \"'src/lib/socklib.c'\" unpacked with wrong size!
- fi
- # end of 'src/lib/socklib.c'
- fi
- echo shar: End of archive 19 \(of 24\).
- cp /dev/null ark19isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 24 archives.
- echo "\nNow run 'bldmaps.sh' to build the map files"
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-