home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-11 | 64.9 KB | 1,581 lines |
- Newsgroups: comp.sources.misc
- From: casey@gauss.llnl.gov (Casey Leedom)
- Subject: v38i109: lic - LLNL Line Integral Convolution, v1.2, Part06/10
- Message-ID: <1993Aug12.013908.14233@sparky.sterling.com>
- X-Md4-Signature: 64cf321283b575bf139fd82cad4b7ae6
- Sender: kent@sparky.sterling.com (Kent Landfield)
- Organization: Sterling Software
- Date: Thu, 12 Aug 1993 01:39:08 GMT
- Approved: kent@sparky.sterling.com
-
- Submitted-by: casey@gauss.llnl.gov (Casey Leedom)
- Posting-number: Volume 38, Issue 109
- Archive-name: lic/part06
- Environment: UNIX
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: lic.1.2/doc/siggraph93/p.frame.UU.C
- # lic.1.2/liblic/Filters.c lic.1.2/lic/lic.c
- # Wrapped by kent@sparky on Wed Aug 11 19:38:05 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 6 (of 10)."'
- if test -f 'lic.1.2/doc/siggraph93/p.frame.UU.C' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lic.1.2/doc/siggraph93/p.frame.UU.C'\"
- else
- echo shar: Extracting \"'lic.1.2/doc/siggraph93/p.frame.UU.C'\" \(32376 characters\)
- sed "s/^X//" >'lic.1.2/doc/siggraph93/p.frame.UU.C' <<'END_OF_FILE'
- XM $+', !554 555 "JJH * ')#Z@ W' CZ'%1H92!U<'!E<B!L969T
- XM(&AA;F0@<75A<G1E<B!O9B!T:&4@8VER8W5L87(@=F5C=&]R(!P+<@ .55(
- XM!554 *JJ@ <D/J [9 $!F:65L9"!I<R!C;VYV;VQV960@=7-I;F<@3$E#
- XM(&]V97(@0G5T=&5R=V]R=&@@;&]W+7!A<W,@9FEL=&5R960@ %U50 55
- XM5 "JJH ')#ZA=+ !!=VAI=&4@;F]I<V4@=VET:"!C=71O9F8@9G)E<75E
- XM;F-I97,@;V8@,3(X+" X-BP@-C0L(&%N9" S,B H;&5F="!H "!53@ %550
- XM JJJ $ !R0^H#N( &G1O(')I9VAT+"!T;W @=&\@8F]T=&]M*2X+ #8 V
- XM [_G; (N)-P[$#ML.F0[+#I< . '!O .U0[R
- XM '); !YO4 !EFCP 9_.N K+RP[%#N(.P [1#K8 0 ');
- XM !YO4 !KO_@ %A<@"597%U86Q;8VAA<EML72QL97%;:6YD97AE<ULP
- XM+#$L=&EM97-;8VAA<EMI72QS=')I;F=;(A%S=6-H$71H8701(ETL8VAA<EMS
- XM75TL8VAA<EMI75TL;&5S<W1H86Y;8VAA<EM,72QI;F1E>&5S6S L,2QC:&%R
- XM6W-=+'!L=7-;8VAA<EMI72QN=6U;,2PB,2)=75U=75TL #8 V [_G;
- XM 0_S@0[N$.E@ #I0 . &%R .U@[N
- XM &UA #8#$@%9"H( [_G; #&M3@['#MH [/#IH . &%R /_^
- XM'_\.R0[3 .FPBS U0 &%R !W5P !-0XL J?'Q !4X' [(#MD.T@ #K8
- XM / "QC#K\.P ? %8 !+"Z )YXS@ 5.$P.R0[B .V@['
- XM$ !N*@!N/+T $<67 (!9ET PF5Q=6%L6W1I;65S6V-H87);:UTL:61;
- XM8VAA<EMW75U=+&-R;W-S6V]V97);<&QU<UMN=6U;,2PB,2)=+&-O<UMI9%MT
- XM:6UE<ULH*FXJ*6-H87);8UTL8VAA<EMW75U=75TL;G5M6S(L(C(B75TL;W9E
- XM<EMP;'5S6VYU;5LQ+"(Q(ETL8V]S6VED6W!L=7-;=&EM97-;8VAA<EMD72QC
- XM:&%R6W==72QC:&%R6V)E=&%=75U=72QN=6U;,BPB,B)=75U= !Z", E2%
- XMQI/" &16P@[*#N(.S0[4#L\ 0 (',$0!99*D @%55 ,]
- XM97%U86Q;<')O;7!T6UTL=&EM97-;;W9E<EMN=6U;,2PB,2)=+&YU;5LT+"(T
- XM(EU=+&ED6V%T;W!;<&QU<UMC:&%R6V)=+&UI;G5S6W!L=7-;*"IN*BEC:&%R
- XM6V%=+&]V97);<VEN6W!L=7-;*"IN*BEI9%MT:6UE<UMC:&%R6V)=+&-H87);
- XM8UU=72QM:6YU<UMS:6Y;:61;=&EM97-;8VAA<EMA72QC:&%R6V-=75U=75U=
- XM+&-H87);8UU=75U=+'!L=7-;<W1R:6YG6R(1(ETL;W9E<EMS:6Y;<&QU<ULH
- XM*FXJ*6ED6W!L=7-;=&EM97-;8VAA<EMB72QC:&%R6V1=72QC:&%R6V)E=&%=
- XM75TL;6EN=7-;<VEN6VED6W!L=7-;=&EM97-;8VAA<EMA72QC:&%R6V1=72QC
- XM:&%R6V)E=&%=75U=75U=+&-H87);9%U=72QP;'5S6W-T<FEN9ULB$2)=+&]V
- XM97);<VEN6W!L=7-;*"IN*BEI9%MP;'5S6W1I;65S6V-H87);8ETL:61;<&QU
- XM<ULH*FXJ*6-H87);8UTL;6EN=7-;8VAA<EMD75U=75TL;6EN=7-;8VAA<EMB
- XM971A75U=72QM:6YU<UMS:6Y;:61;<&QU<UMT:6UE<UMC:&%R6V%=+&ED6W!L
- XM=7-;*"IN*BEC:&%R6V-=+&UI;G5S6V-H87);9%U=75U=+&UI;G5S6V-H87);
- XM8F5T85U=75U=75U=+'1I;65S6VYU;5LR+"(R(ETL:61;<&QU<UMC:&%R6V-=
- XM+&UI;G5S6V-H87);9%U=75U=75TL<&QU<UMS=')I;F=;(A$B72QO=F5R6W-I
- XM;EMP;'5S6R@J;BHI:61;<&QU<UMT:6UE<UMC:&%R6V)=+&ED6W!L=7-;8VAA
- XM<EMC72QC:&%R6V1=75U=+&-H87);8F5T85U=72QM:6YU<UMS:6Y;:61;<&QU
- XM<UMT:6UE<UMC:&%R6V%=+&ED6W!L=7-;8VAA<EMC72QC:&%R6V1=75U=+&-H
- XM87);8F5T85U=75U=75TL=&EM97-;;G5M6S(L(C(B72QI9%MP;'5S6V-H87);
- XM8UTL8VAA<EMD75U=75U=75U=73$ -@ ;=\[0#O^=L!!H,2#LL.VP[$#K4.
- XMEP X 87( [9#O$ 97( P=D &5G+P!M
- XM!W, 1019#LP.X@[!#M<.J@ #M<.ZQ 6V, .8L= (G:4P " 5TL B]E
- XM<75A;%MI;F1E>&5S6S L,2QC:&%R6W-=+&-H87);95U=+&QP87)E;ELH*FDR
- XM:2HI871O<%MT:6UE<UMC:&%R6VEN9G1Y72QS=')I;F=;(A%I9A$B72QC:&%R
- XM6U9=+'-T<FEN9ULB$7P2?!$B72QC:&%R6R@J;BHI95TL<W1R:6YG6R(1$1$1
- XM$1$1$1$1$1$1$1$1$2)=72QT:6UE<UMN=6U;,"PB,")=+'-T<FEN9ULB$6EF
- XM$2)=+&QE<W-T:&%N6R@J;BHI;W9E<ELH*FXJ*7!L=7-;*"IN*BEF;&]O<ELH
- XM*FXJ*6EN9&5X97-;*"IN*BDP+#$L8VAA<ELH*FXJ*5!=+&-H87);*"IN*BEC
- XM75U=+&UI;G5S6R@J;BHI:6YD97AE<ULH*FXJ*3 L,2QC:&%R6R@J;BHI4%TL
- XM8VAA<ELH*FXJ*6-=75U=+&EN9&5X97-;*"IN*BDP+#$L8VAA<ELH*FXJ*59=
- XM+&-H87);*"IN*BEC75U=+'1I;65S6VYU;5LH*FXJ*3 L(C B72QS=')I;F=;
- XM(A$1$2)=75U=+'1I;65S6V]V97);<&QU<UMF;&]O<EMI;F1E>&5S6S L,2QC
- XM:&%R6U!=+&-H87);8UU=72QM:6YU<UMI;F1E>&5S6S L,2QC:&%R6U!=+&-H
- XM87);8UU=75TL:6YD97AE<ULP+#$L8VAA<EM672QC:&%R6V-=75TL<W1R:6YG
- XM6R(1;W1H97)W:7-E(EU=75U=97-; !Z?Z0 %EJP )2JS "! \P[-#N( [*
- XM#L\ 0 %MC #$U0@ 7:!T @%U<P _:6YT6W1I;65S6V-H87);
- XM:UTL:61;8VAA<EMW75TL8VAA<EMD72QC:&%R6W==72QC:&%R6V%=+&-H87);
- XM8EU=75U= #8 (@=L@ [_G; *^)-P[.#ML.W@[;#IT . %LH
- XM .WP[B %MB #0CV &S"H( \[A1 (_K!P[/#MH.QP
- XM#IH . &)E /_LA L.S0[4 .FPBT U0 '-; -M@# 0$;8
- XM%B28 JVW@[0#ML.J0 #JL , %MD -M@# 0$;8 %B28 JVW@
- XM !_P <&P %R6P & !@ ,
- XM !H :0/HETQ 4<",H<"^T VVGD !\MH0 6))@ "'WZ#M$.VP[%#M(.M@
- XM P VVGD !\MH0 6))@ "'WZ (!
- XM 5MC 8 & P &@!IP^B97$ !1P(UQP+90#;
- XM48$ 9K_Y !8DF '[\ .T@[;#M$.R ZV # #;48$ 9K_Y !8D
- XMF '[\ @( &AA !='( !@
- XM 8 # : &[#Z(H*@ %' C8' MT -N . )6VP %B28 JVW@[3#ML.
- XMV@ #L< , '5M -N . )6VP %B28 JVW@
- XM " P *"H %S6P & !@ , !H :L/HF1E 4<
- XM"+X<"RH W X !!9K0 6))@ "K;>#M0.VP[* .SP P :6X W X
- XM !!9K0 6))@ "K;> ($ !;*
- XM 5U= 8 & P &@!K@^B+&, !1P(W1P+*@ >8DW ._YVP 2
- XM .U0[; .\@[$ # P+ >8DW ._YVP 2
- XM @@ '); "<UL !554 555 "JJH * &W
- XM#ZA=70 X' B\'$-I<F-U;&%R(&%N9"!T=7)B=6QE;G0@9FQU:60@9'EN86UI
- XM8W,@=F5C=&]R(&9I96QD<R L8P .55( !554 *JJ@! ;</J&]T "-I;6%G
- XM960@=7-I;F<@3$E#(&]V97(@=VAI=&4@;F]I<V4N"P .R@ ](,2 ._"
- XMCP ; .U@[; .[@[& # !T:0 ](,2 ._"CP ;
- XM @D &AA #:&$ !554 555 "JJH
- XM* &Y#ZCYVP U' C '$$@='=O+61I;65N<VEO;F%L('9E8W1O<B!F:65L9"!S
- XM:&]W:6YG('1H92!L;V-A;""" Y54@ %550 JJJ !N0^H 4W-T<F5A
- XM;2!L:6YE('-T87)T:6YG(&EN(&-E;&P@*!L/JAMX&P^H&RP@&P^J&WD;#Z@;
- XM*2X@5&AE('9E8W1O<B!F:65L9"!I<R!T:&4@=7!P97(@ !=54 %550
- XM JJJ $@!N0^H 3&QE9G0@8V]R;F5R(&]F('1H92!F;'5I9"!D>6YA;6EC
- XM<R!F:65L9"!I;B!F:6=U<F5S(!P)$APR' D6'"!A;F0@' DO'#0<"3 <+@MI
- XMY !M,RT ;[3U &CSOP R#Y0.UP[B#LP.Z ZJ#LP [K$ "AK0P BJVW
- XM (! !C&EN6R@J;BHI=&EM97-;<W1R:6YG6R)F;W(B72QI9%MC;VUM
- XM85LH*FXJ*6-H87);*"IN*BEE72QC:&%R6R@J;BHI8UU=75TL:61;*"II,FDJ
- XM*6%T;W!;:61;=&EM97-;8VAA<EMT72QC:&%R6V]=+&-O;6UA6R@J;BHI8VAA
- XM<ELH*FXJ*7!=+&-H87);*"IN*BEY75U=72QI9%MT:6UE<UMC:&%R6V)=+&-H
- XM87);;UTL8VAA<EMT72QC:&%R6W1=+&-H87);;UTL8V]M;6%;*"IN*BEC:&%R
- XM6R@J;BHI;5TL8VAA<ELH*FXJ*7E=75U=+&ED6W1I;65S6V-H87);;%TL8VAA
- XM<EME72QC:&%R6V9=+&-O;6UA6R@J;BHI8VAA<ELH*FXJ*71=+&-H87);*"IN
- XM*BEX75U=72QI9%MT:6UE<UMC:&%R6W)=+&-H87);:5TL8VAA<EMG72QC:&%R
- XM6VA=+&-O;6UA6R@J;BHI8VAA<ELH*FXJ*71=+&-H87);*"IN*BEX75U=75U=
- XM70 "X40 N%$ [HDW .Z)-P[8#N<.PP #K4 &
- XM ](,2 ._YVP 2 .V0[; .\0[+ # !MP ](,2 ._Y
- XMVP 2 @H &%M "8W0 !554
- XM 555 "JJH * '!#ZA55 ]' CS'%!H;W1O9W)A<&@@;V8@9FQO=V5R<R!P
- XM<F]C97-S960@=7-I;F<@3$E#('=I=&@@&P^J&TP;#Z@;((\ #E52 555 "
- XMJJH 0 '!#Z@ Y97%U86P@=&\@,"P@-2P@,3 @86YD(#(P("AL969T('1O
- XM(')I9VAT+"!T;W @=&\@8F]T=&]M*2X+5 +51X '#JB .'4@P 4*,X.V@[B
- XM#LD.TP[' $ !I;P!\/U\ *$ ! (!;&0!671I;65S6W-T<FEN
- XM9ULB$3TB72QO=F5R6VYU;5LQ+"(Q(ETL;G5M6S0L(C0B75TL:61;<&QU<ULH
- XM*FXJ*6YU;5LQ+"(Q(ETL8V]S6W!L=7-;*"IN*BEI9%MT:6UE<ULH*FXJ*6-H
- XM87);8UTL8VAA<EMW75U=+&-O<UMT:6UE<UMI9%MP;'5S6W1I;65S6V-H87);
- XM9%TL8VAA<EMW75TL8VAA<EMB971A75U=+'1I;65S6R@J;BHI<W1R:6YG6R@J
- XM;BHI(A$K(ETL8V]S6R@J;BHI=&EM97-;*"IN*BEI9%MT:6UE<UMC:&%R6R@J
- XM;BHI8UTL8VAA<ELH*FXJ*7==75TL8V]S6R@J;BHI:61;<&QU<ULH*FXJ*71I
- XM;65S6R@J;BHI8VAA<ELH*FXJ*61=+&-H87);*"IN*BEW75TL8VAA<ELH*FXJ
- XM*6)E=&%=75U=75U=75U=75U=76,!/4W2 B!VR #O^=L KXDW#ML.VP[. .
- XMG0 X =%T [D#N4 87( -@ #8 #O
- XM^=L!1!)N#MP.VPZ?#MX.G0 X 8V@ [@#O,
- XM 8V@ -SWS@#O^=L &P #MT.VP #OL.P@ P *6T
- XM -SWS@#O^=L &P (, L8P
- XM RQC 555 %550 JJJ "@!P@^H*BD -QP(^!Q0:&%S92!S:&EF=&5D($AA
- XM;FYI;F<@<FEP<&QE(&9U;F-T:6]N<RAT;W I+"!A($AA;@9H72P #E52 55
- XM5 "JJH '"#ZAN*@ Y;FEN9R!W:6YD;W=I;F<@9G5N8W1I;VXH;6ED9&QE
- XM*2P@86YD($AA;FYI;F<@<FEP<&QE(&9U;F,& 755 !554 *JJ@! <(/
- XMJ #ET:6]N<R!M=6QT:7!L:65D(&)Y('1H92!(86YN:6YG('=I;F1O=R!F
- XM=6YC=&EO;BAB;W1T;VTI+@L 3U-T@ V [_G; )V)-P[>#ML.W [.#IT
- XM . !P( .X0\ ',@ "4B3< [_G;
- XM !L [?#ML [B#LX , ""/ "4B3< [_G; !L
- XM "#P 9" -F= %550 !554 *JJ@ H
- XM = /J&)O #D<")D<02!W:6YD('9E;&]C:71Y('9I<W5A;&EZ871I;VX@:7,@
- XM8W)E871E9"!B>2!C;VUP;W-I= 9D Y54@ %550 JJJ !T ^H(ET .FEN
- XM9R!A;B!I;6%G92!O9B!.;W)T:"!!;65R:6-A('5N9&5R(&%N(&EM86=E(&]F
- XM('1H92!V96QO8P8 %U50 555 "JJH 0 '0#ZAN*@!%:71Y(&9I96QD(')E
- XM;F1E<F5D('5S:6YG('9A<FEA8FQE(&QE;F=T:"!,24,@;W9E<B Q+QL/JAMF
- XM&P^H&R!N;VES92X+70 !*1)N ._YVP ; .X [; .\P[<
- XM# H*@ !*1)N ._YVP ; @T
- XM "IN #+&, !554 555 "JJH * ',#ZAN*@ U' D '%=H:71E(&YO
- XM:7-E(&-O;G9O;'9E9"!W:71H(&9L=6ED(&1Y;F%M:6-S('9E8W1O<B!= Y5
- XM4@ %550 JJJ !S ^H=L@ 0&9I96QD('5S:6YG('9A<FEA8FQE(&YO<FUA
- XM;&EZ871I;VX@*'1O<"D@=F5R<W5S(&9I>&5D(&YO<FUA;&EZ8082;@ 755
- XM!554 *JJ@! <P/J&-H ]T:6]N("AB;W1T;VTI+@L 'F)-P#O
- XM^=L ) #N$.VP #P .W@ P 'F)-P#O^=L )
- XM (. ! 555 %550 JJJ
- XM "@!S@^H <( ,QP(EAQ7:&ET92!N;VES92!C;VYV;VQV960@=VET:"!C:&5C
- XM:V5R8F]A<F0@=F5C=&]R("P@80 .55( !554 *JJ@ <X/J*JJ $%F:65L
- XM9"!U<VEN9R!F:7AE9"!N;W)M86QI>F%T:6]N("AL969T*2P@86YD('1H96X@
- XM9W)A9&EE;G0@<VAA9&5D( %U50 555 "JJH '.#Z@ \*')I9VAT
- XM*2!T;R!G:79E('1H92!A<'!E87)A;F-E(&]F(&$@<F]U9V@@=V]V96X@<W5R
- XM9F%C92!T97@&3=( (%5. 555 "JJH 0 '.#Z@.S@ &='5R92X+ "X40
- XMN%$ [HDW (Z/7 [B#N<.WP #LX & (DW ._YVP V -@ ._Y
- XMVP%$$FX.XP[;#J(.Y@Z@ #@#YVP #NP/ 0
- XM E(DW ._YVP ; .Y [; .Y0[; # !B;P
- XME(DW ._YVP ; A &%T #
- XM8V\ !554 555 "JJH * '1#ZBJJ@ X' D)'%1H92!F:7AE9"!N;W)M86QI
- XM>F%T:6]N(&9L=6ED(&1Y;F%M:6-S(&9I96QD(&EM86=E9"!T: .55( !554
- XM *JJ@ ( =$/J*JJ $=I;B!F:6=U<F4@' C@'#@<".(<(&ES(&UU;'1I<&QI
- XM960@8GD@82!C;VQO<B!I;6%G92!O9B!T:&4@;6%G;FET=61E(&]F(&]I<P 7
- XM55 !554 *JJ@! =$/J !)T:&4@=F5C=&]R(&9I96QD+@L +A1 "X
- XM40#NB3< CH]<#N4.YP[D .VP 8 #8 ([=L@ [_G;
- XM )2)-P[F#ML.XP[G#J . !P) .Z0\#
- XM &0@ 3U-T@' ?.T [_G; 0^#$@[G#ML.Y@ #J . %54
- XM .Z@\" &EN -NWZ "#%-0 %B28 D,,P[H#ML.UP[K#JH
- XM , '-U -NWZ "#%-0 %B28 D,,P "!@
- XM =&D %T= & !@ , !H =(/HOG; 4<"-,<"]L
- XM 'F)-P#O^=L &P #ND.VP #P,.Y@ P 'F)-P#O
- XM^=L &P (1 "JJ@ ! '" 55
- XM5 %550 JJJ "@!TP^H8V\ .!P)'AQ4:&4@;W)I9VEN86P@<&AO=&\@;VX@
- XM=&AE(&QE9G0@<VAO=W,@;F\@;6]T:6]N(&)L=7(&9FD #E52 555 "JJH
- XM '3#ZAR;0 _<FEN9R!4:&4@<&AO=&\@;VX@=&AE(')I9VAT('5S97,@=F%R
- XM:6%B;&4@;&5N9W1H($Q)0R!T;R!M;W1I;VX@/"AR !=54 %550 JJJ !
- XMTP^H87 /6)L=7(@0F]R:7,@665L='-I;M5S('=A=FEN9R!A<FTL('-I;75L
- XM871I;F<@82!S;&]W97(@<VAU='1E<B!U "6JJ %550 JJJ $ !TP^HCUP
- XM!W-P965D+@O. /2#$@#O^=L &P #NH.VP #P(.YP P
- XM#N8 /2#$@#O^=L &P (2 ")
- XM-P P 555 %550 JJJ "@!U0^H8F\ /!P)(1Q!('1H<F5E+61I
- XM;65N<VEO;F%L(#4Q,AL/K1LS&P^H&R!E;&5C=')O<W1A=&EC(&9I96QD(&ES
- XM(*JJ Y54@ %550 JJJ !U0^H9FD /6EM86=E9"!B>2!V;VQU;65T<FEC
- XM86QL>2!R87D@=')A8VEN9R!A('1H<F5E+61I;65N<VEO;F%L('-C80;1 !=5
- XM4 %550 JJJ $ !U0^HX!P +VQA<B!F:65L9"!P<F]D=6-E9"!U<VEN9R!,
- XM24,@;W9E<B!W:&ET92!N;VES92X+='5D ,'9 !E9R\ TQ^( $4$60[K#MD.
- XMZ #JH / '9E#LP.UP !*1)N ._YVP ; .[ [; / 0[C
- XM # !*1)N ._YVP ; A,
- XM # !554 555 "JJH ( ';#ZA1@0 R02!P:&]T
- XM;V=R87!H("AT;W I(&]F('1H92!&;&%V:6%N($%M<&AI=&AE871E<B!I<R
- XM#E52 555 "JJH ';#Z@DF !!=7-E9"!T;R!C<F5A=&4@82!V96-T;W(@
- XM9FEE;&0N(%1H92!F:65L9"!I<R!T:&5N('5S960@=&\@:6UA9V4@82!I !=5
- XM4 %550 JJJ $@!VP^H .])P86EN=&5DTR!V97)S:6]N(&]F('1H92!S
- XM86UE('!H;W1O9W)A<&@@*&)O='1O;2D<"+\<&P^N&RX+[_G; !NEP
- XM[QUB -AR"0[M#MD/#0 #L( / #OL/#0 ._YVP#O
- XM^=L.[@[:#M8 [& #0!I;@ ( 8SQU/CQU
- XM/CQC/F%V<SQC/F1A=&$\8SYF:6YA;"YP87!E<CQC/F9I9W5R93,N97!S/%4^
- XM+VAO;64O=3 V+V-A8G)A;"]A=G,O9&%T82]F:6YA;"YP87!E<B]F:6=U<F4S
- XM+F5P<T,@= ._YVP#O^=L.[P[:#O0 ZR #0!B;
- XM ; 8SQU/CQU/CQC/F%V<SQC/F1A=&$\8SYF:6YA;"YP
- XM87!E<CQC/F9I9W5R93$N97!S/%4^+VAO;64O=3 V+V-A8G)A;"]A=G,O9&%T
- XM82]F:6YA;"YP87!E<B]F:6=U<F4Q+F5P<^< $]3=( -@ ._YVP"+B3<.
- XM\ [A#I,.L@Z/ #@ #O4/#@
- XMN%$ +A1 .Z)-P#NB3<.\0[G#MD [+ !@!D:0!E;G, +A1 "X
- XM40#NB3< <X]<#O(.YP[5 .Q 8 :64 9"!I "X40 N%$ [HDW
- XM 2,8DP[S#N<.X #MP & 'D@ &]L=0 ](,2 ._YVP 2 .
- XM] [; .[PZR # !E;@ ](,2 ._YVP 2
- XM @4 &0@ "960 !554 555 "JJH * &P#ZAI
- XM= V' C/'%1H92!M87!P:6YG(&]F(&$@=F5C=&]R(&]N=&\@82!$1$$@;&EN
- XM92!A;F0@:6YP=70@ Y54@ %550 JJJ $ !L ^H#P$ +G!I>&5L(&9I96QD
- XM(&=E;F5R871I;F<@82!S:6YG;&4@;W5T<'5T('!I>&5L+@L 'F)-P#O
- XM^=L $@ #O4.VP #PX.\ P 48$ 'F)-P#O^=L $@
- XM (' !H90 G,@ 555 %550 JJJ
- XM "@!M0^H))@ .!P(XQQ#:7)C=6QA<B!A;F0@='5R8G5L96YT(&9L=6ED(&1Y
- XM;F%M:6-S('9E8W1O<B!F:65L9',@(&D #E52 555 "JJH 0 &U#ZBJJ@ O
- XM:6UA9V5D('5S:6YG($1$02!C;VYV;VQU=&EO;B!O=F5R('=H:71E(&YO:7-E
- XM+@MH("@ &Z7 0 O__\ 2 #OL.V@[=#P0.P@ #P0.[0T <@D
- XM !#@ %D\=3X\=3X\8SYA=G,\8SYD871A/&,^9FEN86PN<&%P
- XM97(\8SYH,#$N<',\53XO:&]M92]U,#8O8V%B<F%L+V%V<R]D871A+V9I;F%L
- XM+G!A<&5R+V@P,2YP<V$ +A1 "X40#NB3< <X]<#P .YP[A .W@
- XM 8 86P 879S "X40 N%$ [HDW 2,8DP\!#N<.[ #N, &
- XM N%$ +A1 .Z)-P#NB3</ @[G#NH [G !@ &P
- XM +A1 "X40#NB3< <X]<#P,.YP[I .Y@ 8 <&$ 97(\ "^H*P
- XM +_[% $@ \$#MH.^P\%#L(.^P\%#NT- '9S 0X N
- XM !9/'4^/'4^/&,^879S/&,^9&%T83QC/F9I;F%L+G!A<&5R/&,^:# R+G!S
- XM/%4^+VAO;64O=3 V+V-A8G)A;"]A=G,O9&%T82]F:6YA;"YP87!E<B]H,#(N
- XM<',W %[@B0 ( +__@ $@ \%#MH/! \L(/! \NT- (DW
- XM 0X !9/'4^/'4^/&,^879S/&,^9&%T83QC/F9I;F%L+G!A<&5R
- XM/&,^:# S+G!S/%4^+VAO;64O=3 V+V-A8G)A;"]A=G,O9&%T82]F:6YA;"YP
- XM87!E<B]H,#,N<', (\V 0 ( +__\ $@ \MH/!0\'#L(/!0\'#NT-
- XM 0X !D !9/'4^/'4^/&,^879S/&,^9&%T83QC/F9I
- XM;F%L+G!A<&5R/&,^:# T+G!S/%4^+VAO;64O=3 V+V-A8G)A;"]A=G,O9&%T
- XM82]F:6YA;"YP87!E<B]H,#0N<',! +^+^@ $ +___ $@ \'#MH/!@\(
- XM#L(/!@\(#NT- &]U 0X + !9/'4^/'4^/&,^879S/&,^
- XM9&%T83QC/F9I;F%L+G!A<&5R/&,^:# U+G!S/%4^+VAO;64O=3 V+V-A8G)A
- XM;"]A=G,O9&%T82]F:6YA;"YP87!E<B]H,#4N<'-4 %[@B0!'JLL +___ $@
- XM \(#MH/!P\)#L(/!P\)#NT- &)U 0X !D !A/'4^/'4^
- XM/&,^879S/&,^9&%T83QC/F9I;F%L+G!A<&5R/&,^:&%N;FEN9RYP<SQ5/B]H
- XM;VUE+W4P-B]C86)R86PO879S+V1A=&$O9FEN86PN<&%P97(O:&%N;FEN9RYP
- XM<P$ &Z7 )!R"0 O__P 2 #PD.V@\(#PH.P@\(#PH.[0T 0X !
- XM#@ '4 %D\=3X\=3X\8SYA=G,\8SYD871A/&,^9FEN86PN<&%P97(\
- XM8SYH,3$N<',\53XO:&]M92]U,#8O8V%B<F%L+V%V<R]D871A+V9I;F%L+G!A
- XM<&5R+V@Q,2YP<U$ +Z@K )!R"0 O_^ 2 #PH.V@\)#PL.P@\)#PL.[0T
- XMN%$ !#@ ), %D\=3X\=3X\8SYA=G,\8SYD871A/&,^9FEN
- XM86PN<&%P97(\8SYH,3(N<',\53XO:&]M92]U,#8O8V%B<F%L+V%V<R]D871A
- XM+V9I;F%L+G!A<&5R+V@Q,BYP<P 7N") )!R"0 O__P 2 #PL.V@\*#PP.
- XMP@\*#PP.[0T #OL !#@ %D\=3X\=3X\8SYA=G,\8SYD
- XM871A/&,^9FEN86PN<&%P97(\8SYH,3,N<',\53XO:&]M92]U,#8O8V%B<F%L
- XM+V%V<R]D871A+V9I;F%L+G!A<&5R+V@Q,RYP<W( CS8! )!R"0 O_^ 2
- XM#PP.V@\+#PT.P@\+#PT.[0T #P0 !#@ %D\=3X\=3X\
- XM8SYA=G,\8SYD871A/&,^9FEN86PN<&%P97(\8SYH,30N<',\53XO:&]M92]U
- XM,#8O8V%B<F%L+V%V<R]D871A+V9I;F%L+G!A<&5R+V@Q-"YP<W( OXOZ )!R
- XM" O_L4 2 #PT.V@\,#NT.P@\, .[0T #P4 !#@
- XM %D\=3X\=3X\8SYA=G,\8SYD871A/&,^9FEN86PN<&%P97(\8SYH,34N<',\
- XM53XO:&]M92]U,#8O8V%B<F%L+V%V<R]D871A+V9I;F%L+G!A<&5R+V@Q-2YP
- XM<W( +A1 "X40#NB3< <X]<#PX.YP[U .\ 8 #P8 " X1#B$.
- XM% + "9 Q@ X1 YU $ /F$ !$QE9G0 )D #&
- XM#A( #G8 0#OP %4FEG:'1E P-@)D #& #A, #H
- XM @ N< )4F5F97)E;F-E5 X(D"9 Q@ X5 .%@Y]
- XM#P< F0 ,8 .%@X5#A<.CP ! #QU )D #& #A<.
- XM%@X8#I0 @ !P80 "9 Q@ X8#A<.&0Z7 , ,#8
- XM F0 ,8 .&0X8#AH.F@ $ &5R )D #& #AH.&0X;#IT
- XM!0 "9 Q@ X;#AH.' Z@ 8 0X F0 ,8
- XM .' X; .HP ' &%T \]#XT/10 V
- XM $ 0 #F9@ ! 1F9 \]#Z$ 0#
- XM% (# P4! #@ P " 0 &
- XM!0$ "$%B<W1R86-T
- XM ( YF8 0 $9F0 //@ %
- XM 00 " P,% 0 B0 , @$
- XM!@4! 0X A#96QL0F]D>0
- XM " .9F $ !&9D ( @ #S\
- XM!0, @,#!0$ 3, # (!
- XM 8% 0 \$ +0V5L;$AE861I;F=9 "0
- XM $ YF8 0 $9F0 /
- XM0 ^B $! 0 " P,% @ <@ )
- XM @$ !@4! #NT 1";V1Y
- XM . !0 ( YF8 0 $9F0 /00
- XM % 50 " P,% 0 80 .
- XM @$ !@D! .#N< =(96%D:6YG 1";V1Y !( 2
- XM $@ @ #F9@ ! 1F9
- XM ]" 4!! (# P4! H
- XM " 0 &!0$ &0 #51A8FQE1F]O=&YO=&4'
- XM @ #F9@ ! 1F9
- XM ]# 5 4# 0 (# P4! V P
- XM " 0 &"0$ !@ "E1A8FQE5&ET;&4
- XM #E0Z5&%B;&4@/&XK/CH@ 0 !
- XM .9F $ !&9D #T0 !0,4 @,#!0$
- XM &8 $@ ,! 8) 0 P,%
- XM %5&ET;&4 @
- XM #F9@ ! 1F9 " ( ]Z$ 0# (# P4!
- XM %F P " 0 &!0$ ,#!0
- XM "T-E;&Q(96%D:6YG
- XM " .9F $ !&9D #T</H0 ! $$
- XM @,#!0$ # (! 8% 0
- XM $S (0V5L;$)O9'D
- XM @ #F9@ ! 1F9 ](#Z0 5 0# 0
- XM (# P4! !F P " 0 &"0$
- XM ,#!0 "E1A8FQE5&ET;&4 #E0Z5&%B;&4@/&XK/CH@
- XM 0 ! .9F $ !&9D
- XM #TD/K ! ,4 @,#!0$ #
- XM (! 8%!0 (06)S=')A8W0
- XM , # 0 #F9@ ! 1F9
- XM ]*#Z( 00$%0 (# P4! D
- XM " 0 &!0$ "$5Q=6%T:6]N <H
- XM/&X].#XI ) 0 #F9@ ! 1F9
- XM ], 4$! (# P4" D
- XM " 0 &!0$ !$)O9'D
- XM < 0 #F9@ ! 1F9
- XM ]- 4P4$%0 (# P4! D
- XM # 0 &"0$ "%-E8W1I;VXS
- XM !!3.CQN/BX\;CXN/&XK/B @ !P !
- XM .9F $ !&9D #TX/JP ! $4 @,#
- XM!0$ "0 ,! 8) 0
- XM &2&5A9&5R $
- XM 0 #F9@ ! 1F9 ]/#[D 0$5 (#
- XM P4! "9 @ " 0 &!0$ P
- XM "$9O;W1N;W1E '
- XM $ YF8 0 $9F0 /4 % 10 "
- XM P,% 0 F0 ) P$ !@D! ,
- XM 9(96%D97( !P
- XM ! .9F $ !&9D #U$ !3!0$5
- XM @,#!0$ "0 ,! 8) 0
- XM 0# (4V5C=&EO;C( #%,Z/&X^+CQN*SX@(
- XM , # 0 #F9@ ! 1F9
- XM ]2#Z( 00$%0 (# P4! D
- XM " 0 &!0$ "$5Q=6%T:6]N <H/&X],3XI
- XM @ 0 #F9@ ! 1F9
- XM ]4#Z@ 1@0!%0 (# P4! @
- XM % 0 &!@$ #D9I9W5R92U#87!T:6]N
- XM Y&.D9I9W5R92 \-SXZ(
- XM 0 #F9@ ! 1F9 ]5 4$5 (#
- XM P4! @ " 0 &!0$
- XM "$9O;W1N;W1E # P
- XM $ YF8 0 $9F0 /5@ $%!!4 "
- XM P,% 0 ) @$ !@4!
- XM A%<75A=&EO;@ '*#QN/3$^*0
- XM $ YF8 0 $9F0 /5P^H
- XM $8$ 14 " P,% 0 (
- XM!0$ !@8! Y&:6=U<F4M0V%P=&EO;@ .1CI&:6=U
- XM<F4@/#@^.B $ YF8 0 $9
- XMF0 /60^H $8$ 14 " P,% 0 !0 (
- XM !0$ !@8! ) 0 Y&:6=U<F4M
- XM0V%P=&EO;@ .1CI&:6=U<F4@/#$^.B #
- XM P $ YF8 0 $9F0 /6@^B $$
- XM!!4 " P,% 0 ) @$
- XM!@4! R A%<75A=&EO;@ '*#QN/3(^*0
- XM ' $ YF8 0 $9F0
- XM /6P^K %,$ 14 " P,% 0 )
- XM P$ !@D! !" A396-T:6]N,0 )4SH\;BL^
- XM+B @ P , ! .9F $ !&9D
- XM #UP/H@ !! 05 @,#!0$ "0
- XM (! 8% 0 0V%P (17%U871I;VX
- XM !R@\;CTW/BD P , ! .9F
- XM $ !&9D #UT/H@ !! 05 @,#!0$
- XM"0 (! 8% 0 (
- XM17%U871I;VX !R@\;CTV/BD P ,
- XM ! .9F $ !&9D #UX/H@ !! 05
- XM @,#!0$ "0 (! 8% 0
- XM871I (17%U871I;VX !R@\;CTT/BD
- XM P , ! .9F $ !&9D #U\/
- XMH@ !! 05 @,#!0$ "0
- XM (! 8% 0 =7)E (17%U871I;VX !R@\;CTU/BD@
- XM P , ! .9F $ !&9D
- XM #V /H@ !! 05 @,#!0$ 4 "0
- XM (! 8% 0 "0$ (17%U871I;VX !R@\
- XM;CTS/BDZ $@ ( ! .9F $ !&9D
- XM #V(/H@!2! 0% @,#!0, 0 "0
- XM (! 8% 0 0 2 !
- XM"5)E9F5R96YC96X "%(Z/&XK/BX(
- XM ! .9F $ !&9D #V, !&!0$5
- XM @,#!0$ " 4! 8&
- XM 0 0@ .1FEG=7)E+4-A<'1I;VX #D8Z1FEG=7)E(#PS
- XM/CH@ !P ! .9F $ !&9D
- XM #V0 !3!0$5 @,#!0$ "0
- XM ,! 8) 0 "$5Q (4V5C=&EO;C$
- XM "5,Z/&XK/BX@( $ 0 #
- XM ! 4 ]E#Z( 0#% (" @4!
- XM D " 0 &!0$ &%T:0 (
- XMZ@ @ H/ !(#X!U P !( "$%B<W1R86-T
- XM ! $ YF8 0 $9F0
- XM /9@^B $ Q0 " P,% 0 )
- XM @$ !@4! ]-#X A!8G-T<F%C=
- XM !P ! .9F $ !&9D
- XM #V</JP!3! $5 @,#!0$ "0
- XM ,! 8) 0 (4V5C=&EO;C( #%,Z
- XM/&X^+CQN*SX@( < 0 #F9@ !
- XM 1F9 ]I#ZL 4P0$%0 (# P4! D
- XM # 0 &"0$ <H/ "%-E8W1I
- XM;VXS !!3.CQN/BX\;CXN/&XK/B @ !@
- XM ! .9F $ !&9D #VH/N0 ! %0
- XM @,#!0$ " (! 8%
- XM 0 (1F]O=&YO=&4 "$9O;W1N;W1E
- XM 0 ! .9F $ !&9D
- XM#VP/IP ! ,4 @,#!0$ $@
- XM (! 8% 0 (06)S=')A8W0
- XM 0 #F9@ ! 1F9
- XM ]N#Z@ 1@0!%0 (# P4! @
- XM % 0 &!@$ A%<0 #D9I9W5R92U#87!T:6]N !!&
- XM.D9I9W5R92 \;CTR/CH@ ! $
- XMYF8 0 $9F0 /< _! $ Q0 " P,% 0
- XM 2 P$ !@D! *#P
- XM 54:71L90 <F$ $@ ( !
- XM .9F $ !&9D #W, !2!00% @,#!0,
- XM , "0 (! 8% 0
- XM 0 2 ! #0^ "5)E9F5R96YC970 "%(Z/&XK/BX(
- XM ! .9F $ !&9D
- XM #W0/J !&! $5 @,#!0$ "
- XM 4! 8& 0 "%-E .1FEG=7)E+4-A<'1I;VX
- XM$$8Z1FEG=7)E(#QN/3,^.B 0
- XM #F9@ ! 1F9 ]U#Z@ 1@0!%0 (# P4!
- XM @ % 0 &!@$
- XM #D9I9W5R92U#87!T:6]N !!&.D9I9W5R92 \;CTT/CH@ #F
- XM9@ $ YF8 0 $9F0
- XM /=@^H $8$ 14 " P,% 0 (
- XM !0$ !@8! Y&:6=U<F4M0V%P=&EO;@
- XM 01CI&:6=U<F4@/&X]-3XZ(
- XM ! .9F $ !&9D #W</J !&! $5
- XM @,#!0$ " 4! 8& 0
- XM .1FEG=7)E+4-A<'1I;VX $$8Z1FEG=7)E(#QN/38^
- XM.B ,% 0 #F9@ ! 1F9
- XM ]X#Z@ 1@0!%0 (# P4! 0 @
- XM % 0 &!@$ 0 #D9I9W5R92U#87!T
- XM:6]N !!&.D9I9W5R92 \;CTY/CH@ #!0
- XM $ YF8 0 $9F0 />0^H $8$
- XM 14 " P,% 0 ( !0$
- XM!@8! Y&:6=U<F4M0V%P=&EO;@ 11CI&:6=U<F4@
- XM/&X],3$^.B ! .9F $ !
- XM&9D #WH/J !&! $5 @,#!0$ "
- XM 4! 8& 0 .1FEG=7)E
- XM+4-A<'1I;VX $48Z1FEG=7)E(#QN/3$P/CH@
- XM 0 #F9@ ! 1F9 ][
- XM#Z@ 1@0!%0 (# P4! @
- XM % 0 &!@$ #D9I9W5R92U#87!T:6]N !%&.D9I
- XM9W5R92 \;CTQ,CXZ( $ YF8
- XM 0 $9F0 /? ^H $8$ 14 " P,% 0 (
- XM !0$ !@8! Y&
- XM:6=U<F4M0V%P=&EO;@ 11CI&:6=U<F4@/&X],30^.B
- XM ! .9F $ !&9D
- XM #WT/J !&! $5 @,#!0$ "
- XM 4! 8& 0 .1FEG=7)E+4-A<'1I;VX
- XM$48Z1FEG=7)E(#QN/3$S/CH@ #Z$/T0^R !P #
- XM 'K95M,/H0 (! 8% 0 $.D9I !R90 )
- XM >ME6TP^B @$ !@4! 0 YF8 D /_,
- XMX #Z, " 0 &!0$ !0 $ (16UP:&%S:7, ,
- XM %>[C^ ^D @$ !@D! 1U<F4 &%P D
- XM /_,X #Z4 " 0 &!0$ !0 )4W5B<V-R:7!T )
- XM #_S. ^F @$ !@4! 5&! $ "U-U<&5R<V-R
- XM:7!T" !( !ZV5;3#Z< " 0 &!0$ !
- XM 1FD " 'NM/HH/J 4! 8& 0 $
- XM ) %>[C^ ^I @$ !@D! 0
- XM @ $K;.B#ZH % 0 &!@0 !
- XM "0 >I%:T/JP ,! 8) 0 $:6]N
- XM , :+"$L@^L @$ !@4% 0
- XM @ ![K3Z*#ZT % 0@&!@$ !$8$ 0
- XM" /(3>3P/K@ 4! 8(! $!0$ ! )
- XM :+"$L@^O @$ !@4% 1U<F4 !DET86QI
- XM8P ) %>[C^ ^P @$ !@D! 0!&9D !$)O
- XM;&0 ) %>[C^ ^Q @$(!@D! 0
- XM!$)O;&0 ) 6@1L60^X @$ !@D% 1I
- XM;VX @ !ZV5;3#[D " 0 &!0$ !
- XM "0 &BPA+(/N@ (! 8%!0 $1@0!
- XM ) !$8I>P^[ ! $ !@4! 0% 0
- XM $ D !HL(2R#[T " 1 &!04 !'5R90 &
- XM271A;&EC D $1BE[#[\ $ 0 &!0$ !*$
- XM &271A;&EC @ !HL(2R#\ " 0 &!04
- XM! (! &271A;&EC !( 'J16M#\$ # 0 &
- XM"0$ ! 4! ! "0 &BPA+(/QP (!$ 8%
- XM!0 $I ! ) >ME6TP_( @$ !@4!
- XM 2E !DET86QI8P ) >ME6TP_) @$(
- XM!@4! 0 !DET86QI8P[9#OD.X + $ [9 #P
- XM 0 #MH #P / @ .VP / <, $ @( $%H'___8.P[<
- XM #P 0 #MT / (" @ .W@ \
- XM @( $ [? \ !PP 0" @ 06@< 0 #N$ #P ' ("
- XM .X@ $ [C \ #P " @
- XM !F9#N< #@ '# ! (" !!:!P!E '4 :@ % " 90 ! $
- XM5&AI;@ ( 9@ ! &365D:75M " " 9P "
- XM &1&]U8FQE , : ! %5&AI8VL ! :0
- XM ! )5F5R>2!4:&EN ,D V0#) ( # P
- XM 8 & !@ 8 $ % ,H @ / \ #P!E &4 90!E
- XM &4 90!E &4 90!G#T@% ! @($ 0@ $!!0
- XM !( /1@]'#T8 $ !( /1@]'#T8 ;P (
- XM !( /1@]'#T8 , !( /1@]'#T8 0
- XM !( /1@]'#T8 TP (1F]R;6%T($$! , #
- XM !@ 8 & !@ 0 4 RP " \ #P / 90 &8
- XM90!E &4 90!E &8/2 4 0$ " @0 !" 0$%
- XM $@ ]T</1@ 0 $@ ]T</1@!T @
- XM $@ ]T</1@ P $@ ]T</1@!T !
- XM $@ ]T</1@ A&;W)M870@0@ !
- XM+0$] 2T 0 0$N $" 0 =#;VUM96YT P !$ ! "
- XM 54:6UE<P P )2&5L=F5T:6-AL $ 93>6UB;VP !0 *079A;G1'87)D
- XM90 ) $ !@ '4F5G=6QA<@ # $ 4 !U)E9W5L87(% 8 !$)O;VL " (
- XM1&5M:4)O;&0 "0 $0F]L9 % , 0 '4F5G=6QA<@( ! '3V)L:7%U908
- XM!0 &271A;&EC
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM
- XM ! @,$
- XMM5%@52EG987Y'1P$1Y_3-=H)S0OA6I*(&46.IKGCJ/"[7]7BT-P9%V_=M%P<
- XMV+F[")JOI/F?(<'IC$1ZL*0K7J).L>L%#K6<#.-GMBY@L-PL/C#A]W@P_<&_
- XM9$^9;M967O-,+M3",!7+D)5P>%6?'(4DVZG175>EK,ZRW O_KHTQ\#PUF!BP
- XM6?!@7K$:8^+I'UGDT01[H2:Z%#<E+5TG.X:5R,&-*7C63A_AM;+D#=VA DJ)
- XMD]:[-J8D:#!<L*[V:OP?)D;0Z__TBI2YJQ&M7HM$.NX#D8%/"5X+K?Q0CFD8
- XM/X=RO2"^IM&&1]/F);6]9$(1\,U<4HJE*R=]7(S*13GWT2YC;6RN9ZU"K*9J
- XMG4:N[T+G\Q'8-C*JKIB0S?S TMAR^Y7]"C#GM5LN]J%B9"EP?[2R(#OVK3W_
- XM=0+5$T:[MW4[8%^% 1(2[*>L#Z&B.K^4#"#Q8=Q*#D170MC6ZDB7>UWVLF8
- XMLF0SA(^P **1GN)D1_D>N3FQ^/I4E"2\=2?:7XO'#/E%LU_ON*&>$CI_-N<
- X#
- X
- Xend
- END_OF_FILE
- if test 32376 -ne `wc -c <'lic.1.2/doc/siggraph93/p.frame.UU.C'`; then
- echo shar: \"'lic.1.2/doc/siggraph93/p.frame.UU.C'\" unpacked with wrong size!
- elif test -f 'lic.1.2/doc/siggraph93/p.frame.UU.A' && test -f 'lic.1.2/doc/siggraph93/p.frame.UU.B' ; then
- echo shar: Combining \"'paper.frame.UU'\" \(143959 characters\)
- cat 'lic.1.2/doc/siggraph93/p.frame.UU.A' 'lic.1.2/doc/siggraph93/p.frame.UU.B' 'lic.1.2/doc/siggraph93/p.frame.UU.C' > 'paper.frame.UU'
- if test 143959 -ne `wc -c <'paper.frame.UU'`; then
- echo shar: \"'paper.frame.UU'\" combined with wrong size!
- else
- rm lic.1.2/doc/siggraph93/p.frame.UU.A lic.1.2/doc/siggraph93/p.frame.UU.B lic.1.2/doc/siggraph93/p.frame.UU.C
- echo shar: Uudecoding \"'lic.1.2/doc/siggraph93/paper.frame'\" \(104448 characters\)
- cat paper.frame.UU | uudecode
- if test 104448 -ne `wc -c <'lic.1.2/doc/siggraph93/paper.frame'`; then
- echo shar: \"'lic.1.2/doc/siggraph93/paper.frame'\" uudecoded with wrong size!
- else
- rm paper.frame.UU
- fi
- # end of 'paper.frame.UU'
- fi
- fi
- # end of 'lic.1.2/doc/siggraph93/p.frame.UU.B'
- fi
- if test -f 'lic.1.2/liblic/Filters.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lic.1.2/liblic/Filters.c'\"
- else
- echo shar: Extracting \"'lic.1.2/liblic/Filters.c'\" \(6103 characters\)
- sed "s/^X//" >'lic.1.2/liblic/Filters.c' <<'END_OF_FILE'
- X/*
- X * $Header: /d/sisal/a/casey/tmp/lic/liblic/RCS/Filters.c,v 1.12 1993/08/10 23:35:32 casey Exp $
- X */
- X
- X/*
- X * Copyright (c) 1993 The Regents of the University of California.
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by the University of
- X * California, Lawrence Livermore National Laboratory and its
- X * contributors.
- X * 4. Neither the name of the University nor the names of its contributors
- X * may be used to endorse or promote products derived from this software
- X * without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- X * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- X * SUCH DAMAGE.
- X */
- X
- X#ifndef lint
- X static char rcsid[] = "$Header: /d/sisal/a/casey/tmp/lic/liblic/RCS/Filters.c,v 1.12 1993/08/10 23:35:32 casey Exp $";
- X static char copyright[] =
- X "Copyright (c) 1993 The Regents of the University of California.\n"
- X "All rights reserved.\n";
- X#endif
- X
- X
- X#include "liblic.h"
- X
- X
- X/*
- X * Build integral tables from filter integrator.
- X * =============================================
- X */
- X
- Xvoid
- XLIC_BuildIntegralTables(LIC *This)
- X /*
- X * Build integral tables for LIC instance if needed.
- X */
- X{
- X int speed, length;
- X
- X if (!This->NeedIntegration)
- X return;
- X This->NeedIntegration = FALSE;
- X
- X /*
- X * Build the convolution integral tables. Build LIC_INTEGRAL_SPEEDS
- X * different versions of them with speed varying between 0 and
- X * LIC_INTEGRAL_SPEEDS.
- X */
- X for (speed = 0; speed < LIC_INTEGRAL_SPEEDS; speed++)
- X {
- X double s;
- X
- X for (length = 0; length < LIC_INTEGRAL_LEN; length++)
- X {
- X s = LIC_Length(This) * length / (double)LIC_INTEGRAL_LEN;
- X This->NegIntegralTable[speed][length] = This->Filter(This, -s, 0.0, speed);
- X This->PosIntegralTable[speed][length] = This->Filter(This, 0.0, s, speed);
- X }
- X }
- X}
- X
- X
- Xdouble
- XLIC_Box(LIC *This, double a, double b, int speed)
- X /*
- X * Compute the integral bewteen points a and b, a <= b, of a box
- X * filter:
- X *
- X * k(s) = 1
- X */
- X{
- X return(b - a);
- X}
- X
- X
- Xdouble
- XLIC_Ripple(LIC *This, double a, double b, int speed)
- X /*
- X * Compute the integral bewteen points a and b, a <= b, of a phase shifted
- X * Hanning low pass filter multiplied by a Hanning window function:
- X *
- X * k(s) = (cos(d*s + phase) + 1)/2 * (cos(c*s) + 1)/2
- X *
- X * We need to scale the filter to the length of the filter support. This
- X * requires scaling each occurance of s by Pi/L. Things fall out in the
- X * integral which allow us to slip the scaling factors into c and d.
- X */
- X{
- X REGISTER double m; /* speed multiple */
- X REGISTER double p; /* phase of the Hanning ripple function */
- X REGISTER double f; /* frequency of the Hanning ripple function */
- X REGISTER double c; /* Hanning window function dilation constant */
- X REGISTER double d; /* Hanning ripple filter dilation constant */
- X REGISTER double w; /* integral value */
- X
- X if (LIC_Length(This) == 0 || a == b)
- X return(0.0);
- X
- X /*
- X * Implement ``speed'' variations by scaling the frequency inversely
- X * to speed. This causes low magnitude vectors to be convolved using
- X * a higher frequency filter which will yield less distinct output
- X * features. As the frequency increases the filter begins to approximate
- X * the Hanning window filter.
- X */
- X
- X p = LIC_Phase(This);
- X f = LIC_Frequency(This) * (6.0 - 5.0*(double)speed/(LIC_INTEGRAL_SPEEDS - 1));
- X c = 1.0/LIC_Length(This) * M_PI;
- X d = 1.0/LIC_Length(This) * M_PI * f;
- X
- X w = b - a
- X + sin(b*c)/c - sin(a*c)/c
- X + sin(b*d + p)/d - sin(a*d + p)/d
- X + sin(b*(c+d) + p)/(2*(c+d)) - sin(a*(c+d) + p)/(2*(c+d));
- X if (c != d)
- X w += sin(b*(c-d) - p)/(2*(c-d))
- X - sin(a*(c-d) - p)/(2*(c-d));
- X w /= 4;
- X return(w);
- X}
- X
- X
- Xdouble
- XLIC_Ramp(LIC *This, double a, double b, int speed)
- X /*
- X * Compute the integral bewteen points a and b, a <= b, of a biased
- X * triangle filter:
- X *
- X * k(s) = (s + L) / (2 * L)
- X */
- X{
- X if (LIC_Length(This) == 0)
- X return(0.0);
- X else
- X return((a*a - b*b)/(4*LIC_Length(This)) + (a - b)/2);
- X}
- X
- X
- Xdouble
- XLIC_Select(LIC *This, double a, double b, int speed)
- X /*
- X * Compute the integral bewteen points a and b, a <= b, of a
- X * narrow Gaussian filter which sits at L-2 along the local
- X * streamline. This filter's delta function like shape and
- X * it's location near the end of the local streamline means that
- X * the filter acts as a pixel selection filter. Hence it's name.
- X *
- X * k(s) = 1/2*pi * e^(x - L + 2)^2
- X */
- X{
- X if (LIC_Length(This) == 0)
- X return(0.0);
- X else
- X return( erf((b - LIC_Length(This) + 2) / sqrt(2.0))
- X - erf((a - LIC_Length(This) + 2) / sqrt(2.0)));
- X}
- END_OF_FILE
- if test 6103 -ne `wc -c <'lic.1.2/liblic/Filters.c'`; then
- echo shar: \"'lic.1.2/liblic/Filters.c'\" unpacked with wrong size!
- fi
- # end of 'lic.1.2/liblic/Filters.c'
- fi
- if test -f 'lic.1.2/lic/lic.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lic.1.2/lic/lic.c'\"
- else
- echo shar: Extracting \"'lic.1.2/lic/lic.c'\" \(22645 characters\)
- sed "s/^X//" >'lic.1.2/lic/lic.c' <<'END_OF_FILE'
- X/*
- X * $Header: /d/sisal/a/casey/tmp/lic/lic/RCS/lic.c,v 1.24 1993/08/11 17:25:35 casey Exp $
- X */
- X
- X/*
- X * Copyright (c) 1993 The Regents of the University of California.
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by the University of
- X * California, Lawrence Livermore National Laboratory and its
- X * contributors.
- X * 4. Neither the name of the University nor the names of its contributors
- X * may be used to endorse or promote products derived from this software
- X * without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- X * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- X * SUCH DAMAGE.
- X */
- X
- X#ifndef lint
- X static char rcsid[] = "$Header: /d/sisal/a/casey/tmp/lic/lic/RCS/lic.c,v 1.24 1993/08/11 17:25:35 casey Exp $";
- X static char copyright[] =
- X "Copyright (c) 1993 The Regents of the University of California.\n"
- X "All rights reserved.\n";
- X#endif
- X
- X
- X/*
- X * UNIX command line interface to the Line Integral Convolution library.
- X */
- X
- X
- X#include <stdlib.h>
- X#include <unistd.h>
- X#include <errno.h>
- X#include <string.h>
- X#include <stdio.h>
- X#include <time.h>
- X#include <sys/times.h>
- X#include <sys/types.h>
- X
- X#include <fcntl.h>
- X#include <math.h>
- X#include <sys/stat.h>
- X
- X#if defined(HAS_MMAP)
- X# include <sys/mman.h>
- X#endif
- X
- X#include <lic.h>
- X
- X
- X#ifdef NEED_EXIT_CODES
- X /*
- X * EXIT_SUCCESS and EXIT_FAILURE are supposed to be defined in <stdlib.h>
- X * according to the ANSI C X3.159-1989 specification, but Sun OS 4.1.1
- X * fails to define them ...
- X */
- X# define EXIT_SUCCESS 0
- X# define EXIT_FAILURE 1
- X#endif
- X
- X
- X#ifdef NEED_STRERROR
- X /*
- X * strerror is supposed to be defined in <string.h> and supplied in the
- X * standard C library according to the ANSI C X3.159-1989 specification,
- X * but Sun OS 4.1.1 fails to define or supply it ... Unfortunately the
- X * only way we can control this is with an externally supplied define.
- X */
- X extern int errno; /* system error number */
- X extern char *sys_errlist[]; /* system error messages */
- X extern int sys_nerr; /* number of entries in sys_errlist */
- X
- X static char *
- X strerror(int err)
- X {
- X if (err < 0 || err >= sys_nerr) {
- X static char msg[100];
- X
- X sprintf(msg, "system error number %d", err);
- X return(msg);
- X }
- X return(sys_errlist[err]);
- X }
- X#endif
- X
- X
- X/*
- X * Arguments
- X * =========
- X */
- Xstatic char *usage =
- X"usage: %s options in-image in-vector-field out-image\n"
- X" -x x-extent - *required* (no default)\n"
- X" -y y-extent - *required* (no default)\n"
- X" -z z-extent - (default 1)\n"
- X" -i i-extent - in-image X extent (default x-extent)\n"
- X" -j j-extent - in-image Y extent (default y-extent)\n"
- X" -k k-extent - in-image Z extent (default z-extent)\n"
- X" -f filter - 'box', 'ripple', 'ramp' or (default 'box')\n"
- X" 'select'\n"
- X" -n normalization - 'fixed' or 'variable' (default 'variable')\n"
- X" -N - input vector field already normalized\n"
- X" -l filter-length - (default 10.0)\n"
- X" -d filter-frequency - (default 3.0)\n"
- X" -p filter-phase - (default 0.0)\n"
- X" -L - vary filter-length based on vector magnitude\n"
- X" -S - vary filter-phase based on vector magnitude\n"
- X" -r default-red - for zero vectors (default -1)\n"
- X" -g default-green - for zero vectors (default -1)\n"
- X" -b default-blue - for zero vectors (default -1)\n"
- X" -a default-alpha - for zero vectors (default -1)\n"
- X" -v - verbose progress and timing information\n"
- X" -V - version information\n"
- X ;
- X
- Xstatic char *myname; /* argv[0]: name we were invoked by */
- Xstatic int size_x = -1; /* -x: X extent */
- Xstatic int size_y = -1; /* -y: Y extent */
- Xstatic int size_z = 1; /* -z: Z extent (default 1) */
- Xstatic int size_i = -1; /* -i: input image X extent */
- Xstatic int size_j = -1; /* -j: input image Y extent */
- Xstatic int size_k = -1; /* -k: input image Z extent */
- Xstatic LIC_Filter
- X filter = LIC_Box; /* -f: filter */
- Xstatic int normalization = LIC_VARIABLE;
- X /* -n: normalization */
- Xstatic int normalized = FALSE; /* -N: input vectors prenormalized */
- Xstatic double filter_length = 10.0; /* -l: filter length */
- Xstatic double filter_frequency = 3.0; /* -d: filter frequency */
- Xstatic double filter_phase = 0.0; /* -p: filter phase */
- Xstatic int vary_length = FALSE; /* -L: vary length by vector mag. */
- Xstatic int vary_speed = FALSE; /* -S: vary phase by vector mag. */
- Xstatic int default_red = -1; /* -r: default red ... */
- Xstatic int default_green = -1; /* -g: default green ... */
- Xstatic int default_blue = -1; /* -b: default blue ... */
- Xstatic int default_alpha = -1; /* -a: default alpha for zero vector */
- Xstatic int verbose = FALSE; /* -v: display progress information */
- Xstatic int version = FALSE; /* -V: display version information */
- X
- Xstatic char *in_img; /* input image filename */
- Xstatic char *in_vec; /* input vector field filename */
- Xstatic char *out_img; /* output image filename */
- X
- X
- X/*
- X * Local variables
- X * ===============
- X */
- Xstatic time_t t0; /* time we started/ended the LIC */
- Xstatic clock_t t0_clk, tN_clk; /* calculation */
- Xstatic struct tms t0_tms, tN_tms;
- X
- Xstatic void *in_img_addr, /* virtual addresses of memory */
- X *in_vec_addr, /* mapped input image, input */
- X *out_img_addr; /* vector field and output image */
- Xstatic off_t in_img_size, /* sizes of image and vector files */
- X in_vec_size,
- X out_img_size;
- X#if !defined(HAS_MMAP)
- X static int out_img_fd; /* output image file descriptor */
- X#endif
- X
- X
- X/*
- X * Local routines
- X * ==============
- X */
- Xint main(int argc, char *argv[]);
- Xstatic void ParseArguments(int argc, char *argv[]);
- Xstatic void LoadFiles(void);
- Xstatic void UnloadFiles(void);
- Xstatic void LicFiles(void);
- Xstatic void PrintLicStatus(double PercentDone);
- Xstatic void PrintLicError(const char *message);
- X
- X
- Xint
- Xmain(int argc, char *argv[])
- X{
- X ParseArguments(argc, argv);
- X LoadFiles();
- X LicFiles();
- X UnloadFiles();
- X exit(EXIT_SUCCESS);
- X /*NOTREACHED*/
- X}
- X
- X
- Xstatic void
- XParseArguments(int argc, char *argv[])
- X{
- X int ch;
- X#if defined(HAS_HP_GETOPT)
- X extern int getopt(int, char * const [], const char *);
- X#else
- X extern int getopt(int, char **, char *);
- X#endif
- X extern char *optarg;
- X extern int optind;
- X
- X myname = strrchr(argv[0], '/');
- X if (myname != NULL)
- X myname++;
- X else
- X myname = argv[0];
- X while ((ch = getopt(argc, argv, "x:y:z:i:j:k:f:n:Nl:d:p:LSr:g:b:a:vV")) != EOF)
- X switch ((char)ch)
- X {
- X default:
- X case '?':
- X (void)fprintf(stderr, "%s: unknown option -%c\n",
- X myname, ch);
- X (void)fprintf(stderr, usage, myname);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X case 'x':
- X size_x = atoi(optarg);
- X break;
- X case 'y':
- X size_y = atoi(optarg);
- X break;
- X case 'z':
- X size_z = atoi(optarg);
- X break;
- X case 'i':
- X size_i = atoi(optarg);
- X break;
- X case 'j':
- X size_j = atoi(optarg);
- X break;
- X case 'k':
- X size_k = atoi(optarg);
- X break;
- X case 'f':
- X if (strcasecmp(optarg, "box") == 0)
- X filter = LIC_Box;
- X else if (strcasecmp(optarg, "ripple") == 0)
- X filter = LIC_Ripple;
- X else if (strcasecmp(optarg, "ramp") == 0)
- X filter = LIC_Ramp;
- X else if (strcasecmp(optarg, "select") == 0)
- X filter = LIC_Select;
- X else
- X {
- X (void)fprintf(stderr, "%: invalid filter type %s:"
- X " use 'box', 'ripple' or 'ramp'\n",
- X myname, optarg);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X break;
- X case 'n':
- X if (strcasecmp(optarg, "fixed") == 0)
- X normalization = LIC_FIXED;
- X else if (strcasecmp(optarg, "variable") == 0)
- X normalization = LIC_VARIABLE;
- X else
- X {
- X (void)fprintf(stderr, "%: invalid normalization type %s:"
- X " use 'fixed' or 'variable'\n",
- X myname, optarg);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X break;
- X case 'N':
- X normalized = TRUE;
- X break;
- X case 'l':
- X filter_length = atof(optarg);
- X break;
- X case 'd':
- X filter_frequency = atof(optarg);
- X break;
- X case 'p':
- X filter_phase = atof(optarg);
- X break;
- X case 'L':
- X vary_length = TRUE;
- X break;
- X case 'S':
- X vary_speed = TRUE;
- X break;
- X case 'r':
- X default_red = (*optarg == '-')
- X ? -atoi(optarg+1)
- X : atoi(optarg);
- X break;
- X case 'g':
- X default_green = (*optarg == '-')
- X ? -atoi(optarg+1)
- X : atoi(optarg);
- X break;
- X case 'b':
- X default_blue = (*optarg == '-')
- X ? -atoi(optarg+1)
- X : atoi(optarg);
- X break;
- X case 'a':
- X default_alpha = (*optarg == '-')
- X ? -atoi(optarg+1)
- X : atoi(optarg);
- X break;
- X case 'v':
- X verbose = TRUE;
- X break;
- X case 'V':
- X version = TRUE;
- X break;
- X }
- X
- X if (version)
- X (void)printf("%s: compiled with LIC library using %d byte %s pixels\n",
- X myname, LIC_ConfiguredPixelSize(),
- X LIC_ConfiguredPixelType());
- X
- X if (argc != optind + 3)
- X {
- X (void)fprintf(stderr, "%s: need three file options\n", myname);
- X (void)fprintf(stderr, usage, myname);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_img = argv[optind + 0];
- X in_vec = argv[optind + 1];
- X out_img = argv[optind + 2];
- X if (size_x == -1 || size_y == -1)
- X {
- X (void)fprintf(stderr, "%s: must specify both -x and -y options ...\n",
- X myname);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (size_i == -1)
- X size_i = size_x;
- X if (size_j == -1)
- X size_j = size_y;
- X if (size_k == -1)
- X size_k = size_z;
- X}
- X
- X
- X#if defined(HAS_MMAP)
- X
- X/*
- X * Versions of LoadFiles and UnloadFiles for systems that support mmap(2).
- X */
- X
- Xstatic void
- XLoadFiles(void)
- X /*
- X * Map input and output files into virtual memory. Make sure that the
- X * input files match the user specified sizes and pre-extend the
- X * output file to its final length.
- X */
- X{
- X char c;
- X int fd;
- X struct stat stbuf;
- X
- X /*
- X * Map input vector field into virtual memory. (We always map the
- X * input vector field first because it will always be larger than
- X * either of the other two files. This should, hopefully, give the
- X * operating system the best possible chance to find virtual address
- X * space for the three files.)
- X */
- X fd = open(in_vec, O_RDONLY);
- X if (fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, in_vec, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (fstat(fd, &stbuf) < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to stat %s: %s\n",
- X myname, in_vec, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_vec_size = stbuf.st_size;
- X if (size_x * size_y * size_z * sizeof(float) * (size_z == 1 ? 2 : 3)
- X != in_vec_size)
- X {
- X (void)fprintf(stderr, "%s: input vector field size doesn't"
- X " match %d * x=%d * y=%d * z=%d\n",
- X myname, sizeof(float) * (size_z == 1 ? 2 : 3),
- X size_x, size_y, size_z);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_vec_addr = mmap((void *)0, (int)in_vec_size, PROT_READ,
- X MAP_SHARED, fd, (off_t)0);
- X if ((int)in_vec_addr == -1)
- X {
- X (void)fprintf(stderr, "%s: unable to map %s: %s\n",
- X myname, in_vec, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)close(fd);
- X
- X /*
- X * Map input image into virtual memory.
- X */
- X fd = open(in_img, O_RDONLY);
- X if (fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, in_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (fstat(fd, &stbuf) < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to stat %s: %s\n",
- X myname, in_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_img_size = stbuf.st_size;
- X if (size_i * size_j * size_k * LIC_ConfiguredPixelSize() != in_img_size)
- X {
- X (void)fprintf(stderr, "%s: input image size doesn't"
- X " match %d * x=%d * y=%d * z=%d\n",
- X myname, LIC_ConfiguredPixelSize(),
- X size_i, size_j, size_k);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_img_addr = mmap((void *)0, (int)in_img_size, PROT_READ,
- X MAP_SHARED, fd, (off_t)0);
- X if ((int)in_img_addr == -1)
- X {
- X (void)fprintf(stderr, "%s: unable to map %s: %s\n",
- X myname, in_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)close(fd);
- X
- X /*
- X * Map output image into virtual memory.
- X */
- X fd = open(out_img, O_CREAT|O_RDWR|O_EXCL, 0666);
- X if (fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, out_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X out_img_size = size_x * size_y * size_z * LIC_ConfiguredPixelSize();
- X (void)lseek(fd, out_img_size - 1, SEEK_SET);
- X c = '\0';
- X if (write(fd, &c, 1) != 1)
- X {
- X (void)fprintf(stderr, "%s: unable to preextend %s to %ld bytes: %s\n",
- X myname, out_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X out_img_addr = mmap((void *)0, (int)out_img_size, PROT_WRITE,
- X MAP_SHARED, fd, (off_t)0);
- X if ((int)out_img_addr == -1)
- X {
- X (void)fprintf(stderr, "%s: unable to map %s: %s\n",
- X myname, out_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)close(fd);
- X}
- X
- X
- Xstatic void
- XUnloadFiles(void)
- X /*
- X * Unmap input and output files from virtual memory.
- X */
- X{
- X (void)munmap(in_img_addr, (int)in_img_size);
- X (void)munmap(in_vec_addr, (int)in_vec_size);
- X (void)munmap(out_img_addr, (int)out_img_size);
- X}
- X
- X#else /* HAS_MMAP */
- X
- X/*
- X * Versions of LoadFiles and UnloadFiles for systems that *don't* support
- X * mmap(2).
- X */
- X
- Xstatic void
- XLoadFiles(void)
- X /*
- X * Load input files into malloc'ed memory and malloc memory for
- X * output image. Make sure that the input files match the user
- X * specified sizes. Preallocate output image on disk in order to
- X * make sure we have the space to output the image later in
- X * UnloadFiles.
- X */
- X{
- X int fd;
- X struct stat stbuf;
- X
- X /*
- X * Load input image into malloc'ed memory.
- X */
- X fd = open(in_img, O_RDONLY);
- X if (fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, in_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (fstat(fd, &stbuf) < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to stat %s: %s\n",
- X myname, in_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_img_size = stbuf.st_size;
- X if (size_i * size_j * size_k * LIC_ConfiguredPixelSize()
- X != in_img_size)
- X {
- X (void)fprintf(stderr, "%s: input image size doesn't"
- X " match %d * x=%d * y=%d * z=%d\n",
- X myname, LIC_ConfiguredPixelSize(),
- X size_i, size_j, size_k);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_img_addr = malloc(in_img_size);
- X if (in_img_addr == NULL)
- X {
- X (void)fprintf(stderr, "%s: unable to allocate %u bytes for"
- X " input image\n", myname, in_img_size);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (read(fd, in_img_addr, in_img_size) != in_img_size)
- X {
- X (void)fprintf(stderr, "%s: unable to read %u bytes from %s\n",
- X myname, in_img_size, in_img);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)close(fd);
- X
- X /*
- X * Load input vector field into malloc'ed memory.
- X */
- X fd = open(in_vec, O_RDONLY);
- X if (fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, in_vec, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (fstat(fd, &stbuf) < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to stat %s: %s\n",
- X myname, in_vec, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_vec_size = stbuf.st_size;
- X if (size_x * size_y * size_z * sizeof(float) * (size_z == 1 ? 2 : 3)
- X != in_vec_size)
- X {
- X (void)fprintf(stderr, "%s: input vector field size doesn't"
- X " match %d * x=%d * y=%d * z=%d\n",
- X myname, (size_z == 1 ? 2 : 3),
- X size_x, size_y, size_z);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X in_vec_addr = malloc(in_vec_size);
- X if (in_vec_addr == NULL)
- X {
- X (void)fprintf(stderr, "%s: unable to allocate %u bytes for"
- X " input vector field\n", myname, in_vec_size);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (read(fd, in_vec_addr, in_vec_size) != in_vec_size)
- X {
- X (void)fprintf(stderr, "%s: unable to read %u bytes from %s\n",
- X myname, in_vec_size, in_vec);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)close(fd);
- X
- X /*
- X * Open output file and allocate space for output image (both in
- X * memory and on disk).
- X */
- X out_img_fd = open(out_img, O_CREAT|O_WRONLY|O_EXCL, 0666);
- X if (out_img_fd < 0)
- X {
- X (void)fprintf(stderr, "%s: unable to open %s: %s\n",
- X myname, out_img, strerror(errno));
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X out_img_size = size_x * size_y * size_z * LIC_ConfiguredPixelSize();
- X out_img_addr = malloc(out_img_size);
- X if (out_img_addr == NULL)
- X {
- X (void)fprintf(stderr, "%s: unable to allocate %u bytes for"
- X " output image\n", myname, out_img_size);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X if (write(out_img_fd, out_img_addr, out_img_size) != out_img_size)
- X {
- X (void)fprintf(stderr, "%s: unable to extend %s to %u bytes\n",
- X myname, out_img, out_img_size);
- X exit(EXIT_FAILURE);
- X /*NOTREACHED*/
- X }
- X (void)lseek(out_img_fd, (off_t)0, SEEK_SET);
- X}
- X
- X
- Xstatic void
- XUnloadFiles(void)
- X /*
- X * Free malloc'ed space used by input files, write output image and
- X * free up it's malloc'ed memory.
- X */
- X{
- X if (write(out_img_fd, out_img_addr, out_img_size) != out_img_size)
- X (void)fprintf(stderr, "%s: unable to write %u bytes to %s!\n",
- X myname, out_img_size, out_img);
- X close(out_img_fd);
- X free(in_img_addr);
- X free(in_vec_addr);
- X free(out_img_addr);
- X}
- X
- X#endif /* HAS_MMAP */
- X
- X
- Xstatic void
- XLicFiles()
- X /*
- X * Execute LIC algorithm on arguments.
- X */
- X{
- X LIC *lic;
- X
- X lic = LIC_Create((unsigned char *)in_img_addr, size_i, size_j, size_k,
- X (float *) in_vec_addr, size_x, size_y, size_z,
- X (unsigned char *)out_img_addr,
- X filter, normalization, normalized,
- X filter_length,
- X filter_frequency,
- X vary_length,
- X vary_speed && (filter == LIC_Ripple),
- X default_red, default_green, default_blue, default_alpha,
- X verbose ? PrintLicStatus : (void (*)(double))NULL,
- X PrintLicError);
- X if (lic == (LIC *)NULL)
- X {
- X (void)fprintf(stderr, "%s: LIC_Create returned NULL!\n", myname);
- X return;
- X }
- X LIC_ChangePhase(lic, filter_phase);
- X
- X /*
- X * Build integral tables here so the build isn't computed as part of
- X * time to compute the image.
- X */
- X LIC_BuildIntegralTables(lic);
- X
- X t0 = time(NULL);
- X t0_clk = times(&t0_tms);
- X LIC_ComputeImage(lic);
- X tN_clk = times(&tN_tms);
- X
- X LIC_Destroy(lic);
- X
- X if (verbose)
- X {
- X long clk_tck = sysconf(_SC_CLK_TCK);
- X#if defined(HAS_OLD_TIMES)
- X double wall = (double)(time(NULL) - t0);
- X#else
- X double wall = (double)(tN_clk - t0_clk )/clk_tck;
- X#endif
- X double cpu = (double)(tN_tms.tms_utime - t0_tms.tms_utime)/clk_tck;
- X double ncells = (double)(size_x * size_y * size_z);
- X
- X if (wall == 0.0)
- X wall = 1.0e-6;
- X if (cpu == 0.0)
- X cpu = 1.0e-6;
- X (void)printf("\n"
- X "Performance statistics\n"
- X "--------------------------------\n"
- X "CPU utilization = %d%%\n"
- X "CPU time (seconds) = %.2f\n"
- X "Cells processed per second = %.2f\n"
- X "Ave loop count = %.2f\n"
- X "Ave length = %.2f\n",
- X (int)(cpu/wall*100),
- X cpu,
- X ncells/cpu,
- X lic->TotalLoopCount/ncells/2,
- X lic->TotalLength/ncells/2);
- X }
- X}
- X
- X
- Xstatic void
- XPrintLicStatus(double PercentDone)
- X /*
- X * Output the current LIC progress statistics. (Only called if verbose
- X * is TRUE.)
- X */
- X{
- X if (PercentDone == 0.0)
- X (void)printf("%s: %6.2f%% done ...\r", myname, PercentDone);
- X else
- X {
- X /*
- X * Should really use a smoothed exponentially decaying sample series
- X * of CPU utilization to predict future CPU utilization to get better
- X * estimates of completion times. But, I mean, get real. This is
- X * really just a convenience! :-) So, we cheat and just use CPU
- X * utilization since the start of the computation to predict future
- X * CPU ultilization.
- X */
- X time_t t = time(NULL);
- X time_t tN = t0 + (unsigned int)((double)(t-t0) * 100/PercentDone);
- X char *cp = ctime(&tN);
- X char cbuf[26];
- X
- X (void)strcpy(cbuf, cp);
- X cbuf[24] = '\0';
- X (void)printf("%s: %6.2f%% done, estimated completion: %s\r",
- X myname, PercentDone, cbuf);
- X }
- X fflush(stdout);
- X}
- X
- X
- Xstatic void
- XPrintLicError(const char *message)
- X /*
- X * Print an error reported by the LIC subroutine library.
- X */
- X{
- X (void)fprintf(stderr, "%s: LIC library error: %s\n", myname);
- X}
- END_OF_FILE
- if test 22645 -ne `wc -c <'lic.1.2/lic/lic.c'`; then
- echo shar: \"'lic.1.2/lic/lic.c'\" unpacked with wrong size!
- fi
- # end of 'lic.1.2/lic/lic.c'
- fi
- echo shar: End of archive 6 \(of 10\).
- cp /dev/null ark6isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 10 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-