mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (12/12/89)
Submitted-by: everson@compsci.bristol.ac.uk Posting-number: Volume 1, Issue 92 Archive-name: alv/part08 #! /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 8 (of 10)." # Contents: images/sample_image.Z-uuac src/ras8to1.c # Wrapped by everson@kukini on Tue Oct 17 07:45:14 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'images/sample_image.Z-uuac' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'images/sample_image.Z-uuac'\" else echo shar: Extracting \"'images/sample_image.Z-uuac'\" \(18682 characters\) sed "s/^X//" >'images/sample_image.Z-uuac' <<'END_OF_FILE' M898'6EP=A#,G\5I]R2)'%%P%6N.3:', ]U!W_16HZ?ZRVD)E[VVN.2C(;?=- M!#H. T1!@-H"B;!3W$U< A(!#4A\!LJ3]["X6 YJ/(AO#QY0*3;$];%874'L MF@<!H(!6@A^ V?@B<44H3\A<R<4$'AXYJA<A -AY8!?$%]]5@*KP,1NI!09$ M:B>XCEE/K"P@E2=J%5VB BX!J@#@08V%XGN7S%128G6TR(<G<7+XQQPK^ ?Q M)V&\!L= 25GDF)(@8&;X!@2@QC/.*(('$T#!J?4A&C4!!83');/Q[8 -&;CF M#MY=VRJV :<#U=#=-<]9K<1U*X8]#-N2;;"'Z>LX]UY/;H ;<B9@(WD(F#,9 MNDBA<]I%HGTAN"P0$J%& @)"(@6H;^S ;?!'49VY#6(%5X:98GZLZOA;/ 28 MVKC%?L9KA9GNL1D+")+N&:%$&X&K@@MBS,PCA03 A3'<+M)+836%U#S*U?\ MZR0[N8!6P"Z@,N*8O<R0:#B6&ED.;2P@%. 2D'66*S:[N "8)UU9@>?KR. I M?3@& ]?$UG<8)&"&S0/ 7/X.O<UI84@!V,!(#%:T$B$!>+*E7D?8(5@)R/3R M;E.(8DGJ[PA'./0QJ(A*#\PP]"OU+C9'M-D*TC<*A/P0,%YQ'50710HXZ V@ MNS"(G@#H9CEW5,!" 6:"&PH5&AP/PR& 6Y)6,+CR'CJ3UT9-@;SU+SL?K$U< M$SH=T49.SV6S[;%OQ8#F*8*9V HV;]117H<JD%KL'2 4_0D%GBH@$C#?RP5( M=LC.];U?@&06@/>@K>\]: 7'V@1+ BY@$Q#CR7D*\$8!BX#/[/./T4=^CN\) M#SR#8H$ST"3S\1G8M>$H?U@%ZE@"C^N#U2J^(P@!"!04\0K7P3]&1\L]2$*I M@4BV]CH'#W3N[%<(@+'F#HS/2C(ZG,Q%P2IA+:"."OZ,(![\@>A3VFE;!D : M;BC.8M8&9 ?#N PX@"SX&=M]U 'ES_('GOO!.3+G@U8]\KK,Z9<*6]+X \^: MW/@P9>&?P%S"*ZC!(Q+B#SH"TP%^K$[BYSS'2RGD%T@%\@'[L9SA$:#^8Q5F M?B'"ET&&L,$88$=VGN!*9BNSH-R&;+"FE:J@] 1 M2&BUK5Y@<V@,P&K%2: M?F&R*UT)S[DF+HR&F$OT 7X>D K@#N"=D-JBK7V<*89F8(TQQ_ $I ):#82 MD#@TUQ_7A]WW#K!#UB#"8:L#N G#V0JB<C,1,-/-"^\ ZMB^4YJO%!IM[ H[ M(;X+!![B@*>C;!B(W"GR90D\=N!?'&AR!3$AZZA>"^YBG- AC*/3#N"P W'2 M"].$F\'EX*;C)Q 5&"* !#@43@LB*[ABI8"&>!N4:U_.EP!HPB*@#N#&2(#I M@:8O[@)- *\ %> BMB2\FQ7%;[M&'V71TBM?-CM[G[W/.9I<*"V@\MH&0PLD M\#:_4;V,Y?:/(EP+D)&8#PFRE(!Z&.,"L5IFN!>6DID23DY50=*#[;!A&"G, M27(X? !P+O? >:$\$ 1@"A 23PL_K;;0X?)'V9YB"B0*:+GY;P?U.;"OU#&H MC>/1&-!"Q:5@.D#N)=.B>#L]"!XE8>?@[N!^B%!P0@W/N.0WT*9G<(G@T>M@ M0.,ZZLF=80<5^;#6"0O?#_18=0#E#R @;5P"=/D0>!I_P8HL;^Z%#H )\ 0 MBLN&L0,Z"[V-+4&DD?]= F0!K$)&7QZQ,DM9;/1]H8$!?&3Q<\'X,D.9Q> : M_W*>,A)TB>2XI*L*Z-!N=$NX;3 [H-IF$]!3B3:.*SH=<MKRQI7*B=Q%F'R1 M%Z;(7P3\$:@''4D&8F ^?P;-N%YG3A'A!=T5L!T(*]8.:8<!;:; ;U#8(?]H M<."OFL%'P([B-\![D% P6LEUC.F^P>+BU/%](#+77!J0X0)RZU= Z#/' \^- M@<:W8MFYSO+GC2NZT)=!;L!S]#)Y 4W"#Z"-]#:(4 QGA0H.!GI2*BRN0_[P M.C4!H8#)ZNJU[; =.$$L5A3+IX7,Z\5W;[<+ 9 :!NVA^2++RX4>, 0+E?@ M$?^ BKY.@-@Q'O/9S0-Z8CLP-$_MGZ?O@ZMO^7%V%L7(;%;&ID'+*R@NP);@ MFQ1 N8.H10]0I< W$T7/)T$@&T2\CGIR.8"()15\)HD(AC,:3J8 ;I!A*#-0 M4ZO"?]:ZHSH77""'S0CX:4&A9]]@9G_2!OPW\.NT:WD]M[GK+V-SCF=XC)3N M=<8528TR\M/1^ &X<V&PO>!THU"O9\19&\D:C'"V#3*GGQX==-KA6Z#S,>'] M 6P*I!E,P"0ARF$VK FH$5X.CUGS,_!@K%??0^8ABC.X ^,^<U3:LEL;=,S: M G0)GD'4IRI@%,#\0]S=!A$.*PP&3YH! [HI\ 1P\]! W<>)Z293/\D:S VX M-KQ$<[#$--:N:.&W?8(>.*2/A)'K3X<"LU>I(.J2!08.1 0_!%>@ ;FHE"+4 M#5 -P@2_3D3!.0#J0<I)/.>=C(MQ1;^!W!L2Y3W(+*')Y4@];@>G-G%J>+#: MH_]F:#JH0JE7PX-Q^%?F!M8,CH OC& WF&EMG&1J/" *%T/!@_F.W,<<0"( M AP9ZD,_@#?O^O-SUCN@ ;21Y&/HH7]Y55CIZP60G2,$C]E^LNY4%2#Y1>:5 M*WR<-,]1 %DA,_/C= 4$*"8!1$53 ,_G':D&]- VDBFQ 0H-HZVO[KH<- =G M-$JAB@ ZP"J%CD''".@@2NP+D(O@W 8Q&E7-27%N%5"DK6J&KGV!$!M2P UK M7+T_V(JKGU!H4>E;\0(KCY7)&%>9)=M@X#K'6R%W>K@9?HC%!?F'T]/=5>NL M#9J5_R U Y'Q^J/E!3[4@>"YPCP(3ROY?^K9* MW'!Z7NXG#A?;4:4E></+% MZ3+&!DLXP,P9)LN;=;3(92["*E-*@.,8>!#Q]3YCH_O,&=W*XBZ@9MK:-.!] M++5_)U=8J <SOA<+$."M F0!FP!7P*W3\DNT?NK1\+"%.!:F,V]1=)%F0)&F MG'T;SH,N2.!@RIE@O"635\Y^70%Y7V>25WSL^1",2Y*;PTRI#XNS%>0&0.UE M<T8)4A\[T*?G7IA-WDFK957*'50%:_2935<>9FPJ?^:T]4*A<C8'-V$X$#PH M+DBABTQ"9F2TZFC\V .$&?@%?E2U#AMXU&/A23BT,#1X4(LD:$=3(%3'P!+* M_YIZ?0#(H2: Z',D_).80'D%[+])0.*NXCOV&L6ZRHE;<*"T4@$>]H+;, M]R2_E5\/;<"8@LL(:.O!1M$"+P%8 .B779!*+;'B%'D^2.6!0Y@V''R_(K\9 M(<0 "P:"D(("<+ M$?\NT@:^$\Z!PW+ /#@*%2]47RZ&]D5R[]M !/HM'I=D MF1VKHD _F>/363<*G4N(-I\8P<PY=#FR[!O,9&SR A/,HDU>8,WEU2QC:TNJ M)V%O/T6#:2O1%HUFH/: 3=\+B5$,Z*)R30>UJ#? 9R\ABY];.8S=GI3T /@ M.C(!D$/0@K:@PQ*M/@5P N .^[PL0Y'"TOMNMB0X^GC5$M\);N;.6.W\*^%. M9C&YM0 V&", 8 P+U3362/F2><#)W8*C<:D)H"3+9OPZE6K@ !#Z=9=\<UK M'D*44BD?W$ZN.1C-'2_DL<0Y$HI.AZ$K]V+Q]##<H@JM?EM>X+C"T^/9V \T M/J^^+8J?0"-!NKRK\9]V0DFF9>%LSD^@B\!":SN4<5,?@U]2YX2'S<KJ$ ^' M"Z *VV&_ ?5%HJ!JN%!4L6@3& ,UP"93A-(*BKDL>"AWGH#/P7D+8;'K< 2L M,: # @I>9RG KR-Q\ 5T=BF]B.*:GP>V7!$*P%WC0G'6GEPU8 "Y;*.[QN"B M^10!KH DS&!9:)V$Z5C*_X"AGH!#0"C ^.'L=:B%:8D(V9RV@=8#"5 ?^354 M$?@&NP8U+THFZM,ZR![##3J3]T*P[;TA.'<2]:UX.N#() I$=5KX2LA["-<F ML]L&R4$1C5BV RH(>"C 85F<HV%T@R2Z9+-VZ!2P9&V*3N,.!2)UT/S622IB M-IU[C$WEX+P3;C"VV9ZJN\H+'8,1J=\@FQ-\^!O@#T"<G8 I-2.@#[ &&O"M M2TA+QC \P.<7NG@*8 3<);U[VH1&GW,:C^@+(#M+9F<!#6)?0%I#,BMZY<LT M9$,!BP"M@+YN\DL+8-B"@O%[21B+);I %IK2[(W68_)!*XP=16++;2"A>#T! M![ WZ@8,4[L!0/8'""MT/-8.&(/>P!G"2-!G%"DD8SHXBB$D OUJED@2S4^F MZ1":8ME1 MLRHY'J)(5^<.0 :3[ZE>G&"P,)$%UX-IJY2@$BH?_#>+:3<VC0 MKS2$]TF20)LL&K6_;),-&!:8>E=DZ7V2A7(=Z.4)A&Y1^ -Y04@ 29<813=, M7P2S%@+CAR0 %) \:!P6_19\V5&O18"B1PHQN"=R9+W/D9UP-(,XC^AN]E5G M<%>%$8*U,PZ5,2RPB[%T=AG"$V#';&/E#&94-#M^+!-WH4Q]8J1/PPH:?CL M3=C"@MO;'*]X!(4O,-.@VM!RJE\1BKRA9GERV0^<.C0W,%TZ@+TPCT5-GL^B M]C#- 52N@),@@!G&E=>MIR<4-1POS,&@C"LD'B5$;[O9ZLE13W3FE?O1V#<J M E8]P#PG ;9P6T) "C-X1)N$PB$]@,^P0Y'$B"\ />"/R!\W<'6 Q0E[Z^&T M@C84K T N[EO,4)*/H)%PD!?R2A8O1GG*>HG1CG$84!8^>*-L#..@VL1E(+ MJV<!I(#S'T66H]OR<\SF AJUB^!5@-I08&=VM('*]VB<?;O/+_0AD6V=6O[ MZ?:TU(&:=I<F-Q82(>MPR 1"<#IJ#TE:7/?I0!7<@<NX68_TK,RR-C&NZ\I. M.RNC2A]$0/^#$5"VU0U\;G0, HSG)D0!1:H<;$ F3VMYCU9+9\KYWI"2:802 M&9F-E$U+YQDB)[W(3!'4IA&:.P9GG> 5(K-2;E17Q[8( >.M&UUPMDW@.G2 M,3JH%X=^D O/;RIY(_5Q @8$&#?&BCTQ%> ),&E3+WS5C=I_BZ5/4?RK-E9; MI^/,K,(TH)P9XUL+T%E7%OO,H]Q*KN<2;7@&^W"3'P5X*M/,8CRZ0R N<!K[ M5FX3#U8Z0,M#AL4JP&@("=0 *06O<;Q,6T@6V"EN!B?5'XT)Y\K9T\'!Z N7 M;0.564>]3ID!#?$__5]**)J#-47+FF[@]?0/ZHD@0-$0F(5E<LWE8O@;L"@T M'<G''E$,Z)6P6N&=D]?%@=:L7T@^3#4Q;N"\BKDP=X\0?EZ#%K:B^FQ90P3P M2!\!?X!,0"= #[&$0@1\G-L G(6 2V%EAKW9W?Z9FQ7$R#Q%,:6VLA@AT/Y% MI2N]CCY@=<T:XUN9A05H D*9'^!.WQK0[!B/R5RJ#X*D)T33G4?4?]H1",X! M9$V&6A,.B_>DU@#,R%9\8=)TUU"4YPJB4#%+A+D$$;Q]0@2*PB*-K;L<#%#F M5<,%^LD_JR( 6V'0<IXF-\T*=HF=8:O@]E:'[O1L%7#.S0&O<>" V>)6Z&_ M]N02';A\$"V9]^ O(*?, =AT"4OF#\XGK3 9G7:F';JR^X$VP'MK4:G01=T1 M$>Q _H-ZS(UER$ "/1GH>NP+)%#U87(QK>?IR]P9%AI]CCY$\93@A3TE</0Q M^OK,L8"W=V26\HOQG?Q69G$!H0"QH_U9^D>IU">V4A-XT <@7D-S)+ <7+@* M;GT#X08%06!G7S%\^/! #>_ 0@(:SF%KTY'\.9&"'-BYS &I]L!5V+UB""+? MWB:<'V\ \<'@;?"YT2@[(1Q#Y-YR)##3VLC7(;<*,R*O1@0 )/.G.G4M( 2V M%#L!C@ -0TANDUGE:$*T6ZF_VLA5#_? 84<U)B\,K,,+?9T>CA[C;V#SU##. M)78=W;Q\T"/ A(FDZP18;)TUT <Z8)/& SLPELQ&:G.AAV7%,9\9C\@J]!]_ MH;G2XNG*HB5!,IL+Z*F('=O1B^33:VLS]1IP8:R GBW9[^Z:TA $BU>6$$$ M&3 %OUVS#!K !EL/4NL8H8\>]"L:-[.;:HWRW'2T@L19-1QY ZK@E[=J1B(0 M*'AY=1R;XCFC*BPNB-ZF.CD='0%QP2L&M1>H_%+U/S0X5T+1\NAFJ4=&II1& M#CD]7\B'@C"/P:/@ 2.R" B7VDB<#ZQG7\;UI>& V+JROP'QPG#"_1#0=MPU M=CT!%P5D R\PG?P&0-OT2)DX?,E8]BG L,W"RP6$,G.#-E"N=*-6R_)O 1PC MNB._\^<T,R[@2&,(>. &8S*W:D"[I T4'@/R_0PV5K2,C<O)I[/N*LR'@?=M M-P9[28 6;&<2CCP=L*S-$M];'(SS\$Y.9+J'Z1CL&YW.*5)7P6\;6Z)J\#"X M 0R/MN0:+"5@[;#T$=<!3:RYS]VU*]LR[;#,'@_H&%C2:XN\#,79&!*/MM>5 M"+XP3@+/PC3'\9E3C.!Y828\^K):'\;AU#%PT!8"!U+!U"O<YT>8KT-9/1]_ M$5JV-9=,0&;&,UABI?KN 3Z6'.URA59@ON?H[G SB!'%JD*JM*';_;T+^ 0X M OJ V+\!\,-XX?TWKG23']D%HP .L8X6<I/$X,.T(%(/.BDX@(IRAD'I&0K9 M@3RH2> R1]F0;>F.0$+ 7+',;IT5PX*5B^T<\';[/S*GXVN_CK+7+%#&G7?* M7.#2N(-;E)+03 <<:!N,0IT#/((EX>AQ*M41>,5 @?-C0>3#ZXJA 8D2]MN: M!3H\@-3\:U/"2(,[ /7TG<JX9(%'V!V@:)U+;"1,'BL!/Q'W@E#(H?$-3R.^ M N8QM-(XN*,OQB+*!AZXF2,$6&E> *5;*Q%CH4JK-FD!:4A3 "PO6F,SE8UV M+&%]^$00Q0YO-IJYA)7&1F,&:*\O1_>Q.5BU_L69VH@(OSC!B+CN OX=GG?R MPLN_8J)1 J=G,AKK,3YY+G ^!L<>#OX@ <:\VBKV/R0W3^_VESMB]!E1>.,* M&5%[$85]:QB,UV,2""^00H_,.!_R"D2A^BA&3O.E.0 6?9W[06U"#G#B5/Z! M!38=,N_+*!EY#X,3R'KL&*"^^(.^4SPZ$:"C%F2( @P&%Y$OE=*T$- K4%J/ M8E,!\3T+M_IY\JL+L&3WC_W'>>?;:&-E?2"@\(I[=M%_K,%2)HTS5@KBCH5F M__3('EH2C4G5=BH*N.#=*2F8?:?JBV V>N"$>!MH 7@#-6_1LW,@.-=!1?9J M< 6%A>U[-\4F->1.+/L88X>?MLZYT7U?A WBRJ]T*@BTHEV:E@XX#R=$BN M?9O92 0U;QP(KE,#;S96>!(!H;MZZYYUT]&(J+D$*D/5IG%P 2# ^+ )1=9E M"D[!9(&"7S;C#H NN 1L%6[4)52>AUZXEQ<(4-!R9$\!10W&,!_YDKW!Q.]I M&L]@"LJIGC[QL8T-C[%P9'?C$5X7!BL 7<#!+.#5L&F<C&18*(US-YIZY<!D M& FR<1WP7!+#P^#,:=OD)B8@OX$&Y-OF?UD136)(._^LUU""KA$!6T)N-3Q? M">^3<U4!P<":-Z!R1LG,:Y^.%H(SH?('N:T9!!=8K4+)FX[[@8XAWOB]!B.\ M =IT2SW G?$)QQ+]H>"P\A*K%85?W!M F*!*C%P"33J@S648;V=2]3S_91)* M%+JRTP':!")C$=P'N!8N+IW."((EPK%N8."KYA5\ BZW\,C'CDE5/&W);G\? MQ2^^%U^=]?S9 XMWCK'( A0!D R-;#M:WS+V:J6^2MF )]<.L/K/*GZAJ5,J M#Q@\+->1=Z'B$09B7"%_(;>2<PD3 8H4O$ MR&A8J%<0HU _(X#2H;9"$UV@ M"H@#F8+1<+3!X)IPV-6,E=WC*&X],#DE.O#DM:V&%Y@#N\"W@85 =3')M/X\ M+PR6-^3/Z#_(BAU*]:EP* 0$ZLF]#LVG[-NFJUI!%>9X!8HC[(4EF&EY;=RE M>!4!EX"4P^[#Y*;D>!6L#SBRYK]2 &6WSWR-#KEF+#G:_V6KM)$Z53CQM48# MQ_/.CQ-1ZRR@_(@*:(/E 9WCDV'&<"M[M?G4LX//3CL!SL:O0!!RX+"'H2A@ M"I8(< "YQ$GTL K,./MR.@@!GAN&ZJE3>WNOY6;<9>)TY+Z''8SW#P![J!L< M DZM%$R];LW5$&O?* __!*X)6=SP0GF)/?V<R9Q.R)7?DE"6@\-Q+\$??STQ M6]8&=!9P0Q&AW6?--0G(VIP$YXIK@BA!M/F+RVC0K_TJG]]3@!_ (<@'@ Z4 M+DP7M#HT0-A1%^"W,_W:3"O<C#XT,RB7 MSH\_2QOS&Y"VZ W670NU>9??Y% M]00!^A8#'J<6'CGV:O[!/(76&\P:=JQT_=4;!8;V!D&<<XE==&WB!D7N<U0' M&<@_IEB:^=CU>: 0[: JR:2&V)*C!R\O^' FE-R(4&(%1H0Q@"%@#,3SH>MJ M$:HO;8#$YU8A8 L(6!M4!_@#%\-1 :+$0 6V5?8B-)=0:XOO S8$UWW8:$/P M!P88<8/46:P@)\U"(Z>0Q5M[[;ZU 1PV!9&WW1MT)/< IP!*0 PO$ ! O 20 M*&H-8J/!P1@ 8PS@$ W*K%D!CO.(;T6[-[[1;=0ZIR/ &5SOL[EYA>V!=5); M?N5[O%/-@BB3#*TSY=!2*D'!SK]XC 8]'LDCU6]3?QD\(8& +FP9!KU<[* F MP#ZI5P8NKA<F]](IN,.6;0^V3@+#(_NV 3F1OF_W9A#DNXE"H(X!X"1"\?3H M&/*YB8N+(=M2F&%XY@_TG:('^P$[4)&&C(Q)800P-C^(:;I7C),,6$5%:%LO M":,6:+DPADX<2)0Y]1O(F)W,Y<B4PA+;PS K34T6AGUX()I&@/,J0A%L,'^A M_W*>9T/X=XY&$AP1-AA7M-\>UVG*[H*[-AAGIM BB#V7&0=]B]@19XH[;8/1 M0M. :D,--WY/%EH0_%"( NHQC.6ZZWW28YHFO,T9N@ZK^DD@ H_ 52#3?NK" M8<4Y<MHOC(SM/KG"X$_68^&2/_1I 2+@U'-MM+C0)F@XD]%C9?5Y_@LNQA3X M =!UZ&D1CZ>Z27#@6$()P1^;]^4G:<<C?)Z"L ZD%Z#D1(3* G,7<B$]^!O MN5&=P4SFP!XF.L"V- 5P/NL;F@!0@"A@=NH) #8@P&T'H8"BXOU8$]#IVR-/ M:C>[C=H3-C_Y[IVC&4];<J_3O&IX\V>[,PL*.$.&@CN6\CW<(&F7%KI(#OV& M>B.5^A8Y@^/0$X!3]"R,OD<%?EO?P%]V6^5>(+>6#6DXFY[5J U'38NH#*%# M&;N/6VKQPAP@",D!^B6\2%9H98 +!40A))?<-)PMAE(*;$MR*XFB;-M:;4L: MC5V*W .BCR0@/\:25ENT%:,?>0<]QKYQ^K(,K=PDP K@T=PM A"AC+O!Z1P$ M&2:<&< V!,5Y$=#I<!P.@']X8IW581J HNL;-1XX?M6 #MKZ<H[&DIL+0!1+ M9F\!IX#K]$DS%YJCV>PRA"V_;#L/;2P@$7#[7&2@,BV5.KP9>5X2D*PV5 ,F M8?*2>4"_W2D@VRQ8S(]-3GB!$87?0 =#F&GQ!"GL!CJ-FTQK,1U7U'-E""*( M?Y0"S1^(0J."-G$'8!$0 E<03HL*]2% .L!@R)B&Y+)\>Q@8[X_XZ5A.,7ZT M%%V*T9]]T!EH@5GA2>%../<ZR&:_0<<@^-"E*4^6AWLX]P.;=D;!*MPV,/(9 M'*D]TN_>0"@ %9!A'-DDS#D!I(!10$/&L23>6@1,&4&#%YI/[_:OLUN5-CL/ MC%/EONHIS>078;PJ5!5.+RZ^H=Q; HV#X@6Z%C>!D.9K0"-I59@0IPPWN!" MT!EX4ST:WH"Y'E$O5$]&B)X 25 &J5+@#L XZ0Z[(G9RU(+_:>>@TS%+1$-8 MUB*8$HIPP:J@;(N)C@-%>.YB=6MTPUQB#K!(X[_6 <@ =<>GQ?>:O!!1 />J M+@X<!835*KHN0\/YA,HU'=-\HQY67@LBF"V4<S^L9*>=;0>9R^V-%"JS1)%^ M%QJL102R0(3"S*P^ "U25L] %MM7 5E'(N!<H7GN$FF>Y/34)BBWG\S1=JQ MMH_4=L0&.BV@1[K9S07<!N7,'%D$,0?W$M *, 74F=&03[T:J*1R#?@H3C\+ M#RR5+$V:9RF@7P@'ZCH2"?TZYI_? /[(8V#"A#U@HIN#(70W.6K/H&5Q8=,Y M>P>K2D(^%GMO@;D+?!9/7R[I)UYWA-;XBOP<$*K7<$KK!XXAP\Q9U#>5XAX, M_2:/"TSLXQ=&25BH &9@:6 /NDSS3]%B6S7@:1T4*IHYK8,>3K;"BWX@$"_X M%,<,!3N+K5/]%""=N;.4 ?8 +U#1X.0.%7 CYTJ+7CG: V-+=J0V28TH;M2R MREF%^3U8@(=6M:G9]>S& F9]K<T"'DFU[@S54QOF\ #*SC_+S(,X'H/ 0YTF M+J\_M:;&ISCX4N#=_2YD^3(*JK.3*'\R<]HYT'K+7":G9SH4J9KN6D'>,-)$ M D"E&@8?G0LB.O V0)'"=(,XN0/Y,/YHE0"XBT<_?RX*2&)N,T)SDAF%Q$8J MCW<UP@P["U P0"!%"#<4T]< / +J0/+42 "CIBB8Z4072 1A9IJ!$T##8P6H M]]S@#D'TX>!A",&&<7BO\%8!"0NSXQX9@ZLH;G\['S*YY8KZWK^%*-Z0_0RR M F*?-6O*[U! M-M*C4>6'T68'-ITM W4]*O#8UI_N!%WBF4M8RN!O&)0GP<; M2WL#%(6D\4;:_<<C$+32:S\WC.BJ<-^I4*W'4I<;?2:?@/4+!G# 6NR'0 EO M002Y( %JJL7SR*@\:$N&"V[(Q#<D,<?3Z&,)X!=@0'_<&X=D,J&B$;JFHU\= MG7UPO(;;Y@^1,XDQ>%A#G,\*(;E P%Z2)]%>2%SV;+]Y](7FJIDFX-(;]0PF MK6&>N?'=^&4FM>D'-#^7GS._Y9!7@//!,I.QS. ^_SRUE<I&,*RT;_>QW)'+ M2#BTJFQ[XF78N[<9#@7G!G.)%[S1M9'Y3+@SC/K(=)<#X:PRK@ 4+AESL0/) MNO^7_,D=0Q@R4PX(X#=X.DSBZLE=X-U!ZRU)W3 $#I _C8I)ARO"BZ!@K36S M'Y0/@TN?(1DY72<(* 0>&9^@&XHNS:G7<U.T ",\O0D!(A0_A.00[SM$B"\4 MQH4$"@KRPH"GX?50QRU3E@LA/0$_ "A@ 2\*\/ET5.L-,B(Y0-[\E:T,1_]9 MH\W.W76E>.8.@FQ7;Z6*'0'&FVQ,,$.XPMT_!O\E+ J"S9A0IM(:9WH&4T-O M9">5B3N.KN=R_?49' W[HPT#QYQ+[B6S8J>M%KMNC7N!-;IP(4E3ZM2-^#> M'8 (YP%RZW=8([!5) OX!LHB&AS47?1 6F1,;1T, C .-)$BS>111QLS=V.X M,)J-#5/, FI/0N&L2V+D(-Y;NT,!:-G7?XJ$F'!>$Q EL#?U[-J@42$4,B)\ M#.0-I0+J0RJ 0W,EM%&^:#<!#?C)6+U!]#'#ZXDV5@"('=IA>^4VWSVIS=R- MG;5_4YJDN+9=*X!6S]=UUW.AEP1;P"6@5DH'1]$4\'1X@V4/[E" TCL'-W_% M(XV*O (@7CZ([5$O;)Y+M<>L%>\E0B=4?IQF*(423/LZB8/5J)$ W/ Q> -W MYYX618NQ30MB62ZY&? P=X5"8,1YC?,'ML>%;RG.U"<\SQ^,[1VW)V+2>-/) M+%\Q.@89!H3"08$H6? 4 F4Y00;O,$5!SNZ%6:1-SZT#;0,IPE!HS?M3' 5T M D0/05*2<&=144:M>%M$\P04M\0Y4.S3+KEO=C='?H'5CEE#-P%]K#<4Z*I/ M< /&JW)6N6K3%M K. -6*DVZ!;S4)C\]JC=_SMQI,!_#TD5: '&]5P"3O;AZ M&\39:8>SK]98@R.NP#D'<5[,&QRXB83B;[ +)#*J>-#&(8&HQ6UY%"%XP!_@ M?5T1/UDDPKAN?$*XO.4U+O-D0S^:" @'"MDG.[&C.CO48EG>+)W5O7A>RM/, ML\\0/$/E8.IVU/Z!)JRJ'1J0'9P+1=OF$$ <O26" N0 BN!')?MO$?!'@150 M"S&-)9*P8RD@$& )<'\WA"/"%&#*8F0'F>>8I4JS ;5_$&$^\\ 8,S.]F/!J M$Z:+(EM[8E\2QPGJ-2![MF_N$^-9Z T4*)K(_L=@4B"I9,Y!N:RM/PG_TU"L M=80$2K*4@G2@KR.ZL+T" N1B(UL,R$.Z.? 3H")(!QH5>=E@!9:&R&A$X/0L M"<,,1XV?21+*2".S5 Q!Y0B7V\=?#(-GN?CIB3UL!!($=+@SRZ0CXKJAF-]J M<#*G3HC/#>0B6'%J*..JC_VZ(AYIH$MQ#4!6J-Q5A>F]<8/)5_.$5T!#305X M*.K=EYE)K35:4;RW ]A-M"_<WCT:GJRS5/Y5KRPV;#F8D%_[LRJ $K#"TR58 M+,F.I,SIQ7P/JQX=E^^)H<GK@(ETN"+82XW 4 JTFDLV>VS]+.O,>WZMZ#-Z M&&CQP;FH%)+XU -B&9?(%PJQ5P3?"C/Z];3@9#N@-HK,U1Q>NI @:/P!=2F^ M':+ 4$CI(^2&F_,W&/5X@0F,BI91Z#'%]9;UL%6"[]@&N.&!+WC!!=$*8D$ ML3T,.H9, (:FZN@8(BM [I@0^(6[]$7D"Z!#S:8L[DX!E0!6 "]@(OMN#@9 M:!7%7.B:7R38 4QM:4=7>O.(C+Y9 -E9D&Q(;LC2 8\AJ,PZI6)Y5BJDIU-N M&TLDBY7#\$KSGFQ4-/^I3$,!VG1;W\\9LY3<]&UOJW('3F-9=PHBQSPU?<Z< M7&@74$B;8A'QZ-P5\-MJZ*D] "=2 C!#I+!5W$D7,#L\6*ML">0Y#60DOM12 M2JU3!>E6\V:0L=DD D"2ZX@#P<ROP+_T:1$'(%"4%SX$6(@,^&WB"/' OA\T M(C(%:08_P"<@75(3, 7<@[+-*]TIIZI!UUOM49DFU\U_Z1(K(V6WRIZCN:YW MUR.UCMDSXDJ .NVY1#M/?A5]JU#0+RL4Z=?4T]3&0B\)'MI< "M@P*S^LJM7 MJ_'.M]"[NNA2W_(*B.PZ#J,_CM8^P&4C66RUFE0O*M$0O/!5PN:T:)%F,'YX M%NH9$3-$R6#5%9%A\&FX#8AO3XSI"ZGG;:ZA: 1\.L@K<3'RL2Q9C+S4@SQK M/"0")+S] 14!\A?&V _8%Q*O) JO8+9\H!U6G'Z#[Y8(A0??0%>@%=0M1E!C M&V%]O )20!X@<6G@P$8J.)TY6X#9!_2AJ+C*7(6* O*24WKZ=Y6=_8WQO7!C M?#66J=0U&'!ZY:=*#672 C"[EAD.IFK3S9RY^];+O\LV](<X. <S]"H+=9%K M9%D7ZK\?Z>>W<KP)Z,,2A' 3"(*"]1:!.TYL+96B[G[J!M=;WQIYTI$8'=M( MTW>!16Y4 C,Z*D7U79Q.>&J*%A[N 9&BE< :3+@ST3O.=-T+3I,H5A!6I&)! M*X83F4__*6P/[+(+;.;Z;9UU]&"DL!X+\B?,T"+<WC8.2(P," 2O20#D+$J/ M^X05R9,"C#0#*'00[MD3%>\QEMP,+BF3<VMYOA(J?:2/W+S =SR2 \/OKLQ& M=K31W?67G[[YO[R.GG^GG2NQGV")<2PT>!!7!]D2CJ^,)9+&"BD@I1%;%A(8 M$>3UVF6W@3P\WAM*9G7H,8 #2Y\^0$E@5'!FX<ON#%>P30TV:VMO%,H-CF@2 MWVCA;%Z,J_D5$6!\(MDB,@D!D@#6QEVLXP%B\8+P& )"C8V]0;_A#( M.3+6 M70.5&P?[!M10'4M#CW[H&.:_E1LC1 &<9.-_+N.*""ROFH"<N7]@DKFMNHC< M)N *;X!, /N/L:(^4 48HA&IZLD-@2)82*_ >]KKW,W-V&AWLV&AGUSS*\^_ M[?;RT/K5^^3WO]S)K2]35BL!I$S%L5G]S.Y>UZ"+NZ:+B[L%1PKB<V^UREOW M>\$+32)A17CE!5Z;Z -H2S .? S@#_CQC7&O<]BM=B.?@H"6P_')PI-7C0.A MQV</!5[,9AZ@(]J1?+Z!6$0*G LU]J@ ^?X,$M?M"#,"Q.'6P;U!2PT<\#,R M!W@$XAQR:VI<R+9@<%XNAO8 VO15:/R<?HX*54]> I(QB)*-@)+#$$##(RI^ M!EL!A0!/0!ML$_ ' *!_G\G._I8SHJ^:K#?66\+X;20[KQ6)=B974FO1ELCZ MCYOBQNHCM7?/$6 *V,1:X+_J+X'89\*;72]V_ P***:$#NN.1U5XWJB3,[!+ M;@"16.W$"";@AOR)2_$F1F0]J%'1Q8,TIF%L!('$)PV6*8)G,), U.D(D+>^ M8I[>Y $RLE!S]A&<*XOT#0H5U(K(4K$@>L!(,1RR-K"1F<]50I8Y[ZL9O .3 M$@A"*=9F#@=#7&?D<-/\\!2TQD97#_FG)0=LD([Q)^P CUC?:))&$; 9?@7H M:/'RD=H%L1CEM1*)OPRV5M[,QSR=>Y D&PT,>-K;);OJDE\0+_# 6*WOO@5\ M DB['5VS8Q]Y=@V/7&VB,G&FN$\>WN=72297>+VM=>Q ]X,S1&RY^G+J&&;" M8<NV&HJ40MF6?E_A"; /A3H2$)Z^CL7@UJ=\( 1&6,DI@%.E3WG%\0I[*(3G MF-DPRN(Y'@=(&YN#*+:@ 3@83V+J"UVWX(I&;AN %*)V"?:^3@+,L'/!^!C0 M,<XL3/7[!N#&$)!&N B/ D1].\5ELA[($R '^ AOTW?MUT). !WP8Q((J/3U MQIW36I:]72\@7U/1?@DL''@PV6AMPJJPYL=Y^>2VG2_! V3+[V,60NN8K02D M]+4)EM\3=GR/4XM_N)G.4A-X>2QR;]\I$"GDOB),..,&V^O7I73 H:$;X& \ M*NBU]"MO01V@ [I_C53O*(C<X;F,0-9#*"=2H+YX>IZ\?0,M[U&X2=A%MVF7 MX>>W8Y 6A"H:@19^MTP[!T8%6N_R@D=S[(ORO,VI- 3U)_F[@R<@98"VV3$P M J)YP- @[@;X6!%?()^A 6!X3WHY ^_6^6?4Z&1+=NR(ENU(<#_Y#+;":P6< M9@8J"F[59N*N%D!VCM#>G>O=!&0/;EV^JSXP7@5@ F"A'ECY7DC[*4[Z/7R+ M+C\4%LL=WDDTKW/=3\FL<]\'L )GCH,:?"N=B!L$#MK6'().)SZ_/NM^^+.* M<XZ9Y-8F(26\S$K@B7D+'")XDLPKI&6S$-!K0,\5FKW$XCJ%KI#@TU.L*L"@ M!PT1*06L.RF4KQ.P_30F1/DZK;UF'0OELG$' (9&1@ 3/9^.<#B]3DE@)BW= M9;X /5=[3$A5@4>PBQE4.6BADUF\<U3ODEVUGP5 :8 !CYG72F0'2?UOX4*; ML/DR$8*),288%TJTK]2: IY_K/<D3$.V@->0_<"O-MO1HN#SP\= K7/,% @= M>Q.C!-W0^KPS<6'?[AK_% B7M3Y$ &6ZX]$1\"PP-^D^&S6*7N[%LB&233A8 MI]J2#)X4@;I.DKY",R*@&MH Y!_9#*5 P5HV=/DL&(9A" )50=&B*AQ$<)[^ MC+$TGHUEU:]9<89PW3"K@:C1CH !!2/@?$@*>":D O(0>H,]0'U$_Z&V<*+/ M"W$^@H"1YF&D$1#A?D<N.*R+4+VX=]O.C@@,( ;@:Q@F 9G%?GU/L8^OH2S6 M]SJ[5F@;^64&4FNLS@5( E#;9D?YMVTP]MG9'67"8Q)W(0I:P&X Y0F7]"IT M4'_-2?ZZP<Y2F*'K<7R6(Y&:PFT-X< U3Y'1./L"#D2;Z,HV#8P!SZE-'")T M,%KUB\J0 43PF/AL?"L,/*RG(XT'[6@[S2<8)K'%WAY1U#FP(4"&-\JZ.5E M,RK>@^IY8S8G0<#'OCN0Z6@-)-1+ "" P=<&0 3X"^-AFX)> 2E@9BMGH=T M)5CCK%#&G60%%NK=8_YQ8 #H=LEY)"+@YJ>O@?//5@8RKA-\#;Z&,@/ <S?# MO=]V-1:M0%2:@8[)G4>.X.OR#W1+ GP>_;=>=Y&_ HQG>QB $$&HO8BJN!@Z M/8Q\.QS5V<.:>=(ZR'H\D1D!0>--Q\!AY2X'\-)V,#S5S5Q2>ZR S%57I?E4 M B \;X<(CUH'+6?0(C*>>CH=Q^'93$Q#7D<( ",N*DMK>XL^HPZX ',>'Z$4 M*EB<L^;DZ=VABR"NNR)4#]$E:\0W "9@;1'K6>NANPLC5PMKT1?@$S K1=L0 M#$H!7F>!G66&%A"YK(]Y:/O;> !8P&OEH&(,.,V 4<(H.Y@J"VLE2&*E]U7# MY?/R4VE+ME2:[.R!A02X!#BZ)M=.GVT0-TCI3O_]W#6-6/?DY@8'?U!-/L(R M2$$L'(>+>ZF #0#;&^=9K28"<U4<:A)13'7C"G16[%CC2%A"95^)+8]PPCR= M:(< E%*& (-9O4W_4SL*'0H5 R8"]5QZ'<%OIW;E2,L!.0; !@)02D*T":T@ M0 2[0/)Z#@TE!<T<IP:N"!T<:0: *<%Z@/I=6P -V1;!8D.C3]%!% D_@8< M!M<IC3M-/:8 G@"?>7@%F1FX ,<">@";5[@ E0!\ +, ]Q;E?NX84QJM%0D5 MJA7X%FAG!&,06NX8^&Y>==AP7G695V]F$0*Q ), DV%\91I,SS_5=K!/%6'< M:;( *W!C6AP@=0/A!M$!^DGR!LE362"1!7P']7:[?QH*4Q^='C5G_$H; G@ M31\V')E-$QY8#V)6<!T+3-T230D*2XHM64>"6_L!(5*R'I<%XP*,!;=T04B+ M -QQ<':B0.E*A0J) ]\%_78/-88 ]"LN7' +-1<=#'9@[PAU#'L .CR>7K MK@-E&WP L$&# /4"&@8) N\&70 R5<4*F%A[=8$ I@#G+YA7A15] H+A@!/ M::\;_!I?%C@]P0"+?=A_^!;B9P [BWT+!SIK<&\5;4=J&G/]9&AU\WZ9 +E$ M@&2;7"%7.5-K0!I+CV.0# !*?2>Y%V-%0EUY&C58AF<J#>$%5A\<"@0DC1V_ M.$$$YP'#;N0<C F3&I9$3QD9( #/P%N#!H>4RFL0>-=3W.94PL>@F>&9WP8 M1P_C2!=15P9Q.A)1R7*9<7L#!1B):7D:G@[3%U=<_09X/T0$60^1?QT'#C5W M<L($?@!%#7T[GP"H '8 C16F &LPI0 )9; (/6VA,5D NUO$?Z< H@#;=)$ MAANW4UL) 0R2 *X C@",#/UDD5I2%JL5 !45?6,68!;E>0QA$%IC/7)^=D1@ M0/4]<7G>9WUF=G5V28< @UH?8$T:GUF62A]<47N'.ZL 0&R# $8")U]E+R(4 MC@B/<G<'*X Z" 8+> BL;GX(ZDDX"+I#/$/D%3H*%AZQ'IE/?2='1JU$7P&? M,VTR^3&Y>EX9(!9Y&IP+/!QQ('8);%9^=I-,-!\T14M"JC.Y"29,P08P758K M.W5Y"@H*'0/J6>\%G0.%"B<7[6$%"O(&/%*O03I:> Q/*0 +0SU&!@:G0#C M 50,!R1=:LE%QW^- +=D/W<R$J0 A "E &@@K #_%J@5M!6^ ,4 KQ62&:X5 MK17<?[05E!D16E,:5GJ2'909>7G,:1=?;GF=75H!=F.M !I,:D.<2Q=>GUWZ M%IEXN@#-<PPT4F29 GL+($Y)?FX%%GJX"4=XJP0\'(1J_$KU!O8-^UUU$-4< M#!YB60-7(A[";;QDKAXI CT5V$A^,N443PSQ8G4,]DFC'HY..WF=4@)P:3XY M:3\1CV879E0$@B[J#T4C%Q9(!#> QWVI;@!6AC.H!AX<-5(\4GMX>@#/$A=A MCTJ/0S8\2&/)5U\ 4UR> M?HD&J&_ET4G'!3"%<,$_X&C8_\Q9@%@H57!8# M%Q 53S]1'.U#AV+[.KYJB&+X?1QMWVB=7&1UCEFU )M%N%$V4?!(LE!# ?MT M,$^>/C1V@F%531YO>569 !D-XP6J JX(<%L;'(\P.FCT!6,=?Q1-(GP =Z M5GX#8FS=1Z]VJU4="BQI34?=; A\04AG0MP,\%Q? 5](8F)G0HX X%[#3$%N M9CI7.VT'"@I[1H54; =F8J\GB #. :H"Y!0P789W&04H4H, 8D<<5J< =P!& M/Q%ND#L]4J8 D@"]/+4#WQYZ -AOU"+.[1-I0!L0*H %@*O:GQD/!C2>@@5 M"!5@%/<6N(&3&7A$O(%P.X)NKQ4#=()N16H$;_%TZV9M,(T 1VN@>$,!+6P[ X'<K).GDO==8&3 X end END_OF_FILE if test 18682 -ne `wc -c <'images/sample_image.Z-uuac'`; then echo shar: \"'images/sample_image.Z-uuac'\" unpacked with wrong size! fi # end of 'images/sample_image.Z-uuac' fi if test -f 'src/ras8to1.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/ras8to1.c'\" else echo shar: Extracting \"'src/ras8to1.c'\" \(16965 characters\) sed "s/^X//" >'src/ras8to1.c' <<'END_OF_FILE' X/* X * Modified by Phill Everson <everson@cs.bris.ac.uk> for inclusion into X * the ALV toolkit. X * X */ X X/************************************************************************** X Copyright (c) 1988 by Hong Min X X compile : cc -O -o 8to1 8to1.c -lpixrect X X The program 8to1 converts a 8-bit depth sun raster file (both color, X i.e. rgb are different, and grey, i.e. rgb are the same, and both X standard format and byte-encoded format) to a 1-bit depth mono sun X raster file. If your color image has no colormap, this program would X provide a default grey scale color map. It implements several halftone X algorithms from Digital Halftones by Dot Diffusion in acm Transactions X on Graphics, such as error diffusion, ordered dither and dot diffusion X with and without edge enhancement. Just type 8to1, it will give you X the usage. X X This program was written by : X X Hong Min X Computer Science Department X SUNY at Stony Brook X e-mail address : X UUCP: {allegra, philabs, pyramid, research}!sbcs!rainbow X ARPA-Internet: rainbow@sbcs.sunysb.edu X CSnet: rainbow@suny-sb X X Everyone is welcome to write to me if you like the program or not. X And welcome to optimize the code, as I haven't fooled with it to X make it efficient yet. X X Enjoy! X X****************************************************************************/ X#include <stdio.h> X#include "defs.h" X#include <sys/types.h> X#include <pixrect/pixrect.h> X#include <pixrect/memvar.h> X#include <pixrect/pr_util.h> X#include <pixrect/pr_io.h> X X#define WHITE 0 /* background color */ X#define BLACK ~0 /* foreground color */ X#define FALSE 0 X#define TRUE 1 X#define ALPHA 7 X#define BETA 3 X#define GAMMA 5 X#define DELTA 1 X short **A, **B; int ordered_dither[8][8] = {0, 32, 8, 40, 2, 34, 10, 42, X 48, 16, 56, 24, 50, 18, 58, 26, X 12, 44, 4, 36, 14, 46, 6, 38, X 60, 28, 52, 20, 62, 30, 54, 22, X 3, 35, 11, 43, 1, 33, 9, 41, X 51, 19, 59, 27, 49, 17, 57, 25, X 15, 47, 7, 39, 13, 45, 5, 37, X63, 31, 55, 23, 61, 29, 53, 21}; int dot_diffusion[8][8] = {34, 48, 40, 32, 29, 15, 23, 31, X 42, 58, 56, 53, 21, 5, 7, 10, X 50, 62, 61, 45, 13, 1, 2, 18, X 38, 46, 54, 37, 25, 17, 9, 26, X 28, 14, 22, 30, 35, 49, 41, 33, X 20, 4, 6, 11, 43, 59, 57, 52, X 12, 0, 3, 19, 51, 63, 60, 44, X24, 16, 8, 27, 39, 47, 55, 36}; int reverse_matrix[64] = {49, 21, 22, 50, 41, 13, 42, 14, X 58, 30, 15, 43, 48, 20, 33, 5, X 57, 29, 23, 51, 40, 12, 34, 6, X 56, 28, 31, 59, 32, 4, 35, 7, X 3, 39, 0, 36, 63, 27, 24, 60, X 2, 38, 8, 44, 55, 19, 25, 61, X 1, 37, 16, 52, 47, 11, 26, 62, X10, 46, 9, 45, 54, 18, 17, 53}; X char *progname; char *filename; Pixrect *pr = 0; X X#define ERROR 0 X#define ORDERED 1 X#define DOT 2 X X#ifdef STANDALONE main(argc, argv, envp) X#else ras8to1_main(argc, argv, envp) X#endif X int argc; X char **argv; X char **envp; X{ X int diffusion, enhancement, colour, greyscale, option; X int default_map = FALSE; X register int i, j; X int levels; X colormap_t colormap; X register unsigned char *map; X register struct rasterfile rh; X X colour = TRUE; X diffusion = ERROR; X enhancement = FALSE; X progname = strsave(argv[0]); X parse_profile(&argc, argv, envp); X X while ((gc = getopt(argc, argv, "rodeg")) != EOF) X switch (gc) { X case 'r': X diffusion = ERROR; X break; X case 'o': X diffusion = ORDERED; X break; X case 'd': X diffusion = DOT; X break; X case 'e': X enhancement = TRUE; X break; X case 'g': X colour = FALSE; X break; X case '?': X errflag++; X break; X } X X if (errflag) X error((char *) 0, "Usage: %s: [-r] [-o] [-d] [-e] [-g] [infile] [outfile]", progname); X X for (stream = 0; optind < argc; stream++, optind++) X if (stream < 2 && strcmp(argv[optind], "-") != 0) X if (freopen(argv[optind], mode[stream], f[stream]) == NULL) X error("%s %s", PR_IO_ERR_INFILE, argv[optind]); X X setup_greylevelmap(); X X /* Load the input rasterfile header */ X if (pr_load_header(stdin, &rh) == PIX_ERR) X error(PR_IO_ERR_RASREAD); X X if (rh.ras_depth != 8) X error("infile is not a 8 bits deep"); X X /* Load the colormap */ X colormap.type = RMT_NONE; X colormap.map[0] = (unsigned char *) malloc(256); X colormap.map[1] = (unsigned char *) malloc(256); X colormap.map[2] = (unsigned char *) malloc(256); X if (pr_load_colormap(stdin, &rh, &colormap) == PIX_ERR) X error("read colormap error"); X X if (colormap.type != RMT_NONE && X (colormap.type != RMT_EQUAL_RGB || colormap.length < 256)) X error("input has unsupported colormap type or length\n"); X X if ((colormap.type == RMT_NONE) && (colormap.length == 0)) { X default_map = TRUE; X map = greylevelmap; X colour = FALSE; X } X if (rh.ras_type != RT_OLD && rh.ras_type != RT_STANDARD && X !(pr = pr_load_image(stdin, &rh, &colormap))) { X fprintf(stderr, "error reading rasterfile\n"); X exit(1); X } X option = diffusion; X if (enhancement) X option += 3; X if (colour) X option += 6; X X /* Write new header */ X rh.ras_type = RT_STANDARD; X rh.ras_depth = 1; X rh.ras_length = mpr_linebytes(rh.ras_width, 1) * rh.ras_height; X rh.ras_maptype = RMT_NONE; X rh.ras_maplength = 0; X X if (pr_dump_header(stdout, &rh, (colormap_t *) 0) == PIX_ERR) X error("pr_dump_header failed"); X X if (rh.ras_width <= 0 || rh.ras_height <= 0) X exit(1); X else { X A = (short **) malloc((rh.ras_width + 3) * sizeof(short *)); X B = (short **) malloc((rh.ras_width + 3) * sizeof(short *)); X for (i = 0; i < rh.ras_width + 3; i++) { X A[i] = (short *) malloc((rh.ras_height + 3) * sizeof(short)); X B[i] = (short *) malloc((rh.ras_height + 3) * sizeof(short)); X } X } X X if (!default_map) X map = colormap.map[0]; X X if (pr) X switch (option) { X case 6: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 0: X error_diffusion_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 0, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X case 7: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 1: X ordered_dither_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 0, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X case 8: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 2: X dot_diffusion_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 0, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X case 9: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 3: X error_diffusion_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 1, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X case 10: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 4: X ordered_dither_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 1, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X case 11: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 5: X dot_diffusion_image(rh.ras_width, rh.ras_height, X map, (u_char *) mpr_d(pr)->md_image, stdout, X 1, mpr_d(pr)->md_linebytes - rh.ras_width); X break; X } X else X switch (option) { X case 6: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 0: X error_diffusion_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 0, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X case 7: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 1: X ordered_dither_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 0, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X case 8: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 2: X dot_diffusion_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 0, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X case 9: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 3: X error_diffusion_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 1, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X case 10: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 4: X ordered_dither_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 1, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X case 11: X map = (unsigned char *) malloc(256); X color_map_3_to_1(colormap, map); X case 5: X dot_diffusion_file(rh.ras_width, rh.ras_height, X map, stdin, stdout, 1, X mpr_linebytes(rh.ras_width, 8) - rh.ras_width); X break; X } X} X color_map_3_to_1(colormap, map) X register colormap_t colormap; X register unsigned char *map; X{ X register unsigned long tmp, i; X X for (i = 0; i < 256; i++) { X tmp = colormap.map[0][i] * 77 + colormap.map[1][i] * 151 + colormap.map[2][i] * 28; X map[i] = tmp >> 8; X } X} X X edge_enhancement(width, height, off) X register int width, height, off; X{ X register int i, j, x, y; X X B[off][off] = A[off][off] * 6 - A[off][off + 1] - A[off + 1][off] - A[off + 1][off + 1]; X B[off][off + height - 1] = A[off][off + height - 1] * 6 - A[off][off + height - 2] - A[off + 1][off + height - 1] - A[off + 1][off + height - 2]; X B[off + width - 1][off] = A[off + width - 1][off] * 6 - A[off + width - 1][off + 1] - A[off + width - 2][off] - A[off + width - 2][off + 1]; X B[off + width - 1][off + height - 1] = A[off + width - 1][off + height - 1] * 6 - A[off + width - 1][off + height - 2] - A[off + width - 2][off + height - 1] - A[off + width - 2][off + height - 2]; X X for (i = 1; i < width - 1; i++) X B[off + i][off + 0] = A[off + i][off + 0] * 6 - A[off + i - 1][off + 0] - A[off + i + 1][off + 0] - A[off + i - 1][off + 1] - A[off + i][off + 1] - A[off + i + 1][off + 1]; X for (i = 1; i < width - 1; i++) X B[off + i][off + height - 1] = A[off + i][off + height - 1] * 6 - A[off + i - 1][off + height - 1] - A[off + i + 1][off + height - 2] - A[off + i - 1][off + height - 2] - A[off + i][off + 1] - A[off + i + 1][off + height - 2]; X for (i = 1; i < height - 1; i++) X B[off + 0][off + i] = A[off + 0][off + i] * 6 - A[off + 0][off + i - 1] - A[off + 0][off + i + 1] - A[off + 1][off + i - 1] - A[off + 1][off + i] - A[off + 1][off + i + 1]; X for (i = 1; i < height - 1; i++) X B[off + width - 1][off + i] = A[off + width - 1][off + i] * 6 - A[off + width - 1][off + i - 1] - A[off + width - 1][off + i + 1] - A[off + width - 2][off + i - 1] - A[off + width - 2][off + i] - A[off + width - 2][off + i + 1]; X X for (i = 1; i < width - 1; i++) X for (j = 1; j < height - 1; j++) { X B[off + i][off + j] = A[off + i][off + j] * 10; X for (x = i - 1; x <= i + 1; x++) X for (y = j - 1; y <= j + 1; y++) X B[off + i][off + j] -= A[off + x][off + y]; X } X X for (i = 0; i < width; i++) X for (j = 0; j < height; j++) X A[off + i][off + j] = B[off + i][off + j]; X} X X int index(x, y, w, pad) X register int x, y, w, pad; X{ X return (x + y * (w + pad)); X} X error_diffusion(width, height, out, edge) X register int width, height; X register FILE *out; X register int edge; X{ X register int err, mono_pad; X register u_short dtmp; X register u_long i, j; X X mono_pad = mpr_linebytes(width, 1) * 8 - width; X X if (edge) X edge_enhancement(width, height, 1); X X for (j = 1; j < height + 1; j++) { X for (i = 1; i < width + 1; i++) { X dtmp <<= 1; X if (A[i][j] > 128) X err = A[i][j] - 256; X else { X err = A[i][j]; X dtmp |= 1; X } X A[i + 1][j] += (err * ALPHA) >> 4; X A[i - 1][j + 1] += (err * BETA) >> 4; X A[i][j + 1] += (err * GAMMA) >> 4; X A[i + 1][j + 1] += (err * DELTA) >> 4; X if (((i - 1) % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X for (i = width + 1; i <= width + mono_pad; i++) { X dtmp <<= 1; X if (((i - 1) % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X } X} X X/* Compute pixel values using error diffusion */ error_diffusion_image(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register u_char *in; X register FILE *out; X register int edge_enhance, pad; X{ X register int i, j; X X for (j = 1; j < height + 1; j++) X for (i = 1; i < width + 1; i++) X A[i][j] = map[*(in + index(i - 1, j - 1, width, pad))]; X X error_diffusion(width, height, out, edge_enhance); X} X X X/* Compute pixel values using error diffusion */ error_diffusion_file(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register FILE *in, *out; X register int edge_enhance, pad; X{ X register int i, j, c; X X for (j = 1; j < height + 1; j++) { X for (i = 1; i < width + 1; i++) { X if ((c = getc(in)) == EOF) { X fprintf(stderr, "error reading raster data!\n"); X exit(1); X } X A[i][j] = map[c]; X } X for (i = width; i < width + pad; i++) X if ((c = getc(in)) == EOF) X fprintf(stderr, "error reading raster data!\n"); X } X X error_diffusion(width, height, out, edge_enhance); X} X ordered(width, height, out, edge) X register int width, height; X register FILE *out; X register int edge; X{ X register int mono_pad; X register u_short dtmp; X register u_long i, j; X X mono_pad = mpr_linebytes(width, 1) * 8 - width; X X if (edge) X edge_enhancement(width, height, 0); X X for (j = 0; j < 8; j++) X for (i = 0; i < 8; i++) X ordered_dither[i][j] = ordered_dither[i][j] * 4 + 2; X X for (j = 0; j < height; j++) { X for (i = 0; i < width; i++) { X dtmp <<= 1; X if (A[i][j] >= ordered_dither[i % 8][j % 8]) X dtmp |= 1; X if ((i % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X for (i = width; i < width + mono_pad; i++) { X dtmp <<= 1; X if ((i % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X } X} X ordered_dither_image(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register u_char *in; X register FILE *out; X register int edge_enhance, pad; X{ X register int i, j; X X for (j = 0; j < height; j++) X for (i = 0; i < width; i++) X A[i][j] = 256 - map[*(in + index(i, j, width, pad))]; X X ordered(width, height, out, edge_enhance); X} X X ordered_dither_file(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register FILE *in, *out; X register int edge_enhance, pad; X{ X register int i, j, c; X X for (j = 0; j < height; j++) { X for (i = 0; i < width; i++) { X if ((c = getc(in)) == EOF) { X fprintf(stderr, "error reading raster data!\n"); X exit(1); X } X A[i][j] = 256 - map[c]; X } X for (i = width; i < width + pad; i++) X if ((c = getc(in)) == EOF) X fprintf(stderr, "error reading raster data!\n"); X } X X ordered(width, height, out, edge_enhance); X} X int weight(x, y) X register int x, y; X{ X return (3 - x * x - y * y); X} X dot(width, height, out, edge) X register int width, height; X register FILE *out; X register int edge; X{ X register int k, u, v, err, w, mono_pad; X register u_short dtmp; X register u_long i, j; X X mono_pad = mpr_linebytes(width, 1) * 8 - width; X X if (edge) X edge_enhancement(width, height, 0); X X for (k = 0; k < 64; k++) { X for (i = reverse_matrix[k] / 8; i < width; i += 8) X for (j = reverse_matrix[k] % 8; j < height; j += 8) { X if (A[i][j] > 128) X B[i][j] = 0; X else X B[i][j] = 1; X err = A[i][j] - (1 - B[i][j]) * 256; X w = 0; X for (u = i - 1; u <= i + 1; u++) X for (v = j - 1; v <= j + 1; v++) X if ((u >= 0) && (v >= 0) && (dot_diffusion[u % 8][v % 8] > k)) X w += weight(u - i, v - j); X if (w > 0) { X for (u = i - 1; u <= i + 1; u++) X for (v = j - 1; v <= j + 1; v++) X if ((u >= 0) && (v >= 0) && (dot_diffusion[u % 8][v % 8] > k)) X A[u][v] += err * weight(u - i, v - j) / w; X } X } X } X X for (j = 0; j < height; j++) { X for (i = 0; i < width; i++) { X dtmp <<= 1; X if (B[i][j]) X dtmp |= 1; X if ((i % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X for (i = width; i < width + mono_pad; i++) { X dtmp <<= 1; X if ((i % 16) == 15) { X putc(dtmp >> 8, out); X putc(dtmp, out); X } X } X } X} X X dot_diffusion_image(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register u_char *in; X register FILE *out; X register int edge_enhance, pad; X{ X register int i, j; X X for (j = 0; j < height; j++) X for (i = 0; i < width; i++) X A[i][j] = map[*(in + index(i, j, width, pad))]; X X dot(width, height, out, edge_enhance); X} X dot_diffusion_file(width, height, map, in, out, edge_enhance, pad) X register int width, height; X register unsigned char *map; X register FILE *in, *out; X register int edge_enhance, pad; X{ X register int i, j, c; X X for (j = 0; j < height; j++) { X for (i = 0; i < width; i++) { X if ((c = getc(in)) == EOF) { X fprintf(stderr, "error reading raster data!\n"); X exit(1); X } X A[i][j] = map[c]; X } X for (i = width; i < width + pad; i++) X if ((c = getc(in)) == EOF) X fprintf(stderr, "error reading raster data!\n"); X } X X dot(width, height, out, edge_enhance); X} END_OF_FILE if test 16965 -ne `wc -c <'src/ras8to1.c'`; then echo shar: \"'src/ras8to1.c'\" unpacked with wrong size! fi # end of 'src/ras8to1.c' fi echo shar: End of archive 8 \(of 10\). cp /dev/null ark8isdone 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 need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0