$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.2 $! On 8-JUN-1993 09:30:31.94 By user HEVANS $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $!+ THIS PACKAGE DISTRIBUTED IN 8 PARTS, TO KEEP EACH PART $! BELOW 100 BLOCKS $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. MAKEFILE.;1 $! 2. UNPACKER.C;1 $! 3. VMS_MAKE.COM;1 $! 4. XANIM.C;1 $! 5. XANIM.DOC;1 $! 6. XANIM.H;1 $! 7. XANIM.OPT;1 $! 8. XANIM.README;1 $! 9. XANIM.REVISIONS;1 $! 10. XANIM_ACT.C;1 $! 11. XANIM_CMAP.C;1 $! 12. XANIM_CONFIG.H;1 $! 13. XANIM_DL.C;1 $! 14. XANIM_DL.H;1 $! 15. XANIM_FLI.C;1 $! 16. XANIM_FLI.H;1 $! 17. XANIM_GIF.C;1 $! 18. XANIM_GIF.H;1 $! 19. XANIM_IFF.C;1 $! 20. XANIM_IFF.H;1 $! 21. XANIM_PFX.C;1 $! 22. XANIM_PFX.H;1 $! 23. XANIM_SET.C;1 $! 24. XANIM_SET.H;1 $! 25. XANIM_TXT.C;1 $! 26. XANIM_UTILS.C;1 $! 27. XANIM_X11.C;1 $! 28. XANIM_X11.H;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE COPY_PREVIOUS(b,n)LOCAL m, s,e;m:=MARK(NONE);MOVE_HORIZONTAL(-b);s:=MARK(NONE);MOVE_HORIZONTAL(n-1);e:= MARK(NONE);POSITION(m);COPY_TEXT(CREATE_RANGE(s,e));ENDPROCEDURE; PROCEDURE ProcessLine LOCAL c,s,l,b,n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF;MOVE_HORIZONTAL(-1);l := LENGTH( s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1);p := p+1; CASE c FROM ' ' TO '`' ['\']: b:=GetHex(s,p); n:=GetHex(s,p+2); p:=p+4; COPY_PREVIOUS(b,n);['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[' ']: p:=p+1; [INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X.SUFFIXES:`20.c`20.o X X# X#`20Makefile`20for`20XAnim X# X X######\0606\0C0C\0D0D X#`20Choose`20your`20favorite`20compiler.\6105GNU`20C X#CC`20=`20gcc X\1404standard XC\1604cc X\7129Machine`20Specific`20Flags X#`20 X#`20-DNO_INSTALL_CMAP`20prevents\D906`20from`20sp\3A06ally`20installing`20a V`20cmap. X#`20`20this`20causes`20problems`20on`20some`20PC`20versions`20of`20X11 X#MACH`20=`20\8111\D82AOptimization`20flags X# X#`20CC XOPTIMIZE=`20-O X\9D03GNU`20C X#OPT1`20\7404fstrength-reduce`20-fcombine-regs`20-fforce-mem`20\0C08addr X#OPT2`20\4305omit-frame-pointer`20-finline-functions X#\8B08\3404O`20$(OPT1)`20$(OPT2)\EC2ADebug`20\E509DEBUG`20=`20-g`20-Wall X\4929`20Give`20the`20path`20to`20your`20include`20directories X# XINCLUDEDIR\6C04I/usr/\2A08\0F0E/X11 X# X#`20Sparc's X#\3C14openwin/\440F\170F\4C06`20or`20\461D3/\4716\1809\9409HP\9118\CD1AR4 X X########\0808\1010##### X# X# XCFLAGS`09=`20`20$(DEBUG)`20$(OPTIMIZE\0C04\7D0A) X\582A`20If`20you`20have`20a`20i486`20box`20running`20Interactive`20UNIX`20v2.2 V.1`20\3404might X#`20\3C05to`20uncomment`20the`20following`20line. X#OTHER_LIBS`20=`20-linet X\A928`20`20Gi\6504he`20path\6E04your`20X11`20libraries X# XXLIBDIR`20=`20-L/usr/lib/X11`20\EC05Sparc's`20 X#\2811openwin/lib\2B05HP\2816\5007R4 X# X\BD29Needed\AD15S`09=`20$(OTHER_LIBS)`20-lXt\0504\B504 XCFILES`20=`20xanim.c`20xanim_x11\0C09fli.\0C08iff.\0C08gi\0C04`5C X`09xanim_txt.c`20unpacker\2609utils.\0E08ac\2504\3409dl\1A09pfx.\0C08se\2604 V\0C06cmap.c X XOF\A90Do`20\A90A\0C08fli.\0C08iff.\0C08gif.o`20\A90Do`20\A909\2608\A906\0E08ac Vt.\340Bdl.\1A08pfx.\0C08set.\0C08cmap.o X X Xxanim:`20$(\B306) X`09$(CC)`20$(CFLAGS)`20-o\3406\240A`20$(XLIBDIR)\0B07S) X X.c.o:\3F13c`20$*.c X Xtxtmerge:`09 X\6414\1F08\0909.c X X X#`20DO`20NOT`20DELETE`20THIS`20LINE\B906.o:\9D06.h\110F_config.\1811x11.\1510. Vc X\1D0A\5310\150D\3F0C\1912\4708fli.\4711\150C_fli.\1919\4708iff.\4711\150C V\0D05\1919\4708gi\4713\150C_gif.\1919\4708txt.\4711\150C_txt.\2E08dl\2D12 V\140B_dl.\1717\4208pfx.\4311\150C_pfx.\1919\4708se\B713\150C_iff\1919\4715 V\0D05\3215set.\3208ac\7913\150C_act.\2E08utils.\3011\170E\0F07\3408cmap\3312 V\160D\0E06c Xunpacker\1904\0C09c Xtxtmerge\440A\120F_gif\160D\0A08.c $ call unpack MAKEFILE.;1 - 1278267650 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X/*--------\0808\1010\2020\0606* X`20*`20unpacker.c`20Convert`20data`20from`20"cmpByteRun1"`20run`20compression. V`2011/15/85 X`20*\4B04By`20Jerry`20Morrison`20and`20Steve`20Shaw,`20Electronic`20Arts. V\3604This`20software`20is`20in`20the`20public`20domain\2A04 X`20*`09control`20bytes:\1204`20`5B0..127`5D`20`20`20:`20followed`20by`20n+1 V\2806`20of`20data\4504\3003-1..-1\3204\300Ebyte`20to`20be`20repeated`20(-n) V\4703time\AE05`09`20-128`20\6C03\6F05NOOP\9B07\C806version`20for`20\C504Commod Vore-Amiga`20computer\FA05Modified`20\2E04use`20with`20Unix X`20*--------\0808\1010\2020\0606*/ X#include`20 X#define`20LONG`20int\1109UL\1204unsigned`20\1B0CBYTE`20char X\2D09\1305\2D09\1C0DSHORT`20shor\5D0B\1506\3109\1E0EWORD\1306\920E\1805\340E V\2105\2209TRUE`201\0F09FALSE`200 X X X X/*-----------`20UnPackRow`20-\170B\0C0C\1818*/\6E0AUGetByte()`09(*source++) V\1F0APu\1F06c)`09(*dest++`20=`20(c)) X X/*`20Given`20POINTERS`20to\0C08`20variables,`20unpacks`20one`20row,`20updating V`20the`20\7506 X`20*`20and`20destination`20pointers`20until`20it`20produces`20dstBytes`20bytes V.`20*/ X XLONG`20UnPackRow(pSource,`20pDest,`20srcBytes0,\3E090) XBYTE`20`20**p\2E08**pDest;`20`20L\5004*s\370A*d\3808;`20 X`7B X`20`20`20`20register`20B\4804*source`20=`20*\5007;`20 X\2713dest\1603\2704Dest;\240E\7805n;\3913c;\2A13\A108\4F04\E413\1704\B80A V\4005\3705error`20=`20TRUE;`09/*`20assume`20\1806until`20we`20make`20it`20thro Vugh`20the`20loop`20*/ X\4D05while(\6F0A>`200`20)`20`20`7B X`09if`20(`20(\9F09-=`201)`20<`20\1F06error=1;`20goto`20ErrorExit;`7D\5505`09n V\9A03UGetByte()`20`26`200xff;\7206\5905!(n`20\160480))\6D04\1904n`20+=`201; X\0D05\7E12n)\7E0F2;\7E12\3C0B\D309\3C143;\3C17do`20`7B`20`20UPutByte(\C50A); V`20`20`7D`20while`20(--n`20>`200);\3506`7D X\DA06else\7E05n`20!=\DE06\DD0A=`20(256-n)`20+`20\E61A1)\AA0F4;\E63A5;\3C17c V`20=`20\DB0A\8D07\FB0Fc)\F21D`09`7D\F405error\4E03FALSE;`09/*`20success!`20*/ X\2303\7C09: X\3004*pSource\3303source\6503*pDest\1203dest;`20\2806srcBytes0`20=`20s\0C07; V`20*d\F007\1704\0C08; X\3204return(error); X\A606 $ call unpack UNPACKER.C;1 - 1547843592 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X$! X$`20`20`20define/nolog`20sys`20sys$library\2112x11`20decw$include,s\2E0C\5206D VEFINE/NOLOG`20C$INCLUDE\3706examples,d\4519\4210VAXC\4509\0A09\6D06CCOPT`20= V`20"/\3306=(VMS)" X$`20LNKO\1B07MAP"\2F07ALL`20MAKE`20XANIM.OBJ`20"CC`20''CCOPT'`20xanim"`20- X`09`09xanim.c\1306.h\0806_config.\0F08x11.h`20mytypes.h X\6311_X11.\6716_X11\6B04\F003`20`09`09m\4408\710F\6206\0C0Ac X\6412FLI.\6417FLI\CF06\6018fli.\0C0C\6014IFF.\6017IFF\601Eiff.\0C0C\6014GI V\6019GIF\601Egi\600Agif.c`20\6113TXT.\6117TXT\611Etxt.\0C0C\C114DL\5F18DL V\5E1Edl\0B0B\5C15pfx.obj`20\5D13PFX"`20- X`20`20`20`20\0404\0808\620Epfx.\0C0C\6414SET.\C117SET\6422iff.\0C0Cc`20\0C06se Vt.\1808set.\7C14AC\7C19ACT\7C04`09`09mytypes.\4C07\5409ac\600Aact.\6014UTILS. V\6217UTILS\641Eutil\1609\0E07\6814CMAP\6705\680E\1D0A\6706\5D0Ecmap\4E0FUNPACK VER\B312\1A08\B010unpacker.c X$!`20\4A0ATXTMERGE\4A12\1A08\4A04!`09`09txtmerge.c X$! X$! X$! X$\E110.EXE`20"LINK`20''LNKO\DE09/OPT"`20*.OBJ\3D09EXIT\4D0B! X$MAKE:`20SUBROUTINE`20`20`20!\0E0BTO`20CHECK`20DEPENDENCIES X$`20V`20=`20'F$Verify(0)\E304P1\1503What`20we`20are`20trying`20to`20make\23052 V`20=`20Command`20\1807`20it X\1B043`20-`20P8`20`20\4205it`20depends`20on X$ X$`20If`20F$Search(P1)`20.Eqs.`20""`20Then`20Goto`20Makeit X$`20Time`20=`20F$CvTime(F$File(P1,"RDT")) X$arg=3 X$Loop: X$`20\F703\0303Argument\3C03P'arg\1909If`20\1C09\7913Ex\7705\2C06El=0\59062: V\1509File\9205Element(El,"`20",\5608) X$\6B0A\2D05\6707`20"\680Cndl X\AD09\5407""\6E063:\1B09OF\1B06AFile\3111F$Search(File\790D\2206\E109.Or. V\140D\5806\900ANextEl\BB0D$CvTime(F$File(AFile,"RDT"))`20.Ges.`20Time\450BMake Vit\4509\1405Loop3 X$NextEL:\1C09El\BF03El`20+`201 X\30112 X$End\2E05arg=arg+1 X$`20If`20arg`20.Le.`208`20\770ALoop X$`20\0C05Exit X$ X$\8B06\4204VV=F$VERIFY(0) X$`20write`20sys$output`20P2 X$`20'\0605VV='F$Verify(VV) X$Exit\4704If`20V`20\7405Set`20\2206 X$ENDSUBROUTINE X $ call unpack VMS_MAKE.COM;1 - 38500210 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim.c X`20*\0E04Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#define`20DA_REV`202.50\140CMINOR_\1A05 X X/*\6B04Any`20problems,`20suggestions,`20solut\0B06anims`20to`20show`20off,`20e Vtc`20contact:\8006`20podlipec@wellfleet.com\9D0Ainclude`20"xanim.h" X\1309 X\170AStringDefs.\180Ehell\130Esys/signal\1806fndef`20VMS\240Ftime\4E06endif X\1E0Actype.\550C\AA06_x11.h" X Xvoid`20TheEnd(); X\0F0B1(\1008Usage(\0E0D_Quick\1409ShowAnimation(\160Dct\1307LONG`20Determine_A Vnim_Type\2F09XA_Cycle_Wait(\1611It\590Atep_File_Next\1713Prev\170Frame\2F14 V\1805\3012\B806\310EFree\1907s(); XXA_ANIM_HDR`20*Get_Anim_Hdr(\4B14\6408LONG\D604Time_Read\EB0CTime_Init\1511Che Vck(\160BImage_To_Pixmap(\1B0Cnstall_CMAP(); XUL\7407Mapped_To_Display(\1E0CRead_Int(); Xfloat`20\1508Float(); X\630711_Setup_Window(\7C0911_Init\9D07Struct\1E0DPre_Setup\1609ACT_Make\3406s( V\1808UTIL\B10B\0A06\1E18Bitmap(); XUBYTE`20*UTIL_Scale_\3A0A\1C12\380A\5605CMAP_Manipulate_CHDRS\1E0EExpand_Map V\AB05\1A06IFF_Read_File(\3008IFF_Buffer_Action(\1A0CDelta3\13125(\1311l(\1311J V(\130CInit_DLTA_HDR\1A0DUpdate_\1C15\9C07HAM6\18178(\1808GI\E207Anim\1609TXT_ V\F812Fli_\1613LI_Decode_BRUN(\1813LC\16167(\1708DL\5A13PFX_\1612SE\9C0F XLONG`20Is_SET_\1508\1408IFF_\1410GIF_\1410TXT_\1410FLI_\1410DL_\1310PFX_\8C09# Vifdef`20VMS X/*`20`20`20\0303 X`20\0907Provide`20the`20UNIX`20gettimeofday()`20function`20for\4204`20C. X\3C08The`20timezone`20is`20currently`20unsupported. X`20*/ X Xstruct`20timeval`20`7B X\4104long`20tv_sec;\110Dusec; X`7D; X`20\390C\6805\3A06int`20tz_minuteswest;\180Cdsttime\4307\1504\D70D`20tp,`20tzp V)\9710*tp;\7211*tzp; X\7805\A005curr_time`5B2`5D;\1503/*`20Eight`20byte`20VAX`20time`20variable`20*/ V X\3B08jan_01_1970`5B2`5D`20=`20`7B`200x4BEB4000,0x7C9567`7D`20\CD05\3205diff V\6804\1109result\100Avax_sec_conv\510310000000\F804\2303\2E06\1803SYS$GETTIM( V`20`26c\C208`20)\2810LIB$SUBX\260C,`20`26j\B90A\0E03diff\3A08if`20(`20tp`20!= V`200)`20`7B X\1303\0303\510EEDIV\5103\AB0C\4607, X\3007\0707\0C0C`26(tp->tv_sec),\0F0Ausec)\BA05\2806\170B\7003\0E0C/`2010;`20 V`20/*`20convert`201.e-7`20to\09056`20*/\4504`7D X\C809zp`20!=\C804\0B04->tz_minuteswes\CE040;`20\1908dsttime=0;\4003\4204return V\46030); X`7D X#endif X X X/* X`20*`20Global`20X11`20display`20configuation`20variables X`20*\3004These`20are`20set`20by\3A04_Pre_Setup(\FF04\2804/ X XLONG`20x11_depth;\100Aclass;\100Abytes_pixel\160Citmap_unit\160E_order\500Cmap V_flag\1410size\140Bdisp_bit\7C0Ccmap_type\280Cepth_mask;\3D0Elay_\2C0Fred_ V\2A0Fgreen_\150Fblue\1410red_shif\E00C\3D06\1610blue_\1510red_\CE0F\3E06\150F V\3D05\1411ac\8B0Cwhit\D70Cverbose_flag\1707pod_max_colors\2C08a_user_visual; XU\4209kludge_1; X X/* X`20*`20Each`20animation`20is`20broken`20up`20into`20a`20series`20of`20individu Val`20actions.\4404For`20example,\3003gif`20image`20would`20become`20two`20a V\3606,`201`20to`20setup`20the X\4503colormap`20and`20\1F05display`20the\5006\6D04\2B04XA_ACTION`20is`20define Vd`20in`20xanim.h.`20\2807\6E06_cnt\2904a`20global`20variable`20that`20points V`20to`20\6804next`20unused`20\3F06\E205Currently,`20individual`20routines`20ac Vcess`20this.`20This`20will`20chan\B60A\8E07star\9007\8909passed`20\8407Read_An Vimation\6609,`20It\4804keeps`20track`20of`20\32041st`20\5F06`20avail\DE06o`20 V\3B07\8207/ X X/\8A06nim_type`20is`20one`20of`20IFF_,FLI_,GIF_,TXT_,FADE_ANIM.`20\C407merged_ Vanim_flags`20is`20\8204or\4504all`20anims`20read`20in.`20FLI's\1507need\4604on Vly`201`20buffer.\7B04\210B`20two.`20This`20allows`20software\D204allocate V\4704for`20\7C04worst`20case\E909ULONG`20xa\AA06type; X\1409\C511; X X X/*\5304cmap`20keeps`20track\D504\6304current`20colors\8904\1604screen\7509 V\6005cmap_true_to_332; X\1712gray\180Cluma_sort;\2D0Dy_to_1st_flag\1B0Cmap_t\1B1Bo_one_\1B10play_nice; V\150Bforce_load\1607xa_allow\2A11hi\6F13dither_typ\2C0Dmedian\1717_cache\1813b Vits; XXA_CHDR`20*xa_chdr_start\1813cur;\1612now;\1612first; XUSHORT`20*cmap_\8707UL\8809cache_siz\1714\9E06\1711mask\710B\1A0Bchdr; X\7206cmap_floyd_error; X X XColorReg\A606map`20=`200\6208`20x\1406_size,x\0D07off;\2108*xa_map\310C\300C V\2F09 X/* X`20*`20Global`20variable`20to`20keep`20track`20of`20Anim`20type X`20*/ X\5405filetype\6408xa_title_flag; Xchar\1409`5B256`5D; X X X\6F15s`20\7011current`20width,`20height,`20num\1E05olors`20and X\4E03number`20of`20bit`20planes`20respectively.`20 X`20*\2A04the`20max_\E90Aare`20used`20for`20worst`20case`20allocation.`20A V\2406ful`20\2604Anims X\4E05at`20have`20multiple`20image`20sizes.\7407image_size\B004\7F05\130Cre`20 V\0F05x`20\2B07y,`20etc\3E04/ XULONG`20xa\320B; X\1509\4B0E\190B\5106,x\230Bx;\1F0Fy,\1F0Cy;\1F0Fd; X X/*\C004Scaling`20Variable\D706/ X\310Aneed_to_scale; Xfloat`20xa_scalex,\0B09\650Callow_lace\1511resizing;`20`09`09/*`20allow`20wind Vow`20\1C08\8104\3709disp_y\6805max_\0F06\570Bdisp_\8806\2009x;\200Fsiz\8B0C V\2909\180D11_display_\5004\0F0By;\AC04max`20d\1206`20size\A70B11_\C406\3A08 V\0E07\3906current`20\E707\3C0E*xa_scale_row_buff\A90B\190A\AA06 X/*`20 X`20*`20These`20variable`20keep`20track`20of`20where`20we`20are`20in`20the`20an Vimation. X\3F03cur_file`20`20ptr`20to`20\2304header\4104\0E04\B408anim`20file.`20\3A09lo Vop\7405s`20\7509how`20many`20times`20we've`20looped`20a\4106\4009rame\4010whic Vh`20frame(action)`20we're`20\B406\3D04xa_now_cycling`20and`20cycle_cnt`20a V\2B03used`20for`20color`20c\2906\3F08file_is_started`20indicates`20whether`20t Vhis`20is`20the`201st\CC05\CB14\4E04or`20not.`20Is`20\7705to`20initialize`20var Viables`20\A604resize`20window`20if`20necessary.\4B04 X`20*/ XXA_ANIM_HDR`20*cur_file`20`20`20=`200; X\1D0Dfirst_\1F05\1D05LONG`20cur_floop,cur_frame\1A07xa_cycle_cnt;\5103\0303/* V`20keeps`20track`20of`20number`20of`20cycling`20actions`20called`20*/ X\4E08now_\2607\5005/*`20indicates`20that\4409is`20n\F104n`20progress\480Canim V\490C\4804f`20set,`20allows`20c\4807for`20animat\9305\4408file_is_started; X/* X`20*`20Image`20buffers.\1204im_buff1`20is`20used`20\5104double\2807ed`20anims( VIFF)\3405xa_disp_buff\C905eeded`20when`20the`20display`20is`20of`20a`20di V\4805nt\5D04mat`20than\2A04\4D04\6C10images.`20(like`20HAM`20or`20TRUE_COLOR V\8205\3804pic`20is`20a`20pointer`20to\CD080`20or`20\D909during\680Eing\4807/ Xchar`20*\3B08,*\3908,*pic,*\ED0C,*xa_scale_buff; XULONG`20\230C_size,\270D_size; X X/\B805Variables`20for`20statistics\8F08\5208time_start; X\140Dend;\120Eoff; X\1208no_disp\230Fflag\130Fav\110Fnum; Xstruct`20timeval`20tv; X X/*`20 X\BA03Global`20flags`20that`20are`20set`20on`20command`20line. X\C90Cbuffer\820Cfade_flag,fade_time\C00Cresize\B30Foptim\1712pixmap\150Fdith V\720Exa_pack_\280Febug\0F0Averbose; X\1209loop_each_\7610ngpong\170Fjiffy_\1406\1509anim_flags;\140Eholdoff;\160Est Vatus\150Ause_dept\8308 X X/* X`20*`20act`20is`20a`20global`20pointer`20to`20the`20current\2704ion. X`20* X`20*/ XXA_ACTION`20*act; X X\4D06This`20function`20(hopefully)`20provide\6904clean`20exit`20from`20our`20c Vode\5D04/ Xvoid`20TheEnd() X`7B X`20`20XA_ANIM_HDR`20*tmp_hdr; X X`20`20if`20(cur_file`20!=0`20) X`20`20\3204`20`20\1709=`20first_file; X\1B04\100A->prev\0B07next\33080;`20`20/*`20last`20file's`20next`20ptr`20to`200 V`20*/ X`20`20`7D X`20`20while(`20\860B`200\860AFree_Actions\AA09->acts);\2205\CF07\7403\1F0A V\8A09\2306\E60C->name)`20free\1510\DE07\1A0C\1407\9E09=`20\7007\1804\BF04 V\5C04im_buff0\5607\0F09\2404\200B1)\200D1)\2008xa_disp_buff\2407\130D\280Bscal Ve_\290E\140B\2A11row_\2E14\1809\320Bcmap\280Acmap)\1E08theDisp)`20XtCloseDispl Vay(\1808\280BImage)`20 X`20`20`7B X`20`20`20`20\1308->data`20=`200\2D04`20`20XDestroyImage\390A\1D04`7D X`20`20whil\8806hdr_start)\5409XA_CHDR`20*tmp\4E06tmp\5B03\2F0D\1906\130D\2310- V>next\2906\BF05mp->cmap)`20free(t\1009\240F\230F\220A\1408\C809exit(0); X`7D X Xvoid`20Hard_Death() X`7B\2203XA_ANIM_H\D107_hdr\3E04\6D04cur_file`20!=0`20)\1503\3104`20`20\1709= V`20first_file\8107\1009->prev\0B07next\33080;`20`20/*`20last`20file's`20next V`20ptr`20to`200`20*/\BD07while(`20\860B`200\860AFree_Actions\AA09->acts\FF05 V`20`20\CE07\7403\1F0A\8A09\2306\E60C->name)`20free\1510\DE07\1A0C\1407\9E09= V`20\7007\1804\BF04\5C04im_buff0\5607\0F09\2404\200B1)\200D1)\2008xa_disp_buff V\2407\130D\280Bscale_\290E\140B\2A11row_\2E14\1809\320Bcmap\280Acmap)\1E04whil Ve(xa_chdr_start) X`20`20`7B X`20`20`20`20XA_CHDR`20*tmp\2D04`20`20tmp`20=`20x\2F0C\1906\130D\2310->next V\2906\8F04tmp->\910B\100A\240F\230F\220A\1408\0F05`7D X`20`20exit(0); X`7D X X/* X`20*`20just`20prints`20a`20message`20before`20calling`20TheEnd() X`20*/ Xvoid\12071(err_mess) Xchar`20*\1008; X`7B X`20fprintf(stderr,"%s`5Cn",\3309; X`20\5908\9105void XUsage_Quick() X\4503\4611Usage:`5Cn"\D605\1E10\F603XAnim`20`5Boptions`5D`20an\0F04\1110... V`20`5D`5C\4620-h\0B03for`20more`20detailed`20help.`5C\3D07\C50C\C40BDefault_TF V(flag,justify) XULONG`20f\140B; X\E904if`20(\1107`20==`201)\9714\0303\0606\7C06\3404flag\3104TRUE\3413default V`20is`20on\B509else\2C1Eff\2D07`7D X\D714Num(num,\D70F\130B\D63A\981C%ld.`5Cn",num\9C06/* X`20*`20This`20function`20attempts`20to`20expain`20XAnim's`20usage\9604the`20co Vmmand`20line\4604wasn't`20correct. X`20*/ Xvoid`20Usage()\D204\9D10Usage:`5Cn`5Cn"\BD04\1F10xanim`20`5B`20`5B+`7C-`5Dop V\9403...`5D`20animfile\1A04\1C05opts\170A`5D`20...`20`5D\5417\1707if`20(DEFAUL VT_PLUS_IS_ON`20==`20TRUE)`20 X`20`20`20`20`20`20\3E10A`20+`20turns`20an`20option`20on`20and`20a`20-`20\1B06i Vt`20off.`5C\6A06else\4813\2D08\4813\6308\480E\C917\1710Options:\3619`20`20C V`5Bcopts`5D\0A03olor`20SubMenu\3217`20`20`20`20\03033`20\0503Convert`20True V\3C06anims`20to`20332(StaticColor).\4F07Usage_Default_TF(DEFAULT_TRUE_TO_332,1 V\791Ba`20\0503Remap`20`20all`20image\7305single`20new`20cmap\7221CMAP_MAP_TO_O VNE,\761Cd`20\0503Use`20floyd-steinberg`20dithering\6F19\700EDITHER_TYPE==C V\120BFLOYD)\851Df`20\0503Forcibly`20remap\F8041st`20cmap\F02C1ST,\6B1Cg`20 V\0503Convert`20TrueColor`20anims`20to`20gray`20scale\F819\7708TRUE_TO_GRAY V\741Dh`20\0503Use`20histogram`20to`20aid`20in`20c\8005reduction.\ED25HIST_FLAG V,\781Cl`20\0503Luma-sort`20new`20cmaps.\6425LUMA_SORT,\641Cn`20\0503Be`20Nice: V`20allocate`20colors`20from`20D\6106\7C05\7B26PLAY_NICE,\7B1Ct`20\0503Try`20ma Vpping`20to`20one`20\E808\6C26TRY_TO_1ST\6D16`5Cn`20`20M`5Bmopts`5D\0A03edian-C Vut`20SubMenu`5C\6506\A417a`20\0503compute`20box`20color`20from`20average`20of V`20box\AE19`20(\B00DMEDIAN_TYPE==C\120BSUM)\C316\8C07c`20\8C15as`20center`20 V\8947CENTER\8C1Eb#\0503Truncate`20rgb`20to`20#`20bits.\8015Num(CMAP_CACHE_MAX_ VBITS\651Do`20\0503Use`20remapping`20cache.(uses`20more`20memory)\7419\F314 V\8305\7A16`5Cn`20`20S`5Bsopts`5D\0A03caling`20and`20Sizing`20SubMenu`5C\7006 V\B917i`20\0503Half`20the`20height`20of`20IFF`20anims`20if`20Interlaced.\BE15TF V\BD09ALLOW_LACE_FLAG,\BB15\7C07\C103`20`20Prevents`20window`20from`20res\C406t Vo`20match\8C05\7D06`20 X\7E1ANORESIZE\7C22r`20\0503Allow`20user\6904resize`20anim`20on`20the`20fly. V\F226RESIZIN\751Es#\0503Scal\6607by`20floating`20point`20#\6F08\4217h#\420Ehor Vizontally\4F33v#\4F0Evertic\4D37x#\4D04et\4B06width`20to`20integer\3F21y# V\3F0Cheight\4025`5Cn`20`20Normal`20Options\691Eb`20\0504uffers`20images`20ahea Vd`20of`20time.\4005`20 X`20Usage_Default_TF(DEFAULT_BUFF_FLAG,1)\691Ac`20\0503disable`20looping`20for V`20nonl\0F07iff`20anims.\7521IFF_LOOP_OFF\781Dd#\0504ebug.`200(off)`20to`205(m Vost)`20\8104level`20of`20report\7C17Num(\7D08DEBU\EE1EF`20\0504loyd-Steinberg V\FE03ther\E904when`20needed.\6F05\EA1BDITHER_FLA\731Ej#\0503#`20is`20number V\D204milliseconds`20between`20frames\7808\4E10`09`20\4D04if`200`20t\A604de V\9205`20depe\4604on\1804`20animation\C016Num(\C108JIFFY_\C021l#\0504oop`20anim V\CA03times`20before`20moving`20\7024LOOPEACH\7323p#`20`20ping-pong`20\783FPING VPONG\7822N`20\0504o`20display.`20Useful`20for`20benchmarking\7408\4717o`20 V\0503turns`20on`20certain`20optimizations.`20See`20readme\4E06`20 X\C30FTF\C209OPTIMIZE\C222p`20\0503Use`20Pixmap`20instead`20of`20Image`20in`20X V11\7322PIXMAP\7122r`20\0503Allow`20color`20cycling`20for`20IFF`20single`20imag Ves.\7805\771BCYCLE_IMAG\ED23R`20\7C1Fanim\7428ANIM\7322v`20\0504erbose`20mode. V\5E05`20 X\5F1AVERBOSE,\5715\9C07\1710Wind\D605mmands\C308\3E27\AC07`20q\0505uit.\291FQ V`20\0504\2923g`20\0503Stop`20color`20cycling.\371Fr`20\0503Restore`20original V`20Colors(useful`20after`20g).\4C1Dspace`20`20toggle.`20starts/stops`20animati Von\8F20,`20\CB04o`20back`20one`20frame`20within`20anim\4220.`20\4206forward V`20\4535<`20\870Bto\CD06`20of`20previous\4625>`20\8B0E\490Cnext\451D\1706 X`20exit(0); X`7D X Xint`20main(argc,`20argv)\1505argc; Xchar`20*argv`5B`5D; X`7B X`20c\1105filename,*in; X`20LONG`20i,j; X X/*`20 X`20*`20Initialize`20global`20variables. X`20*/ X`20theDisp`20=`20NULL; X X`20im_buff0\13030;\0F091`20\0F06xa_disp_buff\1313_s\6C04\1809scale_row_\300E V\180A\3014\2C14\5D13imagex\100Fy`20\950E\200Bdisp_\200Bscale\20041.\120C\2204 V\1209need_to_scale\3B0Amax_\7F10\1409\630Bmax_\8710\1409\280Banim_flags`09`09 V\290Aerged_\1C0B\1B05 X`20first_fi\9205cur_\0B07\1D05\4E08holdoff`09=`20TRUE\670Bstatus\6804XA_UNSTAR VTED\3B07buffer_flag\2204DEFAULT_BUFF_FLAG;\2605pack\2411PACK\240Bnoresize V\2806\270ANORESIZE\2B0Bverbose`09\260BVERBOS\B707debu\6B0DDEBU\3C07anim_cyclin V\660CCYCLE_ANIM\680Ballow_lace\4D0CALLOW_LACE\2B11resiz\590E\2E06RESIZIN\2D07o Vptimi\EB12OPTIMI\EB0Dpixmap\2906\2A0BPIXMAP\280Bdither\2811DITHER\280Bloop_eac Vh_\7C0FLOOPEACH\7C0Dngpong\2B10PINGPONG\2B0Bjiffy_\7E10JIFFY_\260811_verbose V\5110X11_VERBOS\FB0A11_kludge_1\5304FALSE; X`20cmap_luma_sort\6D0CCMAP_LUMA_SORT\2B08try_to_1st\7510CMAP_TRY_TO_1ST\3108 V\3505\311AMAP_T\3114on\D711\310CON\BE09play_nice`09\2C10PLAY_NIC\2B09force_loa Vd\2B03FALS\1A04xa_allow\4409TRUE\3208hi\B908\5D10HIST_FLAG;\2B07dither_type V`09\2C0FDITHER_TYPE; X\E808edian_\2F14MEDIAN\2F07\2E0Dcach\2F18CACHE;`20 X\310Dbits\30036;\1707floyd_error`09=`20256;\3108\5B06\15030;\120C_siz\7204 V\160F\5807\160Fmask\1612chdr\1606 X`20xa_title_flag\6E04\CA08XA_TITLE_FLAG;\2A06chdr_start\9808\1508cur`09\130Fno Vw`09\130Ffirs\3B0Dmap\0F0F\DF06\140Foff`09\130A\3505\0F0D\3510\3412time\BA11 V\1505end`09\130Fav`20`09\130Fnum`09\130Ano_dis\BB05FALSE;\290Aflag\180Cpod_max V_colors\4407 X`20XA_Time_Init()\1204if`20(DEFAULT_IFF_LOOP_OFF`20`20==`20TRUE)\6404anim V\6405s`20`7C=`20ANIM_NOLOP;\410ECYCLE_IMAGE_FLAG\4420CYCLE; X X/*`20What`20rev`20are`20we`20running X`20*/ X`20fprintf(stderr,"XAnim`20Rev`20%2.2f.%ld`20Beta`20by`20Mark`20Podlipec`20(c) V`201991,1992,1993`5Cn",DA_REV,DA_MINOR_REV);\8705quick`20command`20line`20chec Vk. X\8905\ED04argc<2)`20Usage_Quick()\3E06setup`20for`20dying`20time.\3A06signal(S VIGINT,Hard_Death); X X`20/*`20pre-check\3F05user`20visual`20\3E04xa_user_v\1306=`20-1; X\2A04(i=1;i`20`208 V\34158;\AF0Fdefault:`20exit_flag\2603TRUE\1F04`7D X\2203`20`20\0705`7D X\0B04\0404`20`20\4007\0F08\F30A\230A\0606xa_buffer_\5A07opt_on;`09j++;\8708 V\470Ec'\4712\E404\3A06==TRUE)`20xa_anim_flags`20`7C=`20ANIM_NOLOP;\3F11el V\5903\320E`26=`20(`7EANIM_NOLOP); X`20`20`20\0303\0606\0404j++;`20break\1C0Acase`20'd': X\2E15xa_debug`20=`20XA_Read_Int(in,`26j\6213if`20(\3309<=`200)`20\420B0; X`09`09b\8014f'\8017fade_time`20\812A\340A\8206fade_flag\8306\3310else`20\240C1 V;\A718F'\A712xa_dither_\3F07opt_on;`09j++;\4716h'\4712Usage();`20b\3214j' V\3212j++;\A903\F204`20(in`5Bj`5D`20>=`20'0')`20`7C`7C\1208<=`20'9')`20) X`09`09`7B`20/*`20note`20j0`20=>`20j1`20because`201`20is`20the`20fastest`20*/ X\7010\EB05jiffy_\EA07XA_Read_Int(in,`26j)\B80A\360A\A104\3A0E<=`200)\4E111; V\A403`7D X`09`09else`20\1E100;\BE04off`20\9B13break;\1709case`20'l':\4D03j++;`20 X`09`09\8604in`5Bj`5D`20==`20'p') X`09`09`7B X`09`09\D605pingpong\6D08opt_on;`20j++;\950F\2B10FALSE;\9211xa_loop_each_\2B07X VA_Read_Int(in,`26j)\3812\A704\3C11<=0)\52151;\9A03\FD15N'\FD04xa_no_disp`20 V\D509\AB14time\FC0F`09j++;\5C16o': X\4513optimiz\4910`20j\4919p'\4915pixmap\4714\D303if`20(\1306==TRUE)`20xa_anim V\3005s`20`7C=`20ANIM_PIXMAP\3204else`20\250E`26=`20`7EANIM_PIXMAP; X`20`20`20\0303\0606\0404break;\1709case`20'P': X\2910j++;`20pod_max_colors`20=`20XA_Read_Int(in,`26j)\6312if`20(\390F<=`200) V`20\4E110; X`09`09b\9214r'\9212\5804opt_on`20==`20TRUE)`20`20`20xa_anim_flags`20`7C=`20ANI VM_CYCLE;\4311else`20\100B\3D0E`26=`20(`7EANIM_CYCLE); X`20`20`20\0303\0606\0404j++;\1511break;\1709case`20'R': X\2910xa_anim_cycling`20=`20opt_on;`20j++;`09b\4814S': X`09`20`20`7B\0504`20`20ULONG`20exit_fla\4204FALSE;\1E06j++; X\0A05while(`20(\2A09==FALSE)`20`26`26`20(j`202)\4B112;\850Fv'\CA15verbose`20\C824X': X`09`09X11_Show_Visuals()\341CV'\3404`7B X`09`09`20`20ULONG`20t;\0D05j++;`20t\F516`20/*`20ignore`20*/ X`09`09`7D X`09`09\5E15-'\D512\C806\5903(DEFAULT_PLUS_IS_ON==TRUE)?FALSE:TRUE;`20\BC1A+' V\5E36TRUE:FALSE\5E16default:\5D11Usage_Quick();\1F08`7D`20/*`20end`20of`20opti Von`20switch`20*/ X\2211loop`20through\2F07s`20\2906\270Cif`20-\1707else`20\0904/*`20If`20no`20hy Vphen`20in`20front`20of`20argument,`20assume`20it's`20a`20file. X\8504\4D06`7B X\9205filename`20=`20argv`5Bi`5D; X\1A06if`20(`20(x11_display_type`20==`20XA_MONOCHROME)`20`7C`7C`20(xa_pack_flag V`20==`20TRUE)`20) X\4A05`20`20xa_use_depth_\2406`20FALSE; X\2005else\2C1CTRUE\2B07\FF06default`20is`20FLI\D408`20`20cur_file\3403Get_Anim V_Hdr(c\1807,f\F007);\3106xa_anim_\DC06`20Determine\3B06Type(f\330F\4C08-> V\3A0C\490C\2916flags`20\2A0Aflags\2B07if`20(x11_display_\5506=`20XA_MONOCHROME V)\3B04optimize_flag\4E03FALSE;\4606switch(x\8B0B) X\1A05`7B X\0705\9504ase`20IFF_ANIM: X`09`20\7C06a_verbose)`20fprintf(stderr,"Reading\3504`20File`20%s`5Cn",filename V);\4504IFF_Read_File(f\1C07,cur_file\2506\6A07buffer_flag)`20IFF_Buffer_Action V(c\340Delse`20xa_merged\D906flags`20`7C=`20ANIM_D_BUF\2C05break;\EB0EGI\EB33GI VF\EB1AGIF_Read_Anim\EB18\8B14TXT_\8B31TXT\8B1ATXT_Read_File\8B2CFLI_\8B31FLI V\8B1AFli_\8B21\6A07buffer_flag==FALSE)`20xa_merged_anim_flags`20`7C=`20ANIM_S_ VBUF_D\CF19DL\CE32DL\CD1ADL_\CC21\8814PFX_\8931PFX\8A1APFX_\8B35SET_\8B31SET V\8B1Axa_pixmap_flag`20=`20TRUE;`20/*`20POD`20TEMP:`20setters`20are`20pix'd`20f Vor`20now`20*/ X\4403SET_\CF28/*\D20ERLE_\D231RLE\D21ARLE_\8E28*/ X\8E08default:\1E04\7810Unknown`20or`20unsupported`20animation`20type`5Cn" V\5C0D\5706`7D`20\0907\F90A*`20Setup`20up`20anim`20header. X\1F08\9408\B208->loop_num`20=`20xa_loop_each_flag;\2E07`7B X`09ULONG`20tmpx,tmpy; X X\DD08tmpx\3D06image\0C04\5E0A\1306\4808\2D05y`20\2D0A\0C04\2D0Fy; X\2D08if`20(\570A>`20xa_max_\1006)`20\0F0D\820C\4216y`20\420Ey)\0F0E\970C\DF0B V`20/*`20handle`20selectable`20image`20size`20*/\6F0D\7105disp_x`20!=`200)`20 V`26`26`20\1409y`20\1406)`20 X`09`7B X`09`20`20tmp\BC07\3406;`20tmp\8C07\3206; X`09`7D X`09else\CF08\5E0D/*`20if`20just`20x,`20then`20adj\0F04y`20*/ X\6617\1507\6904(xa_\F606`20*\220A)`20/\0D04image\2F04\8314\CD08\830By,\830Dx V`20\830C\D710\9809\8309x`20*\220A\830C\2F04\8307\5004`20`20`20`20\0404\0303 V\7D03handle`20any`20scaling\7704\230A\6608ULONG)((float)(tmpx)`20\7105scalex); V\9404\E204\3206\DD05\3D07\A209; X\590D\D404\5913y)`20\590Ay)\590Cy`20=\5908\3D04\E20E\D919IFF`20laced`20images V`20\E20B\5904`20(xa_allow_lace==TRUE)`20`26`26`20(cur_file->anim_flags`20`26 V`20ANIM_LACE)) X`09`09t\8E04>>=`201;\5809else`20c\3E15=`20`7EANIM_LACE; X`20`20`20\0303`20`20cur_file->dispx`20=`20tmpx\2018y`20\2005y; X`09if`20(tmpx`20>`20xa_max_disp_x)`20\0F0D\5109\3108y`20\310Ey)\0F0E\6209 V\8006`7D X\0806xa_merged_anim_flags`20`7C=`20\A00A\180A; X X/*`20NOTE:`20removed`20fade,`20remember`20to`20readd`20*/ X X\6206\A004xa_time_flag`20==`20TRUE) X\2006`7B X\0806`20`20LONG`20time_int;\1709\3D08end`20=`20XA_Time_Read()\260A\3808\2303 V\310C-`20\0E08star\560Bfprintf(stderr,"time\3C03%ld`5Cn",t\4E07\610B\480D V\8919`7D X\0905`7D`20/*`20end`20of`20read`20in`20file`20*/ X\1D0Dloopin`20through`20arguments`20*/ X X`20/*`20No`20anims`20listed X`20`20\4304if`20(first_\5605==`200)`20Usage_Quick(); X\3F05Set`20up`20X11`20Display\4206\4306xa_noresize_flag==TRUE)\2F04_Setup_Wind Vow(xa_max_disp_x,x\0E0By, X`09`09x\1F1A); X`20else`20\5430\DF0A->dispx,`20f\130F\5D05\C80511_display_type`20==`20XA_MONOC VHROME)`20xa_optimi\EB07`20=`20FALSE; X`20 X`20/*`20color`20map`20manipulation`20*/ X`20CMAP_Ma\1607e_CHDRS(); X\3905Kludge`20for`20some\E804`20d\8C06s`20\3F04\A108kludge_1\9D04TRUE)`20 V\5905Expand_Maps\5406xa_time_start`20\C905Time_Read(); X`20cur_file`20=`20first_file; X`20while(c\1E07) X`20`7B X`20`20`20ACT_Make_Images(\2008->acts\5004`20`20\520B\1F0Anext\5B08`20`20\C604 V\270A\7A0C)`20\3F0B0; X`20`7D X\F406\C807flag\F409\9507LONG`20time_int;\1204\2E08end`20\F413`20`20\2E08\1E03 V\2C0C-`20\0E08star\4C06fprintf(stderr,"ACT_Make_Images:\4C05\4803%ld`5Cn",t V\5A07\6806\4F0D\8B14`7D X X`20/*`20S\2005off`20Animation.\4003*/ X`20Show\1509\3405/*`20Wait`20for`20user`20input.\3007xanim_events(); X\6006elf-Explanatory X\2C06TheEnd(); X`7D X X X/* X`20*\700E`20allocates`20and`20sets`20up`20required`20image`20buffers\2304 V\4204initialize\1304\4A08variables.\2404It`20then`20kicks`20\F904the\2E0A V\2404/ Xvoid\900E() X`7B\BC03xa_max_image_size`20=\140Dx`20*`20\100Cy;\350Adisp\340Fdisp_\340B V\1005\3405if`20(xa_merged_anim_flags`20`26`20ANIM_S_BUF_D)\2B03\9804\3103m_buf Vf0`20=`20(char`20*)`20malloc(\B512*`20x11_bytes_pixel);\4506f`20(\490A=`200) V`20TheEnd1("ShowAnimation:`20\2709\6506`20err0"\4705`7D X\BF22D_BUF\BD0B\7812\D02C\BE451"\4708\1C061`20\7A351`20=\7A241`20\7A0A\7906 V`7D X`20`20pic`20=`20\9D08\1604cur_file\1703first_file\1909loop\1A03\2A0Arame\1103- V1;`20`20/*`20since`20we`20step`20first`20*/ X`20`20file_is_started`20=`20FALSE;\1B03xa_cycle_cnt`20\5C07xa_now_cycling`20 V\2E09\1B03XtAppAddTimeOut(theContext,`201,`20ShowAction,`20XA_SHOW_NORM); X`7D X X/* X`20*`20This`20is`20the`20heart`20of`20this`20program.`20It`20does`20each`20a V\5005`20and\3304n`20calls X\4903itself`20with`20a`20timeout`20via`20the`20\AA0F\3705. X`20*/ Xvoid\AA0B(command,id) XULONG`20c\1206; XXtIntervalId`20*id; X`7B X`20L\2304t_frame_start,t\0E07end,\0C08int; X X`20if`20\6208`20==`20XA_SHOW_NORM) X`20`7B X`20`20switch`20(xa_anim_status)\1A03\1E04`20`20case\3804RUN_NEXT:`20`20`20 X`09Step_Action_Next(); X`09break;\3611PREV\3612Prev\3618STEP\6D07\3507Frame_\6A1CSTEP_PREV:\330D\671CF VILE\6706\3308il\650Bxa_anim_status`20=\9A0D\521B\850Dile_\8409\5219PREV\5216UN VSTARTED:`20`20\F00FOP\BD06\1914PREV:\1903`09if`20(xa_title_flag`20!\7705TITLE_ VNONE) X`09`7B X`09`20`20sprintf\2E09,"XAnim:`20%s`20%ld",cur_file->name\0F06rame\DA04`20`20XS VtoreName(theDisp,mainW,x\5007\2704`7D X`09xa_anim_holdoff`20=`20FALSE; X`09return; X`09break;\D505default:\382E`7D X\0303\0803DEBUG_LEVEL1`20f\E007stderr,"frame\4703%ld`5Cn\DE07\CF07 X`20/*`201st`20through\0904is`20particular`20file. X`20`20*`20Resize`20if`20necessary`20and`20init`20required`20variables.\3504/ X`20`20if`20(file_is_started`20==\D506) X`20`20`7B X\FF03`20`20/*`20If`20previous`20anim`20is`20still`20cycling,`20wait`20for`20 V\0703to`20stop\6606\6806xa_now_c\2F06\6704TRUE\6604\6809`20xa_anim_flags`20 V`26=`20`7E(ANIM_CYCLE); X`20`20`20`20`20`20XtAppAddTimeOut(theContext,`2050,`20XA_Cycle_Wait,`20NULL V\3C09return;`20\0F05`7D X\0705file_is_started`20=`20TRUE;\1C05xa_anim_flags`20=`20cur_file->\170A\2A06i Vf`20(\2E0E`26`20ANIM_PIXMAP)`20xa_pixmap_flag\660Delse\2012FALSE; X\BA07/*`20user`20has`20not`20resized`20window`20yet`20*/ X\8A0911_window_x`20==`200)\1B05`7B`20\4905anim\2704allowed`20to`20cause`20 V\4D07resizing`20\5207\DE09no\7706\A307\A407\5C06\5E03\0807\2F06(xa_disp_x`20!= V`20cur_file->dispx)`20`7C`7C`20\2209y`20\2211y))`20 X`09`09XResizeWindow(theDisp,mainW,c\530E\100Fy); X\8D06`7D X\0806else`20/*`20fixed`20\EB07size\E70A\C20E\C10A>`20\C010\9C04ClearArea( V\991E0,`200,0,FALSE)\9608\630Ey`20\6310y)\631C0,\2E0F\6314\F906\0606/*`20Do V`20Title\7904set`20\F607switch(xa_title_flag)\1A05`7B`20\4907case`20XA_TITLE_F VILE: X`09sprintf\3909,"XAnim:`20%s"\9E0Bname); X`09break;\5116RAME: X`09if`20(cur_frame`20>=`200) X`09\3005\6C1B`20%ld\7010\0F06rame\7A04else`20\AE3Cdefault:\F419")\330E`7D X\0604XStoreName(theDisp,mainW,x\3E07); X\2804/*`20Initialize`20variables X\7C05*/\0805if`20(\A60Aanim_type`20==`20FLI_ANIM)`20pic`20=`20im_buff0;\3905xa V_imagex\1A03\410A\1306\220Ey`20\2211y;\2208disp_x\220Ddisp\430Adisp_\430Edisp V\420Aimaged`20\6411d;\2208cmap_size`20=\2510c;\470D\2608\DD0A*`20\C709; X\2C05X11_Init_Image_Struct(theImage,x\3B08\0A09y)\6509time_start\6503XA_Time_R Vead()\2404`7D`20/*`20end`20of`20file`20is`20not`20started`20*/ X`20 X`20/*`20OK.`20A`20quick`20sanity`20check`20and`20then`20we`20act. X`20`20\3504if`20(`20(act\7703cur_file->frame_lst`5Bcur_frame`5D.act)`20!=`200) V X`20`7B\B805/*`20initialize\5604\6605get`20the\4F04rent`20time\6F04\3103\7204 V\0703t_\6106\F01A\240Ain\9B23time; X\3805\D104x11_window_x)`20`7B`20xa_disp_x`20=`20\1C0C;`20\1A08y`20\1A0Dy;`20 V`7D\4F0A(x\4009!=`20xa_imagex)`20`7C`7C`20(x\4209\1C0By)) X`09`20xa_need_to_scale`20=`201;\5605else\1F140;\7606/*`20lesdoit`20*/ X\1204switch(act->type) X\1604`7B X\0604\3106\0B08`20*`20NOP`20and`20DELAY`20don't`20change`20anything`20but`20ca Vn`20have`20timing`20info\470Bthat`20might`20prove`20useful.`20ie`20dramatic V`20pauses`20:`5E\9206\3A05\B306`20case`20ACT_NOP:`20\1305\2409\0808\0808DEBUG_ VLEVEL2`20fprintf(stderr,"A\4407`5Cn"); X\4318break;\7B0FDELAY:\7B3E\4406\7D2A`20`20/*\6F0A*`20Change`20Color`20Map. X\1C09/ X\AF0ECMAP\AE05\400Aif`20(\0703(cmap_play_nice`20==`20FALSE)`20 X`09\2704`26`26`20(!(x11_display_type`20`26`20XA_X11_STATIC))`20) X`09`7B X\3303LONG`20j; X\0B03\7A08_HDR`20*cmap_hdr; X X\1C03\0E08`20=`20(\280E)act->data\4505xa_cmap_size\2D03\3808->csize\230Doff V`20\230Eoff\220C\FA06=`20(ColorReg`20*)\2E0A\7306/*`20POD`20TEMP`20share`20rou Vtine`20whith`20CHDR`20install`20*/ X`20`20if`20(x11\8406flag`20==`20TRUE) X`20`20`7B X\7304DEBUG_LEVEL2`20fprintf(stderr,"CMAP:`20size=%ld`20off=%ld`5Cn",\3C05 V\B506\0606\EA08size,x\F70A);\2B05\8A08display_type`20`26`20XA_X11_GRAY\9304 V\9508`20`20for(j=0;j<\590C;j++\2806\2A0A`20`20defs`5Bj`5D.pixel`20=`20\7E0B V`20+`20j\8106\290Cred`20`20`20\2909\1304gray\2912green`20\2923blue\5225flags V`20=`20DoRed`20`7C`20DoGr\6404\0A04Blue\3208`7D X\0606\0604else\0905\F308for(j=0;`20j`5Cn", X\4108`20`20j,\E20E\0F0Cgreen\110Cblue\210Eay); X X\4B06`7D X\0606\0604XStoreColors(theDisp,theCmap,defs\4708_size)\D306XSync(\2E08Fals V\1A06`7D X X`09 X`09`7D X`09break\FF09/*`20 X\C708*`20Lower`20Color`20Intensity`20by`201/16. X\2909/ X\0805case`20ACT_FADE:\1305\2409\0808\0808`7B X\1A18`20LONG`20j; X X\2219DEBUG_LEVEL2`20fprintf(stderr,"A\8108`5Cn")\D909\4512if`20(`20(x11_displa Vy_type`20`26`20XA_X11_CMAP)`20`26`26\421A\0505(x11_cmap_flag`20\1203==`20TRUE) V`20)\3B1A\FF1B`20`20for(j=0;j Vdata\2E06\5E1D`20`20<%ld,%ld>`20\0A09`5Cn", X`09`09\670A->xpos,`20\7A0B->ypos, X`20\F903\0404\0808\350Dsize,`20\350Dsize`20`20); X\9B04if`20(xa_need_to_scale) X\1903`7B X\0503`20`20UBYTE`20*tmp_pic\CE05\1503LONG`20xp,yp,xsize,ysize\5206\5404(a V\710Bclip\5305\5509`20`20xsize`20=\AC12;`20\A006\1B0E\5F07\3D08p`20\3A0Fpos; V`20y\1710ypos;\3508\C207\2303UTIL_Scale_Bitmap(0,\B010, X`09`09\DA0B,X11_Get_Line_Size(xsize),xa_imagex\0A09y,\3C04a_disp_x,xa_disp_y, V`26xp,`26yp,`26\5906`26y\5A09LSB,\0807);\B108if`20(\B507==0)`20break;`20/*NOP* V/ X\2506\0606`20`20pix_map\DE03XCreatePixmapFrom\E406Data(theDisp,mainW\A704(char V`20*)\6807\1304\EA08\3706_Width\ED08\B2060x01,0x00,1); X\880EXSetClipMask\6F09theGC,p\A306\3319Origin\350Fxp,yp); X`09`20\2A03`7D X\0806xp\E803act_im_hdr->xpos;`20yp\170Fypos;\3306if`20(x11_display_type`20== V`20XA_MONOCHROME)\2C06`20`20tmp_pic`20=`20UTIL_Scale_Bitmap(0,a\630Bimage->dat Va, X`09`09a\950Csize\2D0Dysize,\270F\4207bytes_per_line,xa_imagex,\0A08y,\3903xa_d Visp_x,xa_disp_y,`26xp,`26yp,`26\7106`26ysize,x11_bit_order,\0E0D);\E806else V\F21DMapped\F21E\3C030,0,`20a\FA11\130D\9506\2512\4206\EE14\EB14\2E0711_bytes_ Vpixel,`26xp,`26yp,`26xsize,`26ysize,0)\E707if`20(\DF07) X\1205`7B X\F608heIm\CF09\FD03(char`20*)\3007; X`09`09 X\2C07DEBUG_LEVEL1`20fprintf(stderr,"IMAGE:scale`20sz`20%ldx%ld`20->`20\0B07 V`5Cn",\4D03act_im_hdr->\AE06\120C\B906\1806ysize\C308\7E2Bps\7E27pos,\7D0Dpos, Vxp,yp); X\7506\0606`20`20X11_Init_Image_Struct(theImage\B116if`20(`20(act->chdr`20!= V`200)`20`26`26`20\140Exa_chdr_now)`20) X`09`09XA_Install_CMAP\2E0A\5B0AXPutImage(theDisp,mainW,theGC,the\97060,0, V\D005\A114`7D X\0705if(act_im_hdr->clip)`20XSetClipMask\6309\5D06None\4306\4105else\0804`7B X\9A06\FB08\5512\210D\2F0E`20`20pix_map`20=`20XCreatePixmapFromBitmapData\ED0F V\430F`20`20(char`20*)\7B10\2A12X11_Get_\5C06_Width\B20Dxsize),a\130Bysize V\4B120x01,0x00,1); X\670FSetClipMask\BD09theGC,p\F106\3319Origin\350F\A20Dpos,\A00Dpos\4F0F`7D X`09`20\0703if`20(`20(act->chdr`20!=`200)`20`26`26`20\140Exa_chdr_now)`20) X`09`09XA_Install_CMAP(\2E09); X\5905XPutImage(\A808mainW,\AE12image,`200,`200,\5A03\C911`20`20\CB10\2711size, V`20\270Dsize`20`20\F50F\EE04\260Cclip)`20XSetClipMask\AE09\A806None\D206`7D X\470AXSync(\2A08False); X\670Exa_pixmap_flag`20==`20TRUE) X\260A`7B X\9B0CACT_PIXMAP_HDR`20*act_pm_hdr\C30E\180A`20=`20(\3610)`20malloc(`20sizeof V\210F)`20\A80D\AA06\520C=`200)`20TheEnd1("IMAGE_to\4207:`20\5D06`20err`5Cn"); X\9A10->type\9903\770A\BE11->data\BD04UBYTE`20*)`20\EC22->xpos\3503act_im\130A V\311Ayp\3111ypos\621Bsize\6310size\641B\3313ysize\331Apixmap\3403XCreateP V\1005(theDisp,mainW, X\3E0C\A815,`20\8811,`20x11_depth)\801Aclip\7E030;\220DDEBUG_LEVEL2`20fprintf(s Vtderr,"`20\2103PIXMAP`20p\BE08%lx`5Cn"\A912\1010\C91C\4D06\AC0FXPutImage(theDi Vsp,\3413,`20theGC\1B06im\1B06image\92120,0,0,0,\460Cxsize,\120Cysize\8B10Sync V\8709Fals\2211DestroyImage(\8D11\2E0Fif`20(\240Cclip) X\220C`7B X`09`20\2B09xa_need_to_scale)`20/*`20d\7106`20scaled,`20create`20real`20*/ X`20\4007`7B X\570C\AB05FreePixmap\D309pix_map);\5A04free\5707`20pixmap\5105\470F\3307`20= V`20XCreate\5306FromBitmapData\6109mainW, X`09\9604(char`20*)act_im_hdr->clip, X\6410\AE0411_Get_Bitmap_Width(a\3A0Bxsize),a\130Bysize\4E150x01,0x00,1); X`20`09\1606`7D X\260EDEBUG_LEVEL2`20fprintf(stderr,"`20\2103CLIP`20pixmap`20=`20%lx`5Cn",pix_m Vap\5804\4E0Dact_pm\E70A\3203\2B07\2A10free\DC0Dclip\500F`7D X\B505\2B0F\250D\2305else\0804`7B X\3005if\5912\1A06`7B X\850EXSetClipMask(theDisp,theGC,None)\B510XFreePixmap\2F09\E007); X\6305\9105`7D X\640Cync(\2E08False\2C04\2803break; X X\2907/*`20 X\3508*`20A`20PIXMAP\140B/ X\0805case`20ACT_PIXMAP:`20`20`20 X`09\FB05\150A_HDR`20*act_pm_hdr; X X\2003DEBUG_LEVEL2`20fprintf(stderr,"A\520A`5Cn")\CF05\410A`20=`20(\5F10)(act-> Vdata); X\F30Bif`20(xa_need_to_scale) X\200A\AD05`20`20Pixmap`20pix_map\7105`20`20XImage`20*t_image,*p_image\1F07UBYT VE`20*tmp_pic; X\550A\1C03LONG`20xp,yp,xsize,ysize\FC06\9606\D10A->clip) X\1B05\9107`20`20xp\E903\250Cxpos;`20\1C05yp\1C0Fypos;\3A09size\3D10size;\3A03 V\1C13\9B07\C00C`20`20\EC07\2B03XGetImage(theDisp,a\BB0F,0,0\E70C, X`09`09`09`091,XYPixmap);\5D0Ftmp_pic`20=`20UTIL_Scale_Bitmap(0,p\7B06->data, X\3B0E\DF07\6907\2B09bytes_per_line,xa_imagex,\0A08y,\4912a_disp_x,xa_disp_y, V`26xp,`26yp,`26\6606`26y\D00A`09x11_bit_order,X11_LSB)\DC10if`20(\E007==0)`20b Vreak;`20/*NOP*/ X\2D0Epix_map`20=`20XCreatePixmapFromBitmapData(theDisp,mainW\C812(char`20*) V\7607\2112X11_Get_\5306_Width(xsize),\E1060x01,0x00,1)\D110XSetClipMask\8B09th VeGC,p\BF06\3319Origin\350Fxp,yp); X`09`20\2A03`7D X\0806xp`20=`20act_pm_hdr->xpos;`09y\1710ypos;\3307size\3610size;`09y\1B13 V\1405\A90Et_imag\2904XGetImage\AC09\3B0Cpixmap,0,0,xsize,ysize, X`09`09`09`09AllPlanes,ZPixmap\DA08if`20(x11_display_type`20==`20XA_MONOCHROME) V X\2C05`7B X\970C\99461,XY\9209\5F0Fmp_pic\5F03UTIL_Scale_Bitmap(0,t\7D06->data, X\3B0E`20`20\690C\2B09bytes_per_line,xa_imagex,\0A08y,\4912a_disp_x,xa_disp_y, V`26xp,`26yp,`26\6606`26y\D00A`09x11_bit_order,x\0E0C); X`09`20\5303`7D X\0705else\0A06`7B X\FA0F\8E06\FA03XGetImage(theDisp,act_pm_hdr->pixmap,0,0,\F00C\8905AllPlanes,ZP Vixmap); X\660Fmp_pic\6603UTIL_Scale_Mapped(0,\8407->data, X\3B0E\05050,0,`20xsize,`20y\0706\3509bytes_per_line\3F15xa\2D06x,\0A08y,xa_dis Vp_x\0A09y,\3C1511_b\6306ixel,`26xp,`26yp,`26xsize,`26ysize,0); X`09`20\2F03`7D X\0705if`20(\F507==0)`20break;`20/*NOP*/ X\2405theI\F80A`20=`20(char`20*)t\3906\5207X11_Init_Image_Struct(\3D08,xsize, V\8605\8408\7D04`20(act->chdr`20!=`200)`20`26`26\140Fxa_chdr_now)`20) X`09`09XA_Install_CMAP\2E0A); X\5804\0404\9205PutImage(theDisp,mainW,theGC,the\9A060,0,xp,yp,\A417act_pm_hdr- V>clip)`20 X\1C05`7B X\0705\6903SetClipMask\6C09\6606None\4C08\2903DestroyImage(p_image\1F08`7D X\0705\240Et_\240DXSync(\6308False); X\F30A`7D X\0C0Aelse`20/*`20no`20rescale`20*/ X\200A\BF07\E215\E108\2E0A\E81F\4211\960C\3C0COrigin\3E1Bxpos\110Dypos); X\9205\4806PlaneM\8512AllPlane\2F09`7D X\E309\E505->chdr`20!=`200)`20`26`26`20\140Exa_chdr_now)`20) X`09`09XA_Install_CMAP(\2E09\6008XCopyArea(\8908\B90Cpixmap,mainW\A207`200 V\0303,`20\5C03\F30Dsize,`20\F50Dsize,\2810pos,`20`20\280Dpos\8903\9109Sync V\8D09False)\1B07if\EF05\3A09clip)`20XSetClipMask\3809\AC06None); X\3C04\0404`20`20`7D X`09`7D X`09break; X X\1507/*`20 X\2108*`20SETTERS`20\130A/ X\0805case`20ACT_PIXMAPS: X`09`7B\9804ACT_\3506_HDR`20*\A206s_hdr\B805\330A\2006back\C307,*work\0D07 V\2D05Pixmap`20work,back\1505LONG`20xpback,ypback; X X\1803DEBUG_LEVEL2`20fprintf(stderr,"A\9709S:`5Cn")\4A05\9C0B`20=`20(\BB10)(act V->data); X\F706\0505if`20(\3C0B->back->type`20!=`20\E30A) X`09`09XA_Image_To_\D006\3C12); X\5E1Bwork\5E38work\ED06back_pm\ED0C\4706\ED07\D113data\3C05work\3C29\AF06 V\3C09back\3503\7F0B->pixmap\5B09\1F03\620B\1F0A\2004/*`20copy`20backgrnd`20int Vo`20\3605area`20*/ X\2603DEBUG_LEVEL2`20 X\1103`20`20fprintf(stderr,"ACT_SETTERS:\4E05=%lx\4905=%lx`5Cn",back,work); V\4304xp\BB07\DE0D\1606\2105yp\2114\1606\2105\9623\1404\0404\0505bpos\4F03<%ld, V%ld>`5Cn",\7006,ypback\9906`7B X\4B05LONG`20x\1E06\7309\1708len,ylen,xlen1,ylen1; X X\2205xback\D811\430Byback\D811\210Bxlen\2003\4906-`20\A406\3D08\1C06\4406-`20 V\B906\1C07if`20(\3C05>=`20xa_imagex)`20xlen1\34030;\2706else\1509\2809\6904len V\4B0B\6B05\4B0By)\7E05\4B11\1508\2809\9804len; X\970E1`20==`200) +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 8 Archive-name: xanim/part02 -+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+ X\1505`7B`20\0806\6B0A\1F0D\2103\0908\0303XCopyArea(theDisp,`20back,`20work, V`20theGC, X`09`09\2E06xpback,ypback,\E109\0A09y,0,0)\C207`20`20`7D X\0907else\7E5Aylen`20,0,\2303\7D0B\5F38\0B040,\5E0E1,0,ylen\DB11\0707else`20/* V`20xlen1`20!=`200`20*/\1B06`7B`20\3308if`20(ylen1`20==`200) X\1707`7B X\B13Fypback,xlen`20,\B808y,0,\C904\B20A\5F31\04040,y\5E0A1,\5E0Axlen,0\5E0A V`7D X\0907else\DB50\1003len,`20`20yl\0705\9804\0605\DE41\4C07\DE06\5F051,`20\6D06yl Ven\6041\C108\6107\C107\CE07\C13Exp\1D06\C807\B50A\6804\1405\C20E`7D X\0905\0705`7D X\0604/*`20loop`20through`20face`20pixmaps`20*/ X\2303while(act_pms_hdr`20!=`200)\1B04`7B X\5005ACT_PIXMAP_HDR`20*face_pm_hdr; X X`20\DD09`20`20if`20(\4A0B->face->type\5604\490A) X\370C\0404XA_Image_To_Pixmap\4A12\EA08\810B`20=`20(\A010)a\8312data\3E07\A504 V\420B->clip\F005\F204\960FSetClipMask(theDisp,theGC,f\4311; X\3D16Origin\3F0F X`09`09a\A70Cxpface,a\140Cyp\F60C`7D X\0806XCopyArea(\5208\4C03`20`20\900Dpixmap,`20work,`20\7209`20`200,`200,`20 X\0B04\7F0Eface,\140Eyface,\2C13\AB06\160F\AD06\A003\B008if`20(\950Dclip)`20XSe VtClipMask\C209\A206None\3E08\5C0B`20=\6A0Enext\2605`7D X\0604\6804xa_need_to_scale) X\1903`7B X\4A05XImage`20*t_image\6007ULONG`20xp,yp,xsize,ysize\1E08BYTE`20*tmp_pic\1507x Vp\8A03yp\05030;`20xsize\0B03xa_imagex;`20y\130Fy;\3806\A10511_display_type`20= V=`20XA_MONOCHROME)\2C06\B407`20`20\AE07=XGetImage(theDisp,work,0,0,\B70B,1,XYP Vixmap); X\4206\0606\4A03\C506\9903UTIL_Scale_Bitmap(0,t\6806->data, X\3B0E\F403\640B\2B09bytes_per_line,x\F007x,\FA09\4913a_disp_x,xa_disp_y,`26xp, V`26yp,`26\6606`26ysize, X`09`09`09`09`09x11_bit_order,\0E0D); X`09`20\5303`7D X\0705else\0A06`7B X\0705\F303\8706=XGetImage(theDisp,work,0,0,\D90CAllPlanes,ZPixmap); X\BE0Etmp_pic`20=`20UTIL_Scale_Mapped(0,\6F07->data\FB12\03030,0,`20xsize,`20y V\0706\3509bytes_per_line\3F15xa\2D06x,\0A08y,xa_disp_x\0A09y,\3C1511_b\6306ixe Vl,`26xp,`26yp,`26xsize,`26ysize,0); X`09`20\2F03`7D X\3D0Cif`20(\FC07==0)`20break;`20/*NOP*/ X\2B0CtheI\D106data`20=`20(char`20*)t\4006; X\2E0CX11_Init_Image_Struct(\4408,xsize,ysize); X\9210`20(act->chdr`20!=`200)`20`26`26\140Fxa_chdr_now)`20) X\420C\7F05A_Install_CMAP\3C0A\6E0FXPutImage(theDisp,mainW,theGC,the\AF060,0,xp V,yp,\B91AXDestroy\4F07_image); X`09`20`20`7D\0504else\0804`7B X\0503\E838`09`09\DA1C\5905XCopyArea(\D308work\D80D0,0,xa_imagex,\0A08y,0, V\8403\B20AXSync(\4608False\1E04\1C03break; X X\FB07/*`20 X\0B07`20*`20Act`20upon`20IFF`20Color`20Cycling`20chunk.\2C0B`20`20currently V`20we`20don't`20c\3405cy\3406during`20animations.`20will`20be`20fixed\4F0B/ X\0805case`20ACT_CYCLE: X\2008if`20(\0703(cmap_play_nice`20==`20FALSE)`20\F504`20`20`26`26`20(x11_displ Vay_type`20`26`20XA_X11_CMAP) X\290Aa_anim_flags\2603ANIM\7806)`20) X`09`7B X\2A03\8B09_HDR`20*act_cycle;\1D04\0E09`20=`20(\2A0F)act->data; X\2C04DEBUG_LEVEL2`20fprintf(stderr,"A\F109`5Cn")\5C05\F105!(\6309->\A709\6909S VTARTED)\AE04`20`20\B005\DC04\3B05(act->chdr`20!=`200)\F205\140Dxa_chdr_now V\4205`09`09XA_Install_CMAP(\2F09\9306\5C04xa_cycle_cnt++\1709\A711`7C=\A812 V\450Cnow_cycling`20=`20TRUE\1E09XtAppAddTimeOut(theContext,(int)(act\6D08rate) V,`20 X\BD03\0303\3C03A_Cycle_It,`20\2809\BF06`7D X`09`7D X`09break; X X\6C06`20/*`20\0B08`20*`20`20FLI`20BRUN`20chunk\1A10LC\18187`20\1915COPY\1A16BL VACK`20\1B0F/ X\0805case`20ACT_FLI_BRUN:`20`20`20\1B13LC\19197:\1713COPY\1814BLACK\4B04\1B05 X`09`7B X`09`20`20ULONG`20xsrc,ysrc,xdst,ydst,xsize,ysize,*remap_map; X X/*POD:`20if`20dithering`20set`20and`20new_chdr`20then`20don't`20remap`20here, V\9603\3406\2D05\1906later`20*/\8E04\6709`20=`20act->chdr->map; X\1F03switch(act->type) X\1503\C705\EB10RUN:\E303\EB06DEBUG_LEVEL2`20fprintf(stderr,"A\330C`5Cn")\6A05 V\3704FLI_Decode_BRUN(r\9D08,`20act->data,im_buff0, X`09`09`09`09xa_imagex,x\0A07y,TRUE\550Axsrc\DD03ys\07050;`20xsize`20=`20\3B09; V`20`20ys\140Ey;\3F08break;\F213LC: X\EF2CLC:\ED18LC\EB0B\EA13\E514\FE04`26xsrc,`26ysrc,`26xsize\0D04ize,TRUE\6B0A V\C41B7:\C52F7:\C61A7(\C776COPY\C82ECOPY:\C90Dif`20(\0703(x11_display_type`20 V`26`20XA_X11_TRUE)\B003\2E04`7C`7C`20(act->chdr->new_chdr)`20\2104`09`20UTIL_M Vapped_To\0A07(im_buff0,act->data\0A06chdr, X\3803`090,0,xa_imagex\0A09y,\1413\BA0Aelse`20memcpy(\6309(char`20*)\6B0A\3A08_ Vsize)\3E09xsrc`20=`20y\07060;`20xsize\0B03\7409;`20`20ys\140Ey;\3F08break; V\0E06case`20ACT_FLI_BLACK:\1603/*`20rare`20*/\3408DEBUG_LEVEL2`20fprintf(stder Vr,"A\400D`5Cn")\6C09XA_MEMSET(\E709remap_map`5B0`5D,(x\E30C*x11_bytes_pixel)) V\F452`7D`20/*`20end`20of`20switch`20*/ X X/*`20coming`20out\1C04above,`20everyth\1904in`20i\C507`20and`20is`20re-mapped V`20*/ X\6A06\AD05dst`20=`20xsrc;`20yd\0D05ysrc\8105if`20(xa_need_to_scale)\1904`7B X\AD05UBYTE`20*tmp_pic\C207\350511_display_type`20==`20XA_MONOCHROME)\2C06 V\4807\4A03LONG`20line_size; X\1908xsrc=ysrc=xdst=ydst=0;`20xsize=xa_imagex;`20y\110Dy;\4008\9C07\D603UTIL_S Vcale_Mapped(0,im_buff0,0,0, X`09`09\3503\5409,x\4D08\0A09\140A\1E0C\3809disp_x,xa_disp_y,x11_bytes_pixel, V\2A06`26xdst,`26ydst,`26xsize,`26ysize,0)\B809if`20(\BC09=`200)`20break;`20/* V`20NOP`20*/ X\2A07line_size\E403X11_Get_Line_Size(xsize\570AUTIL\FF07_To_Bitmap\6908,t V\0807act->chdr,0,0,\B603\3B04\AA06\A906\0C0C\8009\6608`7D X\0705else\0A06`7B X\7E07\D109\8806Scale_\8E06(0,im_buff0,xsrc,ysrc,\7B03\3B03\7A0Da_imagex\0A0A V\0A09y,\3007a_disp_x,xa_disp_y,x11_bytes_pixel,\2A06`26xdst,`26y\0605\6706`26y Vsize,0)\CE07`20`20if`20(\BA07==0)`20break;`20/*NOP*/ X\2607xsrc\D903ysrc\07030;\1806`7D X\0705theImage->data\2003(char`20*)\5807\2E07X11_Init_Image_Struct(\3D08,x V\9A05ysize\9E06\5E05else\0804`7B X\4405\AE04x11_display_type`20==`20XA_MONOCHROME)\2C06\3307`20`20ULONG`20line_s Vize,tsize\9507`20`20\1809\B903X11_Get_Line_Size(xa_imagex)\3109tsize\2D03 V\1B08y`20*`20\4509\2609XA_REALLOC(xa_disp_buff,\0D0C\8F0B\5F0AUTIL_Mapped_To_B Vitmap(\440Dim_buff0,act->chdr,0,0, X`09\4305\B309,xa_\A206\0A09\140C\B409\DB0BheImage->data\E406\7709\2607`7D X\0705else\3012\9A08\2C07X11_Init_Image_Struct(\3608\9614\8C06\6405if`20(`20( V\E309`20!=`200)`20`26`26`20\140Exa_chdr_now)`20) X`09`09\7703A_Install_CMAP\300A\5E06XPutImage(theDisp,mainW,theGC,the\9E06 V\4B05xsrc,ysrc,xdst,ydst,xsize,ysize`20)\5206Sync\4E09False); X`09\C703break; X X`20`20`20`20\0303/*`20 X\0B07`20*`20`20Display`20IFF`20body.`20Note`20that`20both`20buffers`20are`20se Vt`20to`20this\2D06\4A0C\1605is`20necessary`20since`20next`20delta`20works`20on V`202nd`20\5906\430C\4E0CHandle\9705anim`20op`203`20and\0904l(small`20L)`20comp Vressed`20actions\510B/ X\0805case`20ACT_IFF_BODY:\1813DLTAl:\19173: X`09`7B X\5808`20`20LONG`20src_x,src_y,dst_x,dst_y,im_x,im_y;\320Bswitch(act->type) X\1C0A\5A0C\951A\2108DEBUG_LEVEL2`20fprintf(stderr,"A\390D`5Cn")\850C\0303 V\1D05eltal(pic,`20(short`20*)act->data, X`09`09xa_imagex,`20x\0B07y,\0B09d,`201\5810break;\C91D3:\C9373:\C91C3(\C905 V\C00A\A80A\A52FBODY\A434BODY:\A313memcpy(im_buff0,(char`20*)\AB0A\AA08_size) V\3F1D1,\3F22`09`20\3804pic`20=`20\7608\550FIFF_Init_DLTA_HDR(\4508x,\0A08y) V\350Fbreak;\140B`7D X\0C0Aif`20(xa_no_disp`20==`20FALSE) X\230A`7B X\9A05src_x=src_y=0;\A204x=\7E09\1005y=\8409;`20dst_x=dst_y=0;\920D\7404XA_Mapp Ved_To_Display(theImage,pic, X`09`09`20`20act->chdr,act->h_cmap,`20\F613\3006`26dst_x,`26dst_y,`26src_x V\0706y,`26im_x\0605y,xa_anim_flags)`20)\E306`7B X\A70C\A906`20(\8409`20!=`200)`20`26`26`20\140Exa_chdr_now\4B04\440E\0404XA_Ins Vtall_CMAP\3E0A);\2E0FXPutImage(theDisp,mainW,theGC,theImage,0,0,0,0,im_x,im_y V\4912Sync\4509False); X\E605`7D X\0703\0505pic`20=`20(pic==im_buff0)?i\0A061:\1308; X`09`7D X\5908break; X X\1108/*`20 X\1C08*`20`20Handle`20IFF`20anim`20op`205`20and`20opt`20J`20compressed`20action Vs.`20\3F0A/ X\0805case`20ACT_IFF_DLTAJ: X\19165:\3D09`7B X\FD0ALONG`20minx,miny,maxx,maxy,src_x,src_y,im_x,im_y;\CC09\0303if`20(act->typ Ve`20==`20\880D) X\2A0A\710C`20`20DEBUG_LEVEL2`20fprintf(stderr,"A\CC0D`5Cn"); X\3D0CIFF_DeltaJ(pic,`20act->data,`20 X`09`09xa_imagex,`20\0B08y,\0B09d,`20`26minx,\0705y,`20`26maxx,\0705y)\680C`7D X\0C0Aelse\EC1E5)\EC425:\EC1B5(\EC0F\EB5Cbreak; X X`09`20\F605xa_no_disp`20==`20FALSE)\1C04\E80E\2A04\0703(xa_anim_status`20!= V`20XA_RUN_NEXT\3805\3006`26`26\2C17STEP\2D06\2805) X\660C\740E`20`20minx`20=\0704y`20=`200;`20maxx\0A03xa_imagex\1205\1C04\1208y; V\430D\FD0C`20`20IFF_Update_DLTA_HDR(`26minx,`26miny,`26maxx\0605y)\480Eim_ V\8905\7F04-`20minx;`20im_\7A04\8105\1405y; X`09`20\2D03src_\B707x;`20src_\2805\210ADEBUG_LEVEL1`20fprintf(stderr,"IN`20i V`20%ldx%ld`20x\0A09s`20\0A07`5Cn",\4706\6A07,src_y,minx,miny,im_x,im_\C511f V`20(XA_Mapped_To_Display(theImage,pic, X`09\5D03act->chdr,act->h_cmap,xa_imagex,\0A08y,\2F05`26src_x,\0705y,`26minx, V\0604y,`26im_x,\0604y,xa_anim_flags)`20)\9D0D`7B X\D406DEBUG_LEVEL1`20fprintf(stderr,"OUT`20i`20%ldx%ld`20x\0A09s`20\0A07`5Cn", V\4907`20src_x,\9306minx,miny,im_x,im_y);\800D`20`20if`20(`20(\FA09`20!=`200) V`20`26`26`20\140Exa_chdr_now\C404`09`09`09XA_Install_CMAP\2F0A\6311XPutImage(t VheDisp,mainW,theGC,theImage, X\360E\0A0A\D330XSync(\6C08False)\240E`7D X`09`20\0505`20pic`20=`20(pic==im_buff0)?i\0A061:\1308\3F0A`7D X\0A08break; X X\0D05default:\650B\D019fprintf(stderr,"Unknown`20not`20supported`20%lx`5Cn",ac Vt->type\C307`7D`20/*`20end`20of`20switch\0A04action`20type`20*/ X\260D\1C07valid`20*/ X X`20/*`20Single`20step`20if`20in`20that`20mode\4105if`20(`20(xa_anim_status`20= V=`20XA_STEP_NEXT)`20`7C`7C`20\241BPREV)`20) X`20`7B\BA04\5204xa_title_flag`20!\2B05TITLE_NONE) X`20`20`20\2C05`20`20sprintf(\3208,"XAnim:`20%s`20%ld",cur_file->name\0F06rame) V;\4106XStoreName(theDisp,mainW,x\5207\2906`7D X\9B0A\EB1C\9B0B\2A10\2906OP_NEXT\7E07\2408holdoff`20=`20FALSE;\1E06return V\800Aelse\851FPREV\8525PREV\8533`7D X X`20\8207title_flag\8107TITLE_FRAME) X`20\8105sprintf(\2F08,"XAnim:`20%s`20%ld",cur_file->name\0F06rame);\3F04XStore VName(theDisp,mainW,x\5007\2704\9603`20/*`20Harry,`20what`20time`20is`20it?`20a Vnd`20how`20much`20left?`20default`20to`201`20ms`20*/ X`20t\7806_end`20\CE06ime_Read()`20-`20\1F08start;\2F10\0E08int\2C0Bend;`20`20 X`20if`20(t\300B<=0`20)`20\420E1;\2907`20(xa_anim_status`20!=\8E04STOP_NEXT) V`20`7C`7C`20\241BPREV)`20)`20 X`20`20`20XtAppAddTimeOut(theContext,`20\7F0B,`20ShowAction,`20XA_SHOW_NORM); X`20else`20x\7007holdoff`20=`20FALSE; X`7D X X/* X`20* X`20*/ Xvoid`20Step_Action_Next() X`7B\8D03XA_FRAME`20*frame; X\1403cur_frame++;`20frame\5903`26cur_file->frame_lst`5B\2A09`5D;\3904do\0503 V\5604`20`20if`20(`20(frame->ti\4304=`200)`20`26`26`20\1608act`20!=\1504)`20/* V`20check`20for`20loops\B904\4904\4F06\A905ACTION`20*lp_act`20=`20\490A; X\2606\7704\1F06->typ\7605ACT_BEG_LP)\2607\5408`20`20\1C0A_HDR`20*beg_lp\5B03(A V\1A0F)l\5707data\6F08`20`20\3106->cnt_var`20=`20\1209ount\290Acur_frame++;`20 V\EF03move`20on`20\E707`20`20`7D X\0806else\C819END_\C818\1C06\AE06end_\C80A\1A0C\C817\3207\C90C\1311-`201; V\3109\A204\2211>`200)\EA0A\4403\2108begin_frame\430A\EA05\2E09++\1A08`7D X\0806\4508`26cur_file->frame_lst`5Bc\3808`5D;\2F05`7D X\0705\9704frame->act`20==`200)`20/*`20Are`20we`20at`20the\9704`20of`20an`20ani Vm?`20*/\3D05`7B X\DC0Axa_pingpong_flag\4B04TRUE) X\2406\2C08`20`20xa_anim_status`20=`20XA_RUN_PREV;\2609\B009--;`20\1609Step_Act Vion_Prev()\320Areturn\1008`7D X\480F\6903cur_file->loop\1706; X\290Cloop++\4408DEBUG_LEVEL1`20fprintf(stderr,"`20`20loop\5603%ld`5Cn",c\4008) V; X\4007/*`20Done`20looping`20animation.`20Move`20on`20to`20next`20file`20if`20pr Vesent`20*/\4407if`20(c\5B08`20>\C511num)\2B07`7B X\0806\CC0B\9F030;\1608\9408Reset`20Loop`20Coun\6D05\3B09/*`20This`20is`20a`20s Vpecial`20case`20check. X\4A09*`20If`20more`20that`20one`20file,`20rese\D206_is_started,`20otherwise V\430Cif`20we're`20only`20displaying`201`20animation`20jump`20to`20the`20loop_f Vram\470Dwhich`20has`20already`20been`20\8804up`20above\BA0C/ X\0B08if`20(first_file->next_file`20!=`20\190A) X\3108`7B X\4709\E310`20=`20FALSE; X\230Acur_\4F05=`20\0B08\650B\2A11rame\2B030;\1909`7D X\0A08DEBUG_LEVEL1`20fprintf(stderr,"`20\8D05\3B03%ld`5Cn",c\6D09file_num) V\540A\F504xa_time_flag`20==`20TRUE)`20XA_Time_Check(\3309`7D`20/*`20end`20done V`20looping`20\7205*/\2405\220Ewith`20frames`20in\290D\E308`26c\A20Arame_lst V`5Bcur_frame`5D;\2D03`7D`20while(`20(frame->time\AC040)`20`7C`7C`20\1608act V`20\1506); X`7D X X/* X`20* X`20*/ Xvoid`20Step_Action_Prev() X`7B X`20`20XA_FRAME`20*frame\7004\7E09--;`20if`20(\1109`20<\5F04goto\3804\5210_0 V\3E04\D929\2C03do\0503\8604`20`20\6804\E114`26`26\E10D!=\E105`20/*`20check`20f Vor`20loops`20*/ X\4904\4F06\D905ACTION`20*lp_act`20=`20\490A\AA04\7708\1F06->typ\7605ACT_BEG_LP V)\2607\5408`20`20\1C0A_HDR`20*beg_lp\5B03(A\1A0F)l\5707data\6F08`20`20\3106->c Vnt_var++;\1B09\8C04\1F0F`20<\310Aount)`20cur_frame\7403\1B08end_frame\4C0Aelse V\2C0A--\1A08`7D X\200B\FD18END_\FD18\1C06\E306end_\FD0A\1A0C\FD17\3207\DF0A=`200;\1E09\AF1B V\AA04\FA0A<`200)`20goto`20XA_Step_Action_Prev_\5209\2D06=`20`26cur_file->frame V_lst`5Bc\4E08`5D;\2F05`7D X\0705/*`20Are`20we`20at`20the`20beginning`20of`20an`20anim?`20*/\2E05\9733 V\3304\0703(frame->act`20==`200)`20`7C`7C\4C0E\B50Aloop\1706) X\DA06`20)\0905`7B X\0E06\6F15:`20\CD04skip`20index\C304with`20-1`20*/ X\3B07\8F04xa_pingpong_flag`20==`20TRUE\6E08\6708`20`20xa_anim_status`20=`20XA_ VRUN_NEXT\DF06\0404cur_floop++\150A\8D04do`20we`20move`20to`20next`20file?`20*/ V X\2708\9104\0703(c\4508`20>=`20cur_file->loop_num\9C08\0606`26`26`20(first_ V\2606next_file`20!=`20\190A`20)\360C\0D0A\E10A\BD0B\DE030;\190Bfile_is_started V\1F03FALSE;\3C10\6804\B20C\8C09\2A11rame\6610break;\1109`7D X\0B09if`20(\9D0A>=\630Bloop_num)`20\D32E\5304xa_time_flag`20==`20TRUE)`20XA_Ti Vme_Check();\910B\C311++\1F0AStep_Action_Next\3B0Creturn\1008`7D`20/*`20end`20o Vf`20pingpong`20stuff`20*/ X\2507\6409\BA03\EF0Bast_frame\4D08\E209--\1308DEBUG_LEVEL1`20fprintf(stderr," V`20`20loop\5503%ld`5Cn",c\4008\AF0A/*`20Done\2905ing`20animation.`20Move`20on V`20to`20next`20file`20if`20present\C004\4406if`20(c\5B08`20<=`200)\1A07`7B X\6707\BB0A\E30Eoop_num;`20/*`20Reset`20Loop`20Coun\6106\4109/*`20If`20more`20t Vhat`20one`20file,`20go\A30E\9809\9A06first_\7006next_file`20!=`20\190A`20) V\3209\B20A`20`20file_is_started`20=`20FALSE;\230B\CB08\D60Dprev_file\2A11rame V\2B0Dlast_frame\2C0A`7D X\C00Dxa_time_flag`20==`20TRUE)`20XA_Time_Check();\3309DEBUG_LEVEL1`20fprintf(s Vtderr,"`20\D405\8203%ld`5Cn",c\8909file_num)\4A08`7D`20/*`20end`20done`20loopi Vng`20\3F05*/\2405\220Ewith`20frames`20in\290D\F708`26c\6F0Arame_lst`5Bcur_fram Ve`5D;\2D03`7D`20while(`20(frame->time\F6040)`20`7C`7C`20\1608act`20\1506); X`7D X X X/* X`20* X`20*/ Xvoid`20Step_Frame_Next() X`7B\5D03\6B09++\6C04do\0503\1804\A404/*`20skip`20over`20loops`20\BE07if`20( V\0703(c\BD1D.t\A909\5207`20`20`26`26\3621\C904!=\C905\9F0E\970AAre`20we`20at V`20the`20end`20of`20an`20anim?`20\A50B\6B23\A00A\F808\2109`20=\0C06ile->loop V\1706; X\2604`7D X\0403`20while(`20`20`20\6B20ti\5004\6C09\6A06`7C`7C\A32A`20`20); X`7D X X/* X`20* X`20*/ Xvoid`20Step_Frame_Prev() X`7B\6103\4109--; X\1003do\0503\E008/*`20skip`20over`20loops`20*/ X\1A04if\9007\FE05<`200)`20goto`20XA_\680F_0; X\3208\FE36`26`26\FC25!=\8604)`20\D210\C705Are`20we`20at`20the`20beginning`20of V`20an`20anim?`20\DB60\A504\DA0E`7C`7C\6B0E\410Aloop\1706)`20\2D07\3706`7B X\0E06\8E14:`20/*`20prevent`20indexing`20with`20-1`20\DF07`20`20\720A=`20\720Ba Vst_frame\D506`7D X\0403`20while\DD24ti\5004\DE0D\E00B\381Aact`20\3705\E103; X`7D X X/* X`20* X`20*/ Xvoid`20Step_File_Next() X`7B X`20`20file_is_started`20=`20FALSE;\1B03\DD0C0;\1108ile\ED0Dnext_file\2209loop V\3305`20/*`20used`20if`20things`20start`20up`20again`20*/ X\3603DEBUG_LEVEL1`20fprintf(stderr,"`20\A305\5003%ld`5Cn",c\7A09file_num) V\ED1EPrev\ED48prev\ED84\EE06`20Simple`20routine`20to`20find`20out`20the`20 V\4C05type.`20Defaults\2404FLI. X`20*/ XLONG`20Determine_Anim_Type(filename) Xchar`20*\1008; X`7B X\7A04if`20(`20Is_RLE_File\310A`20)`20return(RLE_ANIM); X*/ X\3309SET_\3318SET_\3307\3009IFF_\3018IFF_\3006`20 X\3109GI\311AGIF_\3111TX\921ATXT_\3111FLI_\3118FLI_\3111DL\3010\310ADL_\F310PFX V_\6018PFX_\3008\1307UNKNOWN_\1707`7D X X`20 X/* X`20* X`20*/ Xvoid`20XA_Cycle_Wait(nothing,`20id) Xchar`20*\1307; XXtIntervalId`20*id; X`7B X X`20\9B05xa_cycle_cnt)`20/*`20wait`20until`20cycles`20are`20done\7904`20`20`7B X`20`20`20`20XtAppAddTimeOut(theContext,`2050,`20\9C0D,`20NULL\DD04\3A03\E006 V\0C04`7D X`20`20else\7604then`20move`20on`20\680Bxa_now_cycling`20=`20FALSE\4A06\841C1, V`20ShowAction,\8F04SHOW_SKIP)\7C06`7D X X/* X`20* X`20*/ Xvoid\B40AIt(act_cycle,`20id) XACT_CYCLE_HDR\7B03*a\2008; XXtIntervalId`20*id; X\BB04ULONG`20i,*i_ptr,size,curpos; X\1F03if`20(xa_anim_flags`20`26`20ANIM_CYCLE) X\DF1E(int)(\8409->rate),\C10B,`20\1E09\F005else\0703\9A04`20`20xa_cycle_cnt-- V\1F04`20`20\4D0B\9007=`20`7EACT_CYCLE_STARTED; X`20`20`20`20return;\0C03`7D X\0503size`20=`20act_cycle->size\1F04curpos\1C0E\1406; X\1F03/*`20increment`20or`20de\0D08\3907*/\2603if`20(\400Bflags`20`26`20\9C0ARE VVERSE)`20 X\9D04\760B(curpos)?\0907`20-`201):(s\B004\0B04;`20\3203else\3917`20>=`20( V\2E09)?(0):(\1B07+`20\4007\DB11\4003\E40Bi_ptr`20=`20(ULONG`20*)\300Bdata; X`20`20for(i=0;iflags`20`26`20ACT_CYCLE_REVERSE)`20\5C07curpos\5503(curpos)? V\0907`20-`201):(size`20\0B04;`20\EB0E\3B12`20>=`20(\3009)?(0):(\1B07+`20\4207 V\A704XStoreColors(theDisp,theCmap,defs,a\C30Asize);\3605ync(\2F08False); X`7D X X/* X`20* X`20*/ Xvoid`20Free_Actions(acts) XXA_ACTION`20*acts; X`7B X\5003\150D; X\1303act\CF03\2306`20`20while(\1404!=`200) X`20`20\3704`20`20switch(act->type\1A04\1C08`20`20case`20ACT_IMAGE: X\1606\200A\0404\1F09_HDR\7F05_im_hdr;\250B\160A\9403(A\330E)(act->data);\350Bi Vf`20(\390A->image)`20XDestroyImage\2113\431Cclip)`20free\1712; X`09`20`20XSync(theDisp,False\510D\3B08\AF11`7D X\0A08break;\0F07case`20ACT_PIXMAP: X\2608`7B X\550A\200A_HDR`20*act_pm_hdr\7B0C\160A`20=`20(\3410)(\9614`20`20if`20(\3A0A->p Vixmap)`20XFreePixmap\EF09\2813; X`09`20\4411clip)`20`20`20\4420clip)\4205XSync(\2408False)\A60Cfree\C117DEBUG_L VEVEL2`20fprintf(stderr,"`20\3A05d`20ACT_PIXMAP`5Cn")\3F0A`7D X\0A08break;\0F07case\3405SETTER: X\170FIMAGES\1711\6206\1809`20`20`7B X\A80A\4F0A_HDR`20*act_pms_hdr,*tmp_\0D07\DC0C\240B`20=`20(\4310)(act->data); X`09`20`20while(act\3608) X\1603`7B X\0503`20`20\640B\4D03\250B\3B05`20`20free\3C0D\1807\850E\0E0B->next\2605`7D X\B308\0A0Abreak;\0F07default:\1E09if`20(\BE09`20!=`200)\8209\D309\4B13`7D`20/* V`20end`20of`20switch`20*/ X\A807\A006\9808\2D0Ewhile`20*/ X`7D X XXA_ANIM_HDR`20*Get_Anim_Hdr(file_hdr,file_name) X\2E0D\2108; Xchar\1007name; X`7B X`20`20\2C0Dtemp\2C06`20`20static`20LONG`20\3406um\1804\1105length; X\1003\3408\CB03(X\4D0C)malloc(`20sizeof(\1D0B)`20);\3B03if`20(\3F0A=`200)`20Th VeEnd1("\E50C:`20\4B06`20failed`5Cn"); X\4007first_file\4207\110C\9D09\6E08file_\6E09\1503`7B X`20`20`20`20\E008\32030;\1205\3908->next\4F14\240Cprev\2414`7D X`20`20else\6909\3316\9608\7B1C\2408\160B\2F06\1913\AA11firs\1B06\AC1C\0503 V\7C0Aanim_typ\27040;\1B0Dimagex\1817y`20\1816c`20\1816d`20\1811anim_flags`09 V\1C11loop_num\1A17frame`09\1C12ast_f\1C16frame_lst\1B12acts\3113ile_\8306 V\0B08\2104\0C08++; X\0F03length\DD03strlen(file_name);\4E0Dname\2603(char`20*)malloc(l\3E06+`201) V\2F04strcpy(\360E,f\530Dreturn\2409); X`7D X`20`20 X Xvoid`20XA_Install_CMAP(chdr) XXA_CHDR`20*chdr; X`7B X`20`20LONG`20j\C205xa_cmap`09=`20chdr->cmap\6904\1807_size`09\1D09size\1E0Coff V`09\1D09off\1C07\510C\500A\4F11ms\4F0A\4E10moff; X\1C03DEBUG_LEVEL1`20fprintf(stderr,"`20`20I\F106`20CMAP`20%lx`20old`20was V\0C04`5Cn", X`09`09`09`09`09(ULONG)chdr,(\0C06xa_chdr_now);\6904if`20(`20x11\DA06flag`20== V`20FALSE`20) X`20`20`7B X`20`20\8F21Fake\9409since`20cmap`20not`20writable`5Cn"); X\4D04\840B`20=\F905\1806return\0C04`7D X`20`20else`20/*`20in\5706th\5507*/\97142`20\9710CMAP:`20size=%ld`20off=%ld V\8703, X`09`09xa_cmap_size,x\0D07off\A307if`20(x11_display_type`20`26`20XA_X11_GRAY) X\2804\8706`20`20for(j=0;j<\590C;j++\2806\2A0A`20`20defs`5Bj`5D.pixel`20=`20 V\7E0B`20+`20j\8106\290Cred`20`20`20\2909\1304gray\2912green`20\2923blue\5225fl Vags`20=`20DoRed`20`7C`20DoGr\6404\0A04Blue\320ADEBUG_LEVEL3`20fprintf(stderr," V`20g`20%ld)`20%lx`20\0404\0404<%lx>`5Cn", X\4308\0505j,\950Bred\0F0Cgreen\110Cblue\210Eay); X`09`09 X\4D06`7D X\0606\0604else\0905`7B X\1D06for(j=0;`20j`5Cn", X\4108\0505j,\E50E\0F0Cgreen\110Cblue\210Eay); X`09`09 X\4D06`7D X\0606\0604XStoreColors(theDisp,theCmap,defs\4908_size)\D806XSync(\2E08Fals V\1A08/*`20following`20is`20a`20kludge`20to`20force`20the`20cmap\1204be`20loade Vd`20each`20time`20\A406*`20this`20sometimes`20helps`20synchronize`20ima\5806ve Vrtical`20refresh`20on X\4507machines`20that`20wait`20until`20\3411to`20load`20colormap\4207/ X\0704if`20(cmap_force_l\2904==`20FALSE)`20xa_chdr_now`20=`20chdr; X`20`20`7D X`7D X X Xvoid`20XA_Time_Init() X`7B X`20`20gettimeofday(`26tv,`200);\1803xa_time_off\4C03tv.tv_sec;\4D04/* X`20*`20return`20time`20from`20start`20in`20milliseconds X`20*/ XLONG\7D09Read\7D07\1805t;\871Bt`20=`20(t\7E08`20-\980C)`20*`201000`20+\2308us V\2403/`201000\3E05\A306(t); X`7D X X\B806\9105void\9109Check(\920Cime_int; X\1203\7108end`20=`20\C50E\A205\2D07\1D03\2B0C\AA0Astar\E405\1108av\D504\0E0B* V`20\0D08num)\CF03\810A\360Anum++\470F/=\1F0C\1D04fprintf(stderr,"l_time\7003%l Vd`20`20av`20%ld`5Cn",\6208,x\4E09\CE05\B50D\F013 X`7D X Xvoid\1904Image_To_Pixmap(act) XXA_ACTION`20*act; X`7B X`20`20ACT_IMAGE_HDR\1805_im_hdr;\1D07PIXMAP\1E0Apm\1E08ULONG`20line_size; X X`20`20if`20(act->type`20!=`20\6009)`20TheEnd1("X\A011:`20not`20Image`20err") V\6004\8C0A\ED03(A\A90E)(act->data\2D09\9B06\2D08\B90C)`20malloc(`20sizeof V\210F)`20\4405\BD07\4809=`200)\B60A\B306to\B309\5306\B004`5Cn"); X\4207x11_display_type\4804XA_MONOCHROME) X`09line_size\AD03X11_Get_Bitmap_Width(act_\FC06->xsize\A105else`20l\3C0B\2711 V\8607\400Dclip) X`20`20`7B X`20`20`20`20\E10A\1A06\4603 X`09XCreatePixmapFrom\8D06Data(theDisp,mainW, X\4404\0404\0808(char`20*)\7210\2A12\E927,a\130Bysize\4B120x01,0x00,1); X\5D05Sync\AC09False)\1A04`7D X`20`20else\F8140; X X`20`20act->type\1203ACT_PIXMAP\3C04act->data\1A03(UBYTE`20*)\490B\2407\5709xpo Vs`20`20=`20\D40Dpos\2810yp\2812ypos\5011size\5010size\5111\2913ysize\2910pixma Vp\2A03XCreatePixmap(theDisp,mainW, X`20`20`20`20\0404\0808line_size,`20\7611,`20x11_depth)\6E04DEBUG_LEVEL2`20fpri Vntf(stderr, X`09"XA_Image_To_Pixmap:`20\9509%lx`5Cn"\650E\1D06\5B05XSetClipMask\B309theGC,N Vone)\2405PutImage\2109\4E13,`20\3606\1B05im\1B06image\FC080,0,0,0,\3C0Cxsize, V\120Cysize\9B07ync(\7308Fals\1806if`20(\650Cclip)`20free\1712\4805DestroyI V\C305\9F11\2405\3E0F); X`7D X X/* X`20* X`20*/ XULONG`20XA_Mapped_To_Display(theImage,in,chdr,h_cmap,i_xbuf,i_ybuf,\6303`20 V`20\0404i_xpos,i_ypos,o_xpos,o_\0E08size,o_ysize,flags) XXImage`20*\6A08;`20\4B06/*`20I\1A05structure\AB05BYTE`20*in\2708\2E0Aptr`20to V`20input`20data`20*/ XXA_CHDR`20*chdr\340B/*`20chdr`20for`20mapped`20i\8806/ XColorReg`20*\ED06\920Bham`20cmap\3805HAM`20images`20*/ XULONG`20i_xbuf,i_ybuf\3906/*`20size`20of`20\9C06buffer`20\3409*i_xpos,*i_ypos V\3604\CF04os\3305\9605in\3C06/out\4315o_\4306o_\431Bdisplay`20window\3E0Esize V\3F05size;`20\B50C\8225flags; X`7B X X`20`20if`20(xa_need_to_scale) X`20`20`7B X\9803`20XA_CHDR`20*tmp_chdr; X\1704UBYTE`20*tmp_pic;\4804\4A0711_d\BA06_type`20==\4404MONOCHROME\5B04\5D08 V\4803\8F05line_size;\1707\4A04flags`20`26`20ANIM_HAM)\1C07`7B`20 X`09\3706ts\F504=`20(*o_xsize)`20*`20(*o_ysize); X`09XA_REALLOC(xa_disp_buff,\0D0C_size,t\3308\7B146)`20IFF_Buffer_HAM6\4F0Ein,c Vhdr,h_cmap, X\A906\0606\0C0C\A808,*\A407,*i_xpos,*i_ypos,i_xbuf,FALSE\8E04else\7C0F8(\7C66 V\3909\2706`20=\0A04ypos\0A030; X`09tmp_pic`20=`20UTIL_Scale_Mapped(0,\A40D\6A10 X`09`09*\8F12\1208xa_imagex\0A09y,\4F08x,\3C03\0D08y,x11_bytes_pixel,o_xpos,o_y V\0706\5106\62080)\D608`7D X\0806else`20t\C909\5C03\CC14in\C211\BF12\5207\0606\0808i_xbuf,\D21E\CF0A\4415 V\E438\B307\D703\B507\0A030;\1D07if`20(\F807==0)`20return(\3E0Aelse`20theImage- V>data\4003(char`20*)\3B07\2D08line_size\2303X11_Get_Line_Size(*\A407\5C09UTIL_ VMapped_To_Bitmap(\5407,t\0807chdr,0,0, X\3606\0606\DA05\F508*o_\F606\1212\9309\7609X11_Init_Image_Struct(\E308\4312 V\3909return(1\1107`7D X\0705if`20(flags`20`26`20ANIM_HAM) X\1A04`7B X\E707LONG`20tsize`20=`20(\6108)`20*`20(*o_\650EXA_REALLOC(xa_disp_buff,\0D0C V\D005,t\380D\87146)`20IFF_Buffer_HAM6\540Ein,chdr,h_cmap, X\4A06\0606\0C0C\B208,*\AE07,*i_xpos,*i_ypos,i_xbuf,TRUE)\9208else\800F8(\806B V\2407`20=\0A04ypos\0A030;`20 X\1E06tmp_pic`20=`20UTIL_Scale_Mapped(0,\A70D\6D10\8F09 X`09`09`20\9D04\9406\A70Axa_imagex\0A09y,\5208x,xa_disp_y,\4005x11_bytes_pixel, Vo_xpos,o_y\0706\5306\65080)\DF08if`20(\C507==0)`20return(\210Aelse`20theImage- V>data\EE03(char`20*)\3B07\2D08X11_Init_Image_Struct(\3E08\F30A\EE08\6609\77071 V)\1106`7D X\0604\0505/*`20clear`20tmp_chdr\B304no`20mapping`20need`20to`20be`20done`20*/ X\D808\0703(x11_display_type`20`26`20XA_X11_TRUE) X\7F06`20`20`7C`7C\D404dr->new_chdr)`20\1404x11_kludge_1==TRUE)`20`20\0303 V\8E09=`20chdr\B706else\1A0C0; X X\1804tmp_pic`20=`20UTIL_Scale_Mapped(0,in,*i_xpos,*i_ypos,`20*o_xsize,*o_ysize V, X`09\D503_xbuf,xa_imagex,\0A08y,xa_disp_x\0A09y,\3304x11_bytes_pixel,o_xpos,o_y V\0706\6606\6508\BC08);\B805if`20(\BC07) X\1104`7B X\0604`20`20\B007\D103\B207\ED06\1D06theImage->data\1A03(char`20*)\4B07\2808X11 V_Init_Image_Struct(\3E08,*o_\9D06*o_ysize\9507`20`20return(1\1107`7D X\150B0)\1504\1304else`20/*`20do`20not`20scale`20image`20*/ X\CC08/*`20convert`20to`201`20bit`20monochrom\2A07`20`20if`20(x11_display_type V`20==`20XA_MONOCHROME)\2B05`7B`20\A607ULONG`20line_size,tsize`20=`20(\D908) V`20*`20(*o_\DD0EXA_REALLOC(xa_disp_buff,\0D0C\510B\3809\6909\6303X11_Get_Line_ VSize\740A\2F08\D204flags`20`26`20ANIM_HAM\C106\C303\0807\26166)`20IFF_Buffer V\1105\A90Ein,chdr,h_cmap, X\4C08\0808\0808\9308,*o_ysize,*i_xpos,*i_ypos,i_xbuf,FALSE\B909`20`20else V\830F8(\836EUTIL_Mapped_To_Bitmap\840E\0D0Dchdr,0,0,\8B11\8313\1211line_size V\8209`7D X\0806else\8D24in\832D\F607i_ybuf,\7F12*i_xpos`20=`20*i_yp\0A050;\1D07theImage- V>data\1A03(char`20*)\920C\2D08X11_Init_Image_Struct(\4308,*o_\9B0E\8309return( V1\1107`7D X\0705/*`20convert`20from`20HAM`20*/\1B05if`20(flags`20`26`20ANIM_HAM) X\1A04`7B X\5306ULONG`20tsize\B604\7C08)`20*`20(*o_\8006\0D03x11_bytes_pixel;\CB08A_REALL VOC(\EA0C,x\0D0B_size,tsize\CA09\99146)`20IFF_Buffer_HAM6\540Ein,chdr,h_cmap, X\4A06\0606\0C0C\C408,*\C007,*i_xpos,*i_ypos,i_xbuf,TRUE)\9208else\800F8(\806B V\2407`20=\0A04ypos\0A030;\1D07theImage->data\1A03(char`20*)\A10C\2D08X11_Init_ VImage_Struct(\4308,*o_\9F0E\8309return(1\1107`7D X\0705/*`20remap`20image`20to`20match`20new`20cmap`20*/\2805if`20(\0703(x11_dis Vplay_type`20`26`20XA_X11_TRUE)\6C07`20`20`7C`7C\C604dr->new_chdr)`20\1404x11_k Vludge_1==TRUE)`20)\8705pseudo`20color\9407\7C07`7B X\5406ULONG`20tsize`20=`20(\EB08)`20*`20(*o_\EF06\0D03x11_bytes_pixel;\3F07XA_R VEALLOC(xa_disp_buff,\0D0C_size,tsize)\3808UTIL_Mapped_To\0A07\430Ein,chdr,*i_x Vpos,*i_ypos, X`09`09*\A607,*\A207,i_xbuf,i_ybuf\6609\3B07\D903\3D07\0A030;\1D07theImage->dat Va\FD04char`20*)x\860B\E80911_Init_Image_Struct(\4308,*o_\910E\8309return(1 V\1107`7D X\0604/*`20nothing`20needs`20to`20be`20done`20*/\2305\9E19in\4A06\921Fi_xbuf,i_ Vybuf\7D07\8C0D`7D X`7D X XULONG`20XA_Read_Int(s,j) XUBYTE`20*s;\2107*j; X`7B X`20`20\0E06i,num;\0F03i`20=`20*j;`20num\0A030;\1303while(`20(s`5Bi`5D`20>=`20' V0')`20`26`26`20\1106<=`20'9')`20) X`09`7B\3605*=`2010;\0B05+=`20(ULONG)(\2C04)`20-`20\1008'0');`20i++;\B603`20 V`20*j\6E03i;\D103\0D03\D407num); X`7D X Xfloat`20\D208Float\D425\BD04\3C06\DD16.0\DF42float\DF0B\1007\DF0Fif\4F07==`20' V.') X`20`20\A804\9F08pos`20\5704\9106\2F03\3804\0A05\9D28\2C04`7B`20\0705`20`20 V\9C08\9D1C)`20/`20pos\7006`20`20\8204\DA05.0;\7F05\1805\BB04\0404*j\9F03i; V\1203\0D03return(num); X`7D $ call unpack XANIM.C;1 - 657711829 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X XThis`20describes(rather`20roughly)`20the`20animation`20types`20supported`20and V`20some Xof`20their`20special`20features.`20It's`20more`20of`20an`20organized`20ramblin Vg`20but Xmight`20give`20insi\0D04into`20wha\4104go\2904on. X XFLI/FLC`20A\9708s: X X`20`20FLI`20is`20by`20Autodesk`20\2206or`20for`20\CA04PC's.`20Support\2E04 V\1908320x200 X`20`20images.`20The`20file\2604composed`20\C204`20series`20of`20\2C06`20and V`20deltas(a\0906\4804s`20data`20that`20can`20generate\7005next\3F06\F305n`20a V`20previous\1706)`20to\4603be`20played`20in`20sequence.`20An\EF05animation`20 V\6104also`20chang\6406color`20map X`20`20during\1705anim.`20FLC's`20have\7B03few`20additional`20chunks\D705has V`20support X`20`20for`20larger\BC07sizes. X XIFF`20An\8D07\3A06Images: X X`20`20\1E04files`20were`20developed`20\5004\9304Amiga.`20Sound`20\7E08re`20cur Vrently X`20`20ignored.`20Most`20\710D\5D07\3204meant`20to`20be`20double`20buffered. V\4503Th\7F04ltas`20refer`20not\2E04\8504previous\DB06,`20but`20the`20\EA06befo Vre`20the\4703\2B08(two`20back).`20I`20know`20of`207`20types`20of`20compression Vs`201,2,3,4,5,l`20and X`20`20J.`20I've`20only`20included`20\3E063,`205,`20\2A05`20J`20becaus\8004ose V`20\EA04\9B04only\4703ones`20I`20could`20test.\E905J`20type\840C`20has`20an V`20ANSI`20chunk`20a\E505\4503end`20which`20\8907s`20\6305rder`20in\1C07\1304de Vlt\4804\8504o`20be`20applied\4503\AD04they`20can`20be`20used`20mo\AF05an`20onc Ve.`20`20T\9704l`20(small`20L)`20\A805anim`20is X\4603lso`20support`20in`20revs`20229\5F05higher.`20It's`20a\DE0D\4705I've V\6903ly\4903found`20in`20ol\C604animations.\1D03NOTE:`20newer`20types`20of V\4F0D\E1046,7,8`20\7804scala`2032`20bit. X\4003IFF`20\520A\F208looping`20or`20non-l\0F06.`20Lo\1806means`20the`20last X`20`20two`20deltas`20produce`20image\2504at\8505\2E04same`20a\3A061st`20\3704 V\2806.`20To\4803continuously\8605`20an\A00A,`20you`20would`20not`20jump`20back V`20to\5405beginning\4B03but`20t\17062nd`20image`20instead.`20In`20order`20 V\2303\6805\E80B\710As X`20`20\730Beed`20to`20\7705\5B07\C604image.`20There's`20no`20way\2104know`20ah Vead\4803of`20time`20which`20is\0907so\4805default`20is`20\860Ad`20if`20\8004ha Vve`20a\4503\A615`20use\4505-c`20switch. X X`20`20The`20Amiga`20has`20a`20couple\8804weird`20display`20modes,`20EHB\7305HA VM.`20XAnim`20fully`20 X`20`20supports\2507\7807s.\2D04`20can`20produce`204096`20colors(4`20bits`20ea V\E603red,\4803green,\6705blue)`20from`206\2906per`20pixel.`20One`20True`20a V\2A03Direct`20Color\4403\B707s`20this`20is`20no\7F04blem\3904`20lesser`20 V\2707,`20you`20have\0904r`20choice\4703of`20332`20or`20Grayscale.`20\1204mean V\5D04e`20`208\9905(for`2025\D807\590Aless\4903\1E04others)`20is`20divided`20in Vto`203\DA06of`20red,\0F0Bgreen`20\DE042`20bits\9106bl\F307\7E04HAM`20images V`20are`20mapped`20to`20fit.\3003Surprisingly`20enough,`20it's`20not`20too`20ba Vd`20\9E04most`20anims.\3803NOTE:`20HAM8`20is`20recently`20ou\2404\7B04at\1904s Vupporte\8D06same`20way. X\4203IFF`20\1F07s`20color`20cycling`20chunks`20\4505specify`20\2206ranges`20 V\C003be\4403cycled`20\2709ied`20intervals.`20Since\7A04re\D105`20obvious`20en V\9103o`20this\4603type`20of`20animation,`20I`20just`20display`20\BD04image`20f Vor`20a`20set`20i\6807(see\4503xanim_config.h)`20an\F405n`20move`20on.`20Early V`20Amiga`20software`20totally\4103screwed`20up`20by`20saving\F607cycl\0E05hunk V\BE04ab\F704in\8B03lot`20of\4003images`20that`20were`20never`20meant\ED04be V\4805ed.`20This`20goes`20\CF05\F708s X`20`20as`20well.`20 X X`20`20Single`20IFF\5E08\B304supported`20\2D09Uncompress\1604nd`20\3D03\1208ion V`20type`201`20\3E0D.`20(XAnim`20makes`20use`20of`20the`20public`20domain X`20`20unpacker`20routine`20by`20Jerry`20Morrison`20\7404Steve`20Shaw).`20see V`20\3808.c. X XGIF`20Images/A\F109. X X`20`20The`20\1E04file`20consists\8C04a`20screen`20color`20map`20\6804then`20a V\6203ries`20of`20images, X`20`20each`20with`20their`20own`20optional\460A.`20\7304\3606`20don't`20ha V\BB03to`20be`20at\4903the`20origi\DB06can`20\1B04ny`20size`20smaller`20th V\1903\2C04\A907size\5E04is`20allows X`20`20\DB04an\F208\6507created\4104t`20only`20update\4D05part\D804\590A\9205 V\2A03changes.`20I`20\B80Ba`20program`20\2505does`20this`20yet`20but`20txtmerge V`20i\9104a`20step`20i\BA04\2F04irection.`20Also\7605GIF89a`20spec`20has`20incl Vuded`20some`20extensions\9808are`20a\E408\3705ific.`20`20Rev`202.29.1`20and V`20up\4F05limi\FE04support`20for`20\4B05ese.`20`20Comment`20field\7D04\9004 V\0E03les`20\6A04displayed`20if`20you`20use\B705-v`20(verbose)\5003option. X X`20`20\4104image\4206automatically`20uncompressed`20when`20read`20in.`20This V`20might X`20`20change\9004\6D04future. X XTXT`20files\6904Probably`20should`20be`20call\ED04omething`20else.`20Basi V\8006it`20is`20a`20ascii`20tex\6D04file`20that`20lists\1F03number`20of`20 V\CE04files`20to`20be`20displayed.`20Optionally,`20you X\B603an`20specify\B805sequence\C506\4605ar\440B\F805`20Comment\1C05n'\9104supp Vorted.`20I`20need`20to`20put`20a`20lot`20of`20work`20and`20thought`20into`20im Vprov\F804this X`20`20one. X X`20`20TXT`20format`20need\CD05have`20txt91`20as`20the`201st`205`20characters V\5503\BA09. X`20`20Follow\5F06at`20there`20\D104a`20series`20of`20fields.`20Fields`20just V`20\6B06o`20be\DD04eparated`20from`20each`20other`20by`20white`20space.`20No V`20extraneous\980B\4503(ie`20comments)`20\8404supported,`20yet.\F604`20`20 V\E007\0903<---`20header`20so`20XAnim`20knows`20what`20kind\BF06le`20it`20is V\41064`20\0705\4107number`20of`20GIF`20filenames`20that`20follow\3706a.gif`20 V\3708\0C04\5905to`20be`20read`20in.`201st\7107s`20\5B070.\4106b.\4107\0F06c.gi Vf\0B06d.\1A0D6`09\9C11fr\9510.`20\2D060`201`202`203`20\3206display`20imag V\3003in`20this`20order.\31062`201 X\0A03The`20sequence`20will`20be`20\E406\A906c.gif\9B07\0C06b.gif.`20Most`20lik Vely\4803\6005anim\4509looped`20and`20the`20last`20\5306\2205flow`20smoothl V\A903nto X`20`20\7906as`20it`20starts`20over. X XDL`20files X\2603I`20only`20threw`20these\E204because`20it`20was`20easy\7D05intense`20pres Vsure`20from X`20`20friends.`20`20As`20far\7704I`20know,`20they`20come\5904three`20resolutio Vns,`20320x200,\4703160x100`20\6B0480x50.`20T\3E06nsist`20of`20a`20series`20of V`20images`20with\1803frame X`20`20list`20at\7804`20end`20that`20gives`20\1304order`20\9505are`20displaye V\DC04\6E05re's\4603also\5504ield`20for`20Author`20and`20Title`20\5805is\420Cf V`20you`20specify X`20`20`20-v`20(verbose)`20option. X`20`20 XPageFlipper`20Plus`20F/X`20Amiga`20files X\2503A`20\EA0Adeltas\EA08play\E710.`20Supports`20color\4103map`20changes,`20ne Vsted`20loops`20\C504dynamic`20timing. X XGoldDisk`20MovieSetter`20Animations.\9404Problem`20\7504most`20flexible`20an V\2907`20I've`20seen.`20\3E0A`20are`20stored X`20`20as`20a`20bunch`20of`20backgrounds,`20sounds\A205sets.`20Sets\3E06mall V\9303images\4603that`20get`20placed`20on`20top`20of`20\9F04\560A(with`20transp Varent`20pixels). X`20`20A`20frame`20list`20at`20\3B04end`20\5D05`20describes`20each`20frame.`20E Va\0C08\4103specifies`20which`20\780A`20to`20use(b\E00A`20can`20also`20scroll V`20in\4303differ\9904directions`20and`20speeds),`20\0D04a`20\A405of`20sets V\5D04put`20on`20that\4603\790B\F105depth`20information`20so`20characters\8B05p Vass`20behind`20or\4503in`20fron\6705\F305other.`20S\5805\4D0Cif`20contained V`20here`20as`20well X`20`20to`20sync`20it`20up\0E04the`20action.`20Th\2D04is`20also`20color`20cycli Vng\F508cialty\4903fades`20a\D305pes. X X`20`20NOTE:`20Th\4204ni\8E07\CD04come\8504one`20file`20or\0F04three`20director Vies X`20`20\5204a`20control`20file\9805\2C12`20are`20usually`20Moviesets,\4303 V\0D05back\A006\1C06ounds.`20You`20might`20have`20to`20creat\6004e`20links V\4103mo\4E07`20->`20\5B09\9C06movie\5D06\1D08\0E06or`20vice-versan X`20`20becaus\5A06Amiga`20is`20case`20insensitive.`20Sounds\CE05ignored`20for V`20now. X X`20`20Eric`20Schwartz`20has`20created`20several`20of`20these`20animations V\1103at`20you`20\4203absolutely`20need`20to`20see. X X X X X X XMark`20Podlipec`20`20p\0A07@wellfleet.com X X $ call unpack XANIM.DOC;1 - 2002916503 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim.h X`20*\0E04Copyright`20(C)`201990,1991,1992`20by`20Mark`20Podlipec.`20\3304All V`20rights`20reserved. X\4E06This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\AF07notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20\110Bsys/types\1706fndef`20VMS X\230Eparam.\3A0Dmemory\140Falloc.h> X#endif X\460Btdio\7C0Ftdlib.\140DXl\120F"xanim_config.h" X X#define`20LONG`20int\1109UL\1204unsigned\1B0DBYTE`20char X\2D09\1305\2D09\1C0DSHORT`20shor\5D0B\1506\3109\1E0EWORD\1306\920E\1805\340E V\2105\2209TRUE`201\0F09FALSE`200 X X X#ifndef`20MIN\1E09MIN(x,y)`20`20`20`20(`20((x)>(y))?(y):(x)`20) X#endif X\3E0AAX\3E0AAX\3E16x):(y)`20\3E0A/*`20Read`20xanim.readme`20at`20the`20end`20f Vor`20more`20info`20on`20this`20line X*/ X\7C08HZ\7B09HZ`2060 X\9D09\9108S_PER_60HZ`2017\7705X11`20variables`20*/ X\2D09XA_GRAYSCALE`090x06 X\1A0BSTATICGRAY\1B043 X\1B0BPSEUDOCOLOR`090x14\3712\1C091 X\1C0BDIRECT\1C098 X\1C0BTRUE\1A099 X\1A0BMONOCHROME\89040 X\1C0CX11\7207\1C04\6D0DX11_\BE082 X\190FCMAP\1904\BB0DX11_TRUE\1904\9C0DX11_C\9C080 X Xextern`20LONG`20x11_depth; X\1710class;\1711bytes_pixel;\1D12itmap_unit\1D15_order\6C13map_flag\1B17size V\1B12disp_bit\A613cmap_type\3613epth_mask;\5215lay_\3A16red_\3816green_\1C16bl Vue\1B17red_shift;\5217\1D17blue_\1C17red_bits\5318\1C16blue_\1B18ac\BC13white; V\1711verbose_flag\1E09UL\1F08kludge_1; X X#define`20X11_MSB`20`201\130DLS\13030 X\610Ea_anim_holdoff\7E0F\1D07status; X\4D09A_RUN_NEXT`20`20\5304\190FPREV\1904\7F0BA_STEP\33082 X\1910\33073 X\190BFILE\32084 X\1910\32075 X\4B0DOP\32086 X\1910\32077 X\190BUNSTARTED`20`20`208 X\330DHOW_NORM\E210SHOW_SKIP\E205\1A09UNKNOWN_ANIM\320CIFF_\1406\3003`201 X\1808FLI_\180A2 X\1808GI\300C3 X\1808TXT_\180A4 X\4809ADE_\19095 X\1808DL\2F0B`206\1809JPG_\190A7 X\1808PFX_\180A8 X\1808SE\780C9 X\1808RL\770B10\1809MP\600B11 X Xtypedef`20struct X`7B X`20`20USHORT`20red,green,blue,gray; X`7D`20ColorReg; X\3C0F`20XA_ACTION_STRUCT X\4D03LONG`20type;`09`09/*`20type`20of`20action`20*/ X\2206cmap_rev;`20\C906\0303/*`20rev\2D04cmap\2B05UBYTE`20*data;\4F05data`20ptr V\1E05\8617`20*next; X\200BCHDR\1E09chdr; X`20\D708`20*h_cmap;`09/*`20For`20IFF`20HAM`20images\8806\B405*map;\771F_same_ V\6305`20/*\AA04to`20next`20action`20with`20same\E605*/ X`7D`20\4A09; X Xtypedef\BC16 X`7B X`20\8A05rev;\C20Ccmap;\A708csize,coff\1309\BA07\0D06msize,mo\2005\6815\CB06; X`20\9A09`20*acts;\301Bw_chdr;\CF06CHDR\CD11\BE04\A214BYTE`20data`5B4`5D\4004AC VT_CMAP_\4514\5E04FRAME_\7B06\5504\A70F;`09/*`20ptr`20to`20relevant`20Action V`20*/\2F03\8405time;`09\2B04#`20of`20millisecondes\2704\C805FRAME\C915\CA08oun Vt;`20`20`20`20/*`20number\4E04loop\4605\6D07cnt_var;\2806var\9C04keep`20track V\330F\5B06end_frame;\3404last`20frame\2D08\A506ACT_BEG_LP_HDR;\AB10\2005END_LP V_STRUCT\BD0B*c\BE09\9906points`20b\9304to`20beg_lp->count\CE0B*c\CF0A\391E V\2806\D60Cbegin\D808\3B04firs\DA13\A409end_\2F08\6B1B\2709\3D06XA_ACTION`20*pr Vev_end_act;`20/*`20used\3B04nest`20loops`20during`20creation`20*/ X`7D`20ACT_END_LP_HDR; X Xtypedef`20struct\6405NIM_HDR_STRUCT X`7B X`20`20\B705file_num; X\1107anim_type;`09/*`20anim\6A06type\B306\2705imagex;`09`09/*`20width`20\1C0Fy V;\1C05height\1D10c;\1D05number`20of`20colors`20\270Fd;\2705depth`20in`20plane V\260Cdisp\8507display`20\8D10disp\8C07\2308\9411anim_flags;\1308loop_num\A910t Vimes`20to\2105\3905ation`20\4D0Aloop_frame;\3B04index`20of`20\3105frame\2D0Cas Vt_\2D14ast\2D0Cchar`20*na\2804\9105\1A04of`20anim\2206XA_FRAME`20*frame_lst V\5305array`20of`20Frames`20making`20up`20the`20\C10FXA_ACTION`20*acts\4106ctio Vns`20associated`20with`20this\4010struct\4705NIM_HDR_STRUCT`20*next_file; V\281Eprev\2807`7D`20\210B; X X#define`20ANIM_HAM`20`20`20`20\03030x00000009 X\22106`20\220E1 X\220DLACE\220F2 X\220DCYCL\2306\22094 X\66108`20\220E8 X\220DPIXMAP\220B100 X\220FNG\440B100\2210NOLO\4305\220620000 X/*`20single`20buffered,`20x11_bytes_pixel`20*/\490ES_BUF_D`20\490510000\4906do Vub\490D1`20byte`20per`20p\4A15D_BUF\93082000000 X Xtypedef`20struct X`7B X`20LONG`20imagex; X\0E0By;\0E07xoff\0C08yoff; X`7D`20SIZE_HDR; X\5211`20 X\3707pos;\3708\0C0Bxsize;\1908\0D07XImage`20*image; X`20UBYTE`20*clip;\6F03ACT_IMAG\744DPixmap`20pixmap\100A\740CPIXMAP\7515`20STRU VCT_ACT_SETTER_HDR\8B05XA_ACTION`20*work;\8508back,yback\1309pback,ypback;`20 V\3B0D\280Dface,yface\3B0A\1406pface\1508depth;\470D\1F07\B51C`20*next\F408 V\180A\F411\DE05\7F08os; X`20\0D06yp\0D0Bxsiz\7204\1B07\0E0Dps\0E07UBYTE`20*clip;\0F0Adata;`20\8807MAPPE VD\885F\0E05rbit\380Agb\0E0Cbb\0E07\B223TRUE\B057k_\1008\8815data`5B4`5D;\8A08P VACKED\8C1A\8B0C\8A0C\890D\880DXImage`20*image; X`20\870B_ptr; X\7906CLIP\7707#define`20ACT_NOP`09`090x0000 X\180CDELAY`090x0001 X\190CIMAGE`090x0002 X\190CCMAP\18063 X\180CSIZE\18064 X\180CFADE\18065 X\480DLIP\18066 X\180CPIXM\62087 X\620DETTER`090x0008 X\1A0CRAW`09\18069 X\4C0DACKED`090x0010\F80EIS\640611\180DMAPPE\3207\F80ETRUE\1806\F80E\B006S`09 V\1B05\FB0EIMAGES\1A06\FD0FYCLE\1906\FE0EBEG_LP\1A0410\B20EEND_\1A08\B40EFLI_LC V7`090x1007 X\1B10COLOR`090x100b X\3812\1A06c X\1A10BLACK`090x100d X\1D11RUN`090x100f X\7012PY\1C0510\1C0DIFF_BODY`090x20\DD0FIFF_DLTA0`090x2\FA10\1D081`20`20`20 V\1F05\FF0E\1F082`20\1F072 X\1F143`20\1F073 X\1F144`20\1F074 X\1F145`20\1F075 X\1F14J`20\1F0649\1F15l`20\1F066c\1F11HMAP6`20\1F0520\F812HMAP8`20\1F071 X X X/*`20flags`20*/ Xextern`20LONG`20xa_verbose; X\180Fdebug;\1610jiffy_flag\1B11buffer\1C16optimize\1E16use_depth_\1F06\D009DEB VUG_LEVEL1\CF03if`20(\9A08`20>=`201)`20 X\2B132`20\2B122)\2B153`20\2B123)\2B154`20\2B124)\2B155`20\2B125)`20 X\2C09XA_CMAP_SIZE`20256\190CHM\1908`2064 X\190F6_\1A0516\19108_\190564 X X/*`20CMAP`20function`20flags`20for`20ACT_Setup_\2205*/\4709CMAP_DIRECT`09`090x V000000\1E0EALLOW_REMAP\22081 X\D40A\D106CALE4`204369\19136`201040\19138`20`20257\19139`20`20128\191311`20 V`2032 Xextern`20ULONG`20cmap_scale`5B17`5D; X\1D07\1C0Atrue_to_332;\1E1Agray\1F13dither_type; X X\1F11luma_sort;\5A14y_to_1st_flag\2213map_t\221Dplay_nice; X\1C07XA_CHDR`20*xa_chdr_sta\7F0B\1F11cur;\1D19now;\1D08ColorReg\1E06map\1A09UL V\9004\1607_siz\8E0A\1B0Eoff;\1A0E\4C08_map\DF13median_typ\530A\1E11cach\1F0ASH VORT`20cmap_floyd_erro\E30A\3E0Bap_to_one_flag\220Epod_max_colors;\3E12hist V\3813\980Cbits\EF0Fcmap_cache_siz\B50A\1E11\3C1Emask\1E0A\F206*c\2009\1B09XA_C VHDR`20\1C0B_chdr; X X Xtypedef`20struct X`7B X\6707rate;`09/*\0905`20at`20which`20to`20cycle`20colors`20in`20milliseconds V`20*/\4108flags;`20`20`20/*`20flags\1C0Bsize;\1B03\1C04size`20of`20color`20arr Vay\2A0Bcurpos\2C03/*`20\0C06\7304\260BBYTE`20data`5B4`5D\2706\1D06\5204map`20p Vixel`20values`20\BE09*/ X`7D`20ACT_CYCLE_HDR; X X/*`20\1309\B307\3807*/ X/*`20NOTE:`20ACTIVE`20isn't`20currently`20checked.`20It's`20assumed\7104be`20a Vctiv\7505#define`20\7B0A\4F07`200x01 X\1F12REVERSE`200x02 X\1F12STARTED`200x80000000 X Xextern`20void`20TheEnd();\16131(\170FShowAnimation(\1D14cti\1A12Cycle_It\180BU VLONG`20X11_Get_True_Color\2319Line_Size(); X\E708\1D08Monochrome(r,g,b)`20(((ULONG)(r)*11`20+`20\1008g)*16`20\100Ab)*5) V`20>>`205) X X X/*`20 X`20*`20Useful`20Macros\1204/ X\7511Bitmap_Width(x)`20`5C X`20`20(`20((x`20+`20x11_bitmap_unit`20-`201)/\150F)`20*`20\2810) X X\670CMake_Pixel(p)`20`20(x11_cmap_type`20==`200)?(p):`20`5C X`09`09\7C04(p)<<24)`7C\0A0616\0A088)`7C(p))`20`26`20x11_depth_mask\720DA_PIC_S VIZE\6F04(`20(xa_use\2F07flag==TRUE)?(\2104\BF07ytes_pixel\8908p)`20\570EGET_TI VME(t\5708jiffy_flag)?(\100E:(t)`20\400EMEMSET(p,d,size)\6703`7B`20if`20(x V\810E==4)`20`7B`20ULONG`20_sz=(size);`20`5C X`20`20`20`20\1806*_lp=(\0C07)p;`20while(_sz--)`20*_lp++`20=`20(ULONG)(d);`20 V`7D`20\4104else\76162)\761CSHORT`20*_sp=(U\0D07\7813sp\7807SHORT\7911`7B`20mem Vset(p,d,s\6106\1F04`7D X X#define`20XA_REALLOC(p,cur_size,new_size\A404\BE04\1008`20>`20c\2407)`20`5C X`7B`20char`20*_tmp;`20\7704\2D04p`20==`200)`20_tmp=(\2206)malloc(\5909\2F06 V\A605\280Dre\2906p,\2B0F\5A04_tmp\5D07TheEnd1("XA_R\3406:`20\6506`20err") V\3606p`20=\6005;`20\B808\1103\5A08;`20`7D`20`5C X`7D`20 $ call unpack XANIM.H;1 - 342776 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' Xxanim Xunpacker Xxanim_act\0A07cmap\0B07dl\0907fli X\0A06gif X\0A06if\0A08pfx X\0A06se\4608tx\0A08utils X\0C06x11 Xsys$share:decw$xlibshr/share\1D11tshr.exe\1F17mlibshr\220A $ call unpack XANIM.OPT;1 - 1701512366 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X X XXAnim`20was`20written`20to`20display`20various`20types`20of`20animations`20in V`20an`20X11`20 Xenvironment.`20It`20should`20support`20most`20\5308types.`20 XThe`20intent`20was/is`20to`20develop`20a`20base`20player`20that`20allows`20new V\850A Xt\9805to`20be`20added`20as`20they`20are`20\4E07ed. X XBefore`20you`20compile,`20edit`20the`20Makefile\4A04choose`20your`20favorite V\3308r, Xoptimization`20flags`20and`20to`20indicate`20where`20the`20X11`20librarie V\2806includes Xare`20located. X XAlso\8F0A\8B05xanim_config.h`20to`20setup`20up`20\9C0Edefault Xconditions.`20Most`20of\4E04se`20can`20be`20overridden`20at`20run`20time. X`20 XOnc\E409d,\7B06\3605display`20\9605ollowing: X X`20`20`20`201)`20FLI`20anims.\12052)`20FLC`20\120B3)`20IFF\1205ations`20type V`203,5,J(movies)`20and`20l(small`20L`20not`201)`20\450B4)\4505color`20cycling V`20dur\0704single`20images`20\4A04\6C0A\3E065)\3E05\2207(EHB,HAM\2B05HAM8) V\25056)`20GIF87a`20\1804GIF89a`20files(including`20multip\6E09).`20 X\3C047)\3108\7B09`20extension`20support.\2B058)`20a`20kludgy`20text\6305`20lis Vting`20gifs\8005what`20order`20to`20show`20them`20in\47069)`20DL`20\E90F10) V`20Amiga`20PFX(PageFlipper`20Plus`20F/X)`20a\330F1)\3307MovieSetter`20\250A(Fo Vr`20those`20Eric`20Scwartz`20fans).\42052)`20any`20combin\FC06of\AE04`20above V`20on`20\0D04same\2504mand`20line. X X XOther`20features: X\DC051)`20On\3405fly`20scaling`20of`20\BC0F`202)`20Opt\7104to`20use`20default V`20cmap\23063)`20Merge\4F05cmaps`20of`20several`20anims`20to`20prevent`20colo V\9003lickering\45064)`20no`20buffer,`20\0806`20and`20pixmap`20options`20for V`20speed/memory`20tradeoffs\48065)`20looping`20\3E06ng-pong`20o\4106\26066) V`20User`20selectable`20X11`20Visual`20supported`20\6E04Multi`20\1B07Server V\46077)`20Tim\6B04\9E0Cbenchmarking`20purposes\31068)`20Forwards/Back\0A06sing Vle`20step\B805from`20keyboard. X X XComm\CD04Line`20Usage`20\0F04Options: X Xxanim`20`5B`20`5B+`7C-`5Dopts`20...`5D`20animfile`20\1A03\1C05opts\170A`5D`20. V..`20`5D X XA`20+`20turns`20an\CB07`20on`20\6404a`20-`20\1B06it`20off.`20 XNOTE:`20you`20can`20reverse`20the`20meaning`20of\5103\3E04-`20`20by`20edit V\1704xanim_congif.h.`20 X`20`20`20`20`20`20Read\3F05comment`20above`20DEFAULT_PLUS_IS_ON. X XO\F309\3903C`5Bco\D105`20Color`20SubMenu X`093`09Convert`20True\1D06anims`20to`20332(StaticColor). X`09g`09\301Bgray`20scale. X`09a`09Create`20single`20cmap`20\EA04re\0A05ll\390Athat. X`09d`09Use`20floyd-steinberg`20dithering`20if`20image`20need\3904 X`09`09be`20remapped. X`09l`09Luma-sort`20each`20new`20cmap(sometimes`20reduces`20flickering\D904t V`09Try`20mapp\6A04\9E04cmap\9E051st.`20C\CD06\5008s`20if\7E03that`20fails.(gre Vat`20for`20grayscale`20weather`20gifs) X`09f`09Forcibly\B506\6805image\6908\5D05. X`09n`09Play`20Nice`20and`20alloc\8104colors`20from`20default`20X11`20\3807h V`09Use`20histogram`20if\3208need\6504be`20reduced. X`20`20`20M`5Bmopts`5D\0A03edian`20Cut`20SubMenu X`09a`09final\4406`20of`20box`20is`20based`20on`20ave\1704pixels`20in`20that V\2604. X`09c`09\3D1Fcenter\1A04\360Bo`09\C204remapping`20cache\B904remap`20old\EC05s V`20to`20new`20\F907b#`09Truncate`20rgb`20components`20#`20bits`20before`20m V\E706cut. X`20`20`20S`5Bsopts`5D\0A03caling`20and`20Sizing`20SubMenu X`09i`09Scale`20height\B204IFF`20anims`20by`201/2`20if`20they`20are`20Interlace Vd. X`09n`09Prevent`20Window`20from`20chang\6404size`20when`20switch\1404between X`09`09animations(w\3E06will`20be`20maximum\4006needed). X`09r`09Allow`20user`20to`20sc\B804\4709`20on`20the`20fly. X`09s#\D807anim\C904floating`20point`20#. X`09h#\240Chorizontally\3117v#\310Cvertic\2F1Bx#`09Set\2D06width`20to`20integ V\C103\2104y#\210Aheight\220F X`20`20`20b`09buffer`20images`20of\F407on.(GIF,DL,PFX`20and`20Moviesetter`20ani Vms +-+-+-+-+-+-+-+- END OF PART 2 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 9 Archive-name: xanim/part03 -+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X`09are`20always`20\4806ed.`20This`20will`20use`20more`20memory.`20 X`09BUG:`20Buffer\D004of`20some`20IFF`20type`20J`20anims\4006not`20be`20correct V. X`09\B203\0303\0404(I`20know`20how`20to`20\2307`20this,`20but`20it's`20a`20fair V`20bit`20of X`09\4004code\CF05I`20haven't`20had`20time). X`20\2103`09T\C104is`20used`20to`20tell`20XAnim`20that`20an\B00A3,5`20or`20l X`09animation`20is`20non-loop\E404\6D04\3805it`20needs`20\5404reat X`09it`20a`20\9F04differently.`20If`20\6414`20an\6307 X`09looks`20right`20the`201st`20time\6E05is`20screwed`20up`20on`20\22042nd X\3704p,`20you`20probably`20need\9204use`20this`20flag. X`20`20`20d#`09se\5F06debug`20level.`200\6104off,`205\0A04highest.\3304f#`09fad Ve`20flag.`20support`20has`20been`20temporarily`20removed.\3704F`09Floyd-Steinb Verg`20dithering\BF04Mono`20Displays.\3104h`09display`20help`20screen\1A05j# V`09#\9604number`20of`20millisecond\8704tw\8A04frames.`20Fastest\32041ms. X`09j0`20will`20turn`20off`20forced`20timing`20and`20anim\2506run`20at`20defaul Vt X`09speed.`20D\1006`20speed\5B057`20ms`20unless`20specifi\1A04nside`20the X`09animation`20itself\CD05l#`09loop`20follow\8006\2708#`20times`20before`20go V\1F04to`20next`20\2706on\4606p#`20`20ping-pong`20\4D30\9C0B\4F05N`09No`20displ Vay.`20Useful`20for`20benchmarking\2A05o`09turns`20on`20certain`20optimizations V.`20Turn\6B05his`20off`20would`20 X`09only`20be`20u\5F06if`20you`20are`20buffer\3506e`20anim`20and`20wish X`09to`20run`20\1A09backwards.`20NOTE:`20On`20Monochrome`20\C607s X`09with`20Floyd-Steinberg`20dithering,`20\B80C`20is`20forced`20off\EA05p`09Use V`20Pixmap`20instead`20of`20Image`20in`20X11.`20The`20`201st`20loop`20of`20each V X`09\AA05will\F104shown`20us\E104Images`20at`20which`20time`20they`20are`20 X`09converted`20to`20pixmaps.`20This`20speeds`20up`20the`20d\8F04\3E05at`20star Vtup X`09time.`20`20A\B808on`20most`20machines`20won't`20actually\9E04in`20offscreen V X`09memory.`20It\BF06us\290Cma\0504emory,`20but`20\6008servers X`09an\E306`20is`20copied`20somewhere`20and\BC04n`20to`20\C404\7506,`20\1E07s V`20a X`09P\B906\3F0Adirectly`20\350D.`20Th\2404an`20amount`20to X`09quite`20a`20bit`20of`20speed`20up.`20`20Also,`20if`20you`20are`20running V`20across\7A04network,\6605\870Akept\E804\1604local`20machine,`20which`20usual Vly X`09speeds`20things`20up\D204well(plus`20reduces`20\6707`20traffic). X`09NOTE:`20\9D07don't`20buffer(+b)`20an`20fli`20or`20IFF`20anim,`20pixmap X`09wo\2D06y`20\D805nything.`20\BF06s`20are`20only`20implemented X`09for`20\6106ed`20image`20data. X`20`20`20r`20`09Allow`20color`20cycling`20f\7F07single\3506s.`20(normally V\6603) X\3F03R`20\3F1Danim\370Eff\3805t`09Print`20timing`20info`20at`20startup`20and V`20after`20each`20looping`20sequence\BA05T#`09Title`20options`20`20`200`20XAni Vm X`09`09`091`20Xanim\4A05Anim`20name.`20Frame`20#`20only`20if`20stopped.`20 X\34032`20Xanim,`20\3109\3F05\3407\7505v`09verbose`20mode.`20prints`20useful V\C707bout\B806anim\3705X`20\050411`20v\3E0DPr\3E05\370Bdisplay`20\7804visuals. V\4104V#\0503Select\1807`20#.\C804f`20\6A05\1407printed`20out`20by\7703option V\4305-`20\0503Turn`20off/on`20following\2607\6A06+`20\2709n/off\2714`09NOTE: V`20polarity`20of`20-`20\B304+`20are`20selectable`20at`20compile`20time. X XAnim`20Window`20Commands: X X`09q`09quits. X`09Q`09\0A08g`09stops`20color`20cycling. X`09r`09restore`20original`20cmap.(useful`20after`20g). X`09space`09toggle.`20starts/s\5605animation X`09,`09go`20to`20previous`20frame`20within`20current`20anim.`20Direct\3705`09i Vs`20set`20to`20backward\B704.`09\4E06next\4A32forw\4907<`09go`20back\1804 V\BC05`20of`20\A509anim X`09>`09go`20\3507\280D\7F05anim X X XExamples: X X`09To`20display`20a`20single`20animation\2104`09xanim`20iff3.\4006\340Enonloop Ving`20IFF\3C15+c\3F18A.fli`203`20times,`20B.anim`20and`20C.movie`202`20times V`20each`20\1904D.fli X`09once`20before`20repeating\740B-l3`20\5E06-l2`20\5907\5508-l1`20\4806\8E05se Ve`20A.\2205real`20slow(2`20seconds`20for\7F06frame)\D90Cj2000`20\3C06\DA0Etitl Ve`20image`20\4104a`20while`20then`20run`20an`20animation`20at X`09normal`20speed\6412title.gif`20+j0`20anim.gif\7806 XA`20series`20of`20GIF's`20can`20be\8E08ed`20as: X X`09\5306im_0\4B05im_1.\09072.\0904...`20im_36.gif X X`20or X\360B*.\1613.txt\1411\9C09where`20\2606`20is`20a`20\0904file(a`20list`20of`20i Vmages,`20see`20xanim.doc`20for`20more`20details). Xand\5E0B\5004one`20\B904file`20composed`20\5405\E507through`20\D709. X(see`20txtmerge`20to`20create\9D03single`20\5209from\B40B). X X XMachine`20Specific`20and`20Compiler`20Notes: X------\0606\0C0C\0E0E X`20Some`20PC's`20need`20you`20to`20uncomment`20the`20line`20below`20in`20Makef Vile. X`20#OTHER_LIBS`20=`20-linet X X`20Depending`20on`20your`20window`20manager(mwm,uwm,olwm,twm`20etc),`20\7D04mi Vght X`20want`20to`20have`20XAnim`20do`20a`20XInstallColormap.`20This`20shouldn't V\A703`20necessary X`20for`20most`20workstations`20and`20can`20cause`20core`20dumps\AF04some`20PCs V. X`20There`20are`20usually`20user`20selectable`20opt\5105\6704each\E80F X`20that\3107s`20th\6D04\B806`20focus`20policy(pointer,fixed,explicit`20etc). X`20Use`20-DNO_INSTALL`20in`20Makefile`20if`20you`20DON't`20want`20XAnim`20to V`20install\8604\790A. X X`20Some`20X11's`20don't`20have`20support\CD05multiple`20visuals.`20`20An`20exe Vcutable X`20compiled`20with`20such`20an\5504`20will`20not`20be`20able\8B04\5C07/run`20o Vn X`20a`20machine\3F06\6F10`20even`20if`20binary\6D05atible. X X XMark`20Podlipec`20`20po\0A06@wellfleet.com X $ call unpack XANIM.README;1 - 1431676438 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X XXAnim`20List`20of`20Changes`20between`20Revisions.`20Not`20all`20re\1307`20hav Ve`20been Xlet`20loose.`203.00`20will`20be`20the`20fir\5C05ficial`20release. X XRev`202.27 X`09+`20Initial`20beta`20test`20\28118/227a`09 X\2E03Fixed`20core`20dumps`20on`20Sun's`20and`20cmap`20screw`20up\1B073's. V\4A099 X\4403removed`20big`20endian`20dependencies`20in`20code. X\2C03added`20support`20for`20IFF`20type`20l`20(small`20L`20not`201)`20anims. X\6305did`20options`20to`20make`20them`20m\BC04flexible\2D05GIF`20\BE04TXT`20 V\4305`20use`20all`20cmaps`20found.`20If`20a`20\E205is X`09`20`20the`20same`20as`20the`20current`20cmap,`20it`20isn't`20changed\6A05Su V\C80APseudoColor`20displays`20with`20less`20than`20256\4F05\6F04entries`20put V`20in`20but`20\F704test\5E07Groundwork\6105True\5F06su\7706\3B06,`20\3C08fully V`20there`20yet. X`09`20`20(finally`20got`20a`20\450Ain`20my`20office,`20so`20that`20will`20help V.) X\8303added`20option`20to`20prevent`20window`20resizing.\2C0Astart,stop`20and V`20single`20step`20keys`20while`20anim`20is`20runn\400Ereverse`20direct\7704ke Vy.`20Most\3605s`20are`20meant`20to`20be`20played X\EC03backwards`20do\1D04compression`20schemes.`20But`20if`20\8206f`20buffer V\40061s\DA04th\F105mizations`20off,`20then`20it`20should`20work`20okay.`20Curr Vently,\4404only`20goes`20\8E0A\5405in`20an\7706file\F30Bupdate\7505on`20that V\4606affects`20single`20stepping. X`09`20`20Basically`20\5D05this\4108on`20and`20\360F,`20xa\7C04will\4104move V`20forward`20until\E304`20image`20gets`20changed`20\9405e`20screen.`20Useful V`20\4404if`20you`20don't`20want`20to`20treat`20a`20cmap\4407`20as`20a`20step V\F605removed`20Xt`20calls`20from`20signal`20handler`20routine.\3104codes`20get Vting`20cleaner`20\E504more`20commented`20but`20still\6F03ways\9004go. X XRev`202.29.1`20(enough`20features`20added`20to`20prove`20u\E006\4B17) X\9003some`20support`20for`20GIF89`20anim`20extension`20blocks(not`20robust`20y Vet\4006\3B0Bnew`20FLI`20chunk`20types`204`20\DC047.`20(FLC`20?)\3404improved V`20single`20step`20code`20so`20that`20\7F05stops`20with`20key`20press X`09`20`20instead`20of`20showing`20one`20more`20frame`201st.\6904xa\4804wi V\FA03try`20to`20remap`20each`20gif`20file`20into`20previous`20colormaps`20 V\6C06`20an`20attempt\4104minimize`20color`20flashing.(Need`20to`20add`20luma V\3F05sort\A004when`20new\5E09`20is`20needed).\AA04fixed`20bug`20in`20FLI`20 V\5F06chunk`20code`20that`20effected`20\1F0Bs X\6903of`20mor\2605n`20one`20packet\5C0B\5504COPY\5407bug\1D05internal`20struct Vure`20is`20still`20changing`20rapidly. X XRev`202.29.2\3D04added`20luminance\EF09for`20GIFs\EF09s`20to`20minimize`20cmap V\B504flickering\8B05\4E06pixmap`20options\3804speed`20up`20X11`20performance V\DD0Bbug`20in`20s\5E04optimizat\4005in`20\FA04type`207\FC06s.\390Ethat`20effec Vted`20Amiga`20anims`20with`20nonstandard`20sized`20\BC04ANHD\4F0Credid`20cmap V`20handling`20of`20IFF`20cmaps`20t\6604cleared\CD04some\4904inconsistencie V\9C10in`20+i\D305on\8F06gifs`20or`20buffe\4C04anim\8A09 XRev`202.29.3 X\4903experimented`20\3F05cmaps.`20aborted\310C4 X\3103officially`20support`20True`20Color`20for`20GIF87s,FLIs,IFF\740D5 X\4303added`201`20bit`20Monochrome\4F09\440BGIF89s\4B0C\3F09\750B\39109s`20and V`20HAM`20\3509fixed`20GIF`20unlacing`20bug.\1B04consolidated`20a`20lot`20of V`20routine\4B06redid`20internal`20structure X`09`20`20to`20better`20handle`20different`20display`20type\BC07llow`20default V\7A04dition\7104flags`20\4E05`20specifi\9004\2604mpile`20time. X`09`20`20see`20xanim_config.h X\E209bug`20in\3404mand`20line`20parser.`20Affected`20d,f,j,l`20\7307hat X\5703weren't`20immediately`20af\D904a`20+`20or`20-\C305\680Dluma`20sorting V\4905`20caused`20incorrect`20colors\D907\6804displayed.\4F04Added`20option V\2605turn\580Eon\7E04off.\310Acmap_try_to_1st`20\4107.`20This`20tries`20fitt V\4004each`20new\3505\8204in\6804he`20previous`20one.`20(see`20xanim.readme`20f Vor`20more`20info).\7F0Fmap_t\7F14forcibly`20maps`20\7F1A\3A05\7A29fixed`20up V\4004erlace`20mode. X XRev`202.29.6 X\2809artificial`20limitation`20on`20number`20of`20files(was`2050\6304`20`20th V\BE03\1104an`20oversight.`20It's`20now`20dynamic\8F05changed`20`20autoincremen Vts`20on`20casts(ex:`20`20*(`20(ULONG`20*)(ptr))`20)++`20`20)\6F04because`20i V\6006t`20supported(or`20legal)\5004some`20compilers\F10C7 X\8A03More`20robus\4209`20for`20.FLC\E506\B105Added`20\210DDL\2008\530Bd X`20`20`20`20\0404+`20Makefile`20and`20includes`20\FB06s`20help`20systems`20tha Vt`20don't`20put X\4408`20`20the`20X11`20\3F09into`20/usr/\1307/X11. X\760AIm\7708courtesy`20of`20Rich`20Thomson\2E0CXtOpenDisplay`20now`20gets`20ar Vgc`20\B704argv.\300Bcolormap`20install`20problem.\240Bfixed`20\1907`20with`20. VDL`20version`202`20large`20formats(would\FA04recognize)\4D11cmap`20\4A05multip Vle`20dl's.`20(it`20always`20used`201st`20cmap). X XRev`202.29.8 X`09+`20added`20-d\EB07option. X\1A03Ad\1A04Amiga`20PFX`20file`20support.\2110MovieSetter`20\2929\2407`20of V`20non-concatenated`20animatons. X`09`20`20(ie.`20all`20the`20pieces`20are`20in`20separate`20directories`20-`20 V\6805backs,\4104\1006sets`20and`20\0E06ounds). X XRev`202.29.9 X\AF03made`20actions`20dynamic\C805frame`20list`20now`20contains`20timing`20inf Vo`20for`20more`20flexibility. X XOn\BB05Way`20to`203.00 X\760730 X`20\A003\0404+`20redid`20internal`20image`20handling. X\290Awith`20pixmap`20option,`20display`20Images`20as`20convert\9D04to`20\2F06s V. X`09`20`201st`20time`20through`20might`20be`20slower`20than`20subsequen\2D06s, V`20but\3F04there`20is`20less`20of`20a`20pause`20on`20start`20up. X`09+`20added`20+Cn`20(nice`20cmap`20flag).`20Allocates`20colors`20from`20exis V\B205cmap\440Bsupport`20for`20StaticColor,GrayScale`20and\1A07Gray`20Visuals V\430Bcolor`20quantizing,`20remapping`20\3D04a`20little`20dithering. XRev`202.31 X`20`20`20\0303`20`20+`20some`20optimization`20on`20IFF`20delta`20decoding`20ro Vutines\8205\3515HAM`20\2F16XInstallColormap`20now`20an\4205on\230611\E407`20se Vlec\5505\2704possible\260Aerbose`20command`20line\3407able. X\E50650\3104Added`20nested`20loop`20support`20of`20DL`20file\A406\2A06HAM8`20 V\2308\5E04IFF`20256`20color`20image\3006certain`20Weather`20GIFs`20had`20extra V`20bytes`20encoded.`20check`20for`20this\710BSizing\6B05On`20the`20Fly`20resca Vl\1904featur\7407redid`20\8B06cycl\3A08ad\4B04\B708\6604\1E08during X`09`20`20animations. XRev`202.51\5404on`208`20bit`20display`20that\4C09TrueCo\7004with`20256`20cmap V`20entries X\5903instead`20of`208,`20xanim`20was`20incorrectly`20choosing`20this`20as`20a V`20default\4204visual.`20should`20be`20fixed`20now.\A304\DF06an`20option`20+Cc V`20to`20forcibly`20install`20the`20\9E05before`20each\A205mage.`20(NOTE:\8306o Vnly`20will`20happen`20when`20a`20\3F05can`20be`20\5707ed).\4604not`20with V\7F03n`20or`20static`20displays`20etc. X XRev`202.52 X\B803Hugh`20D.R.`20Evans`20a\C805MAKE.COM,`20XANIM.OPT`20and`20VAXTIME.h`20 V\DC03allow\7604xanim`20to`20compile`20under`20VMS. X X XKnown`20BUGS/Features\7904keyboard`20input`20on`20sparcs`20doesn't`20work`20pr Voperly\5306\6D04OpenWindows`202.0.`20`20It\2C05s`20okay\7C073.0.`20Sun`20bug. V\6F04XA\A404\A107d`20on`20machine`20without`20XtNVisual(usually`20ol\7407revs V`20of`20X11`20or\3A08s`20with`20only`201`20visual)`20cannot`20be X\3904un`20on`20displays`20that`20have`20multiple`20\3806s.\5D05Feature. X XAny`20additional\C704s`20or`20suggestions`20contact: X XMark`20Podlipec`20`20p\0A07@wellfleet.com X X $ call unpack XANIM.REVISIONS;1 - 1430875796 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X X/* X`20*`20xanim_act.c X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X Xextern`20Display`20`20`20\0303\0404*theDisp; X\2207Visual\210A\2205\1506\2409Window\240BmainW;\1F08LONG`20xa_pixmap_flag; X XXA_ACTION`20*ACT_Get_Action(); Xvoid`20ACT_Setup_Mapped\1913Pack\1915Loop\170DMake_Images(\180CAdd_CHDR_To_ V\8013Get_CCMAP(); X\1706UTIL\9207_To_Bitmap\3509\1E0F\BA0F\1E0FFloyd(); X XXA_ACTION`20*act_first_cmap`20=`200; X\1F0Fcur_\1D0A X X/* X`20*`20Allocate,`20Add`20to`20Anim_Hdr`20and`20Return`20an`20Action. X`20*/ X\590B\EF08\1F06(anim_hdr,type) XXA_ANIM_HDR`20*a\1C07; XLONG`20type; X`7B X`20`20\A80E; X X`20`20act\A703(X\1A0A)malloc(sizeof(\1A09)); X`20`20if`20(\3405=`200)`20TheEnd1("A\9E0D:`20\4406`20err`5Cn")\6A08->type V\7003\9306\1407cmap_rev\18030;\1508data\110Dchdr\110Dh_cmap\130D\1010next_same V_\3E0A\1C0C\1203anim_hdr->acts;`20`20/*`20insert`20at`20front`20of`20list`20*/ V X\3D03\310D\4204ct\7104return(act); X`7D X X/* X`20* X`20*/ Xvoid XACT_Setup_Mapped(act,ipic,chdr,xpos,ypos,xsize,ysize,width,height,clip_ptr, X`09`09free_ipic_flag,full\0F0Balready_disp_flag) XXA_ACTION`20*act; XUBYTE`20*ipic; XXA_CHDR`20*chdr; XLONG`20x\9114;`09/*`20image`20dimensions`20*/ X\3305\AE0C;`09\2B04screen`20\2C0E\7B07\CF08\2A06ptr`20to`20clip`20mask`20if V`20present\3405\6105\F60E\3906free`20ipic`20before`20returning`20\380Aull_ V\3810ull\A008given,`20not`20just`20\E206\3F09already_disp\4207/*`20\7405\1B07 V`20i\E504splay`20form`20*/ X`7B X`20`20\4006line_size;\1303\1205map_\1108UBYTE`20*t_pic\1004ACT_MAPPED_HDR`20*a Vct_map_hdr; X X`20`20DEBUG_LEVEL2`20fprintf(stderr,"Setup_Mapped:`5Cn");\3220`20`20<%ld,%ld> V`20\0A09`5Cn", X`20`20`20`20\0404\0808xpos,`20`20y\0705xsize,`20ysize`20`20); X\2F03\AA0B`20=`20(\C910)`20malloc(`20sizeof\210F)`20\AD05if`20(\490D=`200)`20T VheEnd1("ACT_\E50D\5507`20err\F006\4403map_\9905=`20chdr->csize\5E04line\1B08X1 V1_Get_Line_Size(xsize\8605switch`20(x11_display_type) X`20`20`7B X`20`20`20`20case`20XA_MONOCHROME: X`09if`20(`20(already_disp_flag`20==`20FALSE)`20`7C`7C`20(free_ipic\1D10) X`09`7B X`09`20`20t_pic\A203(UBYTE`20*)`20\E506(y\BB05*`20\C709); X\3003\7704\3407=`200)`20TheEnd1("\E308Image:\5807\4C06`20failed.`5Cn")\4509 V\BA1C\2404\9E05`20`20UTIL_Mapped_To_Bitmap(t_pic,ipic,chdr, X`09`09`09xpos,ypos,xsize,ysize,width,height,l\CC0B\5D04\0404\0404\9004free_ipi Vc\8D09TRUE)`20free(ipic\BB06`7D X\0503else`20memcpy((char`20*)\9306\0E08ipic,(ysize*l\7609`20)\780Cipic`20=`20t V_pic;`20/*`20original`20\1A05no`20longer`20needed`20either`20way*/ X`09`7D X`09act->type`20=`20ACT_DISP; X`09act_map_hdr->psize\20030; X`09break;\8205case`20XA_DIRECTCOLOR:\190DTRUE\1707`09if`20(`20(already_disp_fl Vag`20==`20FALSE)`20`7C`7C`20(free_ipic\1D10) X`09`7B X`09`20`20t_pic\8B03(UBYTE`20*)`20malloc(y\A405*`20line_size);\3004\7704\3407 V\C003)`20TheEnd1("X11_Get_Image:`20\2406\4C06`20failed.`5Cn")\4509\BA1B\2304 V\9D05\2A06full\C40ETRUE\2605\2304UTIL_Mapped_To\0A07\A406,ipic,chdr, X`09`09`09xpos,ypos,xsize,ysize,width,height\9F06`20`20else\60320,0,\5A0C\0C0B) V; X\4E06\0606\D705ree_\D712`20free(ipic\8D06`7D X\0503else`20memcpy((char`20*)\8206\0E08ipic,(ysize*line_size)`20)\780Cipic`20= V`20t_pic;`20/*`20original`20\1A05no`20longer`20needed`20either`20way*/ X`09`7D X`09act->type`20=`20ACT_DISP; X`09act_map_hdr->psize\20030; X`09break;\8205case`20XA_STATICGRAY:\1813COLOR:\190DGRAYSCALE:\170DPSEUDO\3007 V`09if`20(free_ipic_flag`20==`20FALSE) X`09`7B X`09`20`20t_pic\9803(UBYTE`20*)`20malloc(y\B105*`20line_size);\3004\5304\3407 V\CD03)`20TheEnd1("X11_Get_Image:`20\2406\4C06`20failed.`5Cn")\F706\0404`20`20m Vemcpy((char`20*)t_pic,(\0E07ipic,(ysize*l\8409`20)\410Cipic\BC03t_pic;`20/* V`20original`20\1A05no`20longer`20needed`20*/ X`09`7D\4009DEBUG_LEVEL2`20fprintf(stderr,"NonStatic\B506`09act->type\7003ACT_M VAPPED\1906_map_hdr->psize\22038; X`09break;\6E06default: X`09\6810invalid`20X11`20display`20??`20%lx`5Cn",x11_d\1606_type\8A04TheEnd() V\5B04\CD04act->data\7803(UBYTE`20*)`20\970B\2904\A60Dxpos\2D03xpos\1C11yp V\1C05ypos\3812\DE07xsize\3A12\1E07ysize\1E11\A107ipic\1C11clip\1C03clip_ptr; X`7D X XXA_CHDR`20*ACT_Get_CHDR(rev,csize,coff,msize,moff,cmap_flag,m\0907) XULONG`20\3419; X\2106\3B12; X`7B X`20`20\8309chdr; X\1203chdr\A903(X\1A08)malloc(sizeof\1808))\E304if`20(\3106=`200)`20TheEnd1(" V\D10C:`20\4106`20err`5Cn")\6605DEBUG_LEVEL2`20fprintf(stderr,"\3E0C`20%lx V\3603,(ULONG)chdr\4206chdr->rev`20`20`20`20=`20rev\9104\1606csize\1604csize V\180Boff`20\1805off\170Ams\2F07msize\180B\2F08moff\170Anext\17050;\1409acts V\1410new_chdr\1606\1703if`20(`20(csize)`20`26`26`20(cmap_flag)`20) X`20`20`7B X\CC04\AB07map\3903(ColorReg`20*)malloc\4006`20*`20sizeof\2109))\7A04\6506 V\430C=`200)`20TheEnd1("ACT_Get_CHDR:`20c\2204\5706`20err`5Cn")\4504`7D X`20`20else\9316\E205\CD0D==0)`20\D011`09`20fprintf(stderr,"\7D0F\C8050`20 V\790F\5806msize\5506\540C\910E\9006(ULONG`20*)malloc\3B06`20*`20sizeof\1E06)) V\B50A\3C0B=`200)`20TheEnd1(\9F0F\2104\5206\A210else\8A150;\6509\C207==0)`20 V\C510`09`20fprintf(stderr,"\7A0F\C1050`20\770D\0503\5804xa_chdr_start\C107 V\140F\9305\3504else\1D09cur->next\210B\1C0B\160Breturn(chdr); X`7D X X/* X`20*`20Allocate`20CMAP`20and`20put`20at`20end`20of`20list X`20*/ XXA_CHDR`20*\D609MAP(new_map,csize,coff,msize,moff,rbits,gbits,bbits) XColorReg`20*\3B07; XULONG`20\4215\1D08\4911; X`7B X`20`20\1D06i;\0B03\9F09\F008\3907scale,gscale,bscale; X\1F03if`20(`20`20`20(msize`20>\7F06)`20`7C`7C`20(moff`20<`20coff)`20\2B03 V\2703\1805\2D07+m\1905>`20(csize+\2806)`20`20) X`09TheEnd1("ACT_Get_CMAP:`20map`20not`20in`20cmap`20err`5Cn");\8904chdr`20= V`20A\3108HDR(0,csize,coff,msize,moff,TRUE,TRUE\3B06\DD06\3D03cmap_scale`5Brbit Vs`5D;\1E03\F406\1E0Egb\1E08bs\1E12bb\1E06\1F03DEBUG_LEVEL2`20fprintf(stderr,"c V`20scales`20%lx`20\0404%lx`5Cn",rscale,g\0706\6206); X`20`20for(i`20=`200;`20i`20<`20csize;`20i++) X`20`20`7B X`20`20`20`20chdr->cmap`5Bi`5D.red`20`20`20=`20(USHORT)(r\AF06*`20(ULONG)new_m V\2C09\6505\4410green`20\440B\9806\4415green\4615blue\8A0D\D706\4615blue\4507DE VBUG_LEVEL3`20fprintf(stderr,"%ld)`20%lx`20\0404%lx`5Cn",i, X`09\7A0Ered,c\D212\140F\7409`7D X`20`20rs\9C06=`2011\1404\F208=`2016;\1003\BC08=`20`205\1004for(i`20=`200;`20i V`20<`20csize;`20i++) X`20`20`7B X\C904\8210ay\3003(USHORT)(`20(`20\760A`20(ULONG)new_m\C409 X`09`09`09\4904\0404\0505+`20\9708\3113green\3313\BA08\3313blue)`20>>`205`20) V\D504`7D X`20`20if`20(x11_display_type`20`26`20XA_X11_TRUE\E20Afor(i`20=`200;`20i`20< V`20msize;`20i++\2304\2508\E603egister`20ULONG`20j\6B04\1804j`20=`20i`20+`20mof Vf`20-`20coff\1B08chdr->\A706\2603X11_Get_True_Color(\2206cmap`5Bj`5D.red, X\FC03\160Egreen,\140Eblue,16)\6A06\F204\0404else\CF10cs\CF09\9010\B608\4504ret Vurn(chdr); X`7D X X/* X`20*`20Allocate`20CCMAP`20and`20put`20at`20end`20of`20list X`20*/ Xvoid`20ACT_Get_CCMAP(act,new_map,csize,coff,rbits,gbits,bbits) XXA_ACTION`20*act; XColorReg`20*\4007; XULONG`20\470A\1208\4E11; X`7B X`20`20\1D06i;\0B03ACT_CMAP_HDR\6005_cmap_hdr\1E04\6B0A\1A08\1604\5C07scale,gs V\0705bscale; X\1F03\450C`20=`20(\630E)malloc(sizeof\1D0D)`20+`20 X`09`09`09`09`09(csize`20*`20s\2606\8808))`20)\8204if`20(\670E=`200)`20TheEnd1( V"ACT_Get_CCMAP:`20\7306`20err")\A308->type\A003\8208\5804act->data\B804UBYTE V`20*)\D10D\E211->\AC06=`20csize\4607\1F0Coff`20\1F04off\1E0C\6304\D808`20*) V\350Edata\6B05rscale\3F04map_scale`5Brbits`5D;\1E03gs\1E12gb\1E08bs\1E12bb V\1E06\1F03DEBUG_LEVEL2`20fprintf(stderr,"c`20scales`20%lx`20\0404%lx`5Cn", V\9006,g\0706\6206);\4E03for(i`20=`200;`20i`20<`20csize;`20i++) X`20`20`7B X`20`20`20`20if`20((rbits`20==`206)`20`26`26`20(new_map`5Bi`5D.red`20>=`2064)) X`09f\910FPOD`20err.`20\2604\8D07\3C0E\8705\6607gb\6619green`20\6822grn`20 V\6812green\6A0Cbb\6A19blue\6923blu\6913blue\6807act_cm\E809\1203=`20(USHORT)(r Vscale`20*`20\3C0Bred\3B13\F906\3B0Bgs\3B12\E00C\3D0C\CC05\3D0Cbs\3D12\B40BDEBU VG_LEVEL3`20f\FB0F%ld)\F304\0404\FB08i, X`09\E90F,a\BE10,`20\9410\6F05`7D X\0503rs\9106=`2011\1504\DE08=`2016;\1003\B108=`20`205\1004for(i`20=`200;`20i V`20<`20csize;`20i++) X`20`20`7B X\C504\800Eay\2E03(USHORT)(`20(`20\740A`20new_m\B909 X`09`09`20\4004\0505`20`09\0403+`20\8F08\2B0Cgreen\2D03\2E0C+`20\A908\2A0C V\EB05`20>>`205`20\F207`7D X X Xvoid`20ACT_Add_CHDR_To_Action(act,chdr) XXA_ACTION`20`20*act; XXA_CHDR`20*chdr; X\EC04/*`20have`20act`20use`20chdr`20and`20map`20*/ X`20`20act->\1705=`20\3806\1407\2204\1407->map\1904/*`20add`20action`20to`20chd Vr's\1108list\560Bnext_same_\600B->acts;\2403\0E0A\1B03act; X\FC0DMake_Images(act\F00C\EF06\E004ULONG`20line_size,pixmap_type;\1F03XImage V`20*image\1104ACT_MAPPED_HDR`20*act_map_hdr; X X X`20`20DEBUG_LEVEL1`20fprintf(stderr,"A\970E:`20")\5504while(act) X`20`20\9604\470D2`20\4710act`20%lx`20`5Cn",act->type\4A05`20`20switch(act V\1707\1605\5506`20`20case\C405SETTER: X/*`20POD`20NOTE:`20for`20now`20SETTER`20is`20always`20pixmapped`20 X`09if`20(xa_pixmap_flag`20==`20FALSE)`20\7709`20=\6705IMAGES; X`09else`20\1E10PIXMAPS; X*/ X`09\1D19\7205act->chdr) X`09`7B X`09`20`20\150D->new_\1F07\EE04\0503`20`20\1F09\5203\2B13; X`09\260Amap_rev`20\2A0Drev\2505`7D X`09`7D X`09break; X X\3504`20`20case`20ACT_CYCLE:\A63A\4409_HDR`20*act_cycle\9F07ULONG`20i,size,*i_ Vptr,moff,*map; X X\C408\3506\C003(A\510E)act->data\5207size\E806\3406->size\1D07i_ptr\4604\7806* V)(act\2808data);\2906map\0704\4805\DF08map; X\1E06off\1E11off\1F07for(i=0;`20ichdr,`20\1207\FF09; X X\AA05\EE0C`20=`20(ACT_CMAP_HDR`20*)`20act->data\DA07\3008\2C04ColorReg`20*) V\470C\3012size\3103\250Ecsize\260Coff`20\2612off\2507new_c\4B07\C808\470A`09/* V`20allocate\1F04`20c\D608*/\400B\EB1Amalloc(sizeof\1D0D)`20+ X`09`09`09`09`09(\830A*`20\2907ColorReg))`20)\A907if`20(\6D0E=`200)\4303TheEnd1 V("ACT_Make_Images:\AD05`20malloc`20err")\F40C\4707\EC07\FE08\F807\2613off`20 V\2608\1209\2B0F\2003\BB09`20*)\420Edata; X`09`09/*`20re\2D04\3205change`20based`20on`20chdr`20map`20*/\5C06memcpy((char* V\5309,(\100B\8F06map,\5F03`09`09`09(\CB09`20*`20sizeof\9709)));`20 X\5A05for(i=0;`20ichdr->map`5B`20i`20+ V`20old_coff`20-`20\1F0B\1205`5D;\3D08\CB08`5Bd`5D.red`20`20`20=`20old_c\1404i V`5D.red\2C15green`20\2C0Egreen\2E15blue\5A10blue\5B17ay\2D10gray\2D07`7D X\0705free(o\2307_hdr);\1906act->data\4303(UBYTE`20*)n\6007_hdr\280Cchdr\2803 V\1F05\1B10map_rev`20=`20\2B09->rev; X\B406\8D05`20/*`20end`20of\4504`20c\5004*/\2209\200C\1C08`09break\4608case`20A VCT_MAPPED: X`09if`20(\7209) X`09`7B\9504\150D->\B108) X`09`20`20`7B X\910A`20`20DEBUG_LEVEL2 X`09`09fprintf(stderr,"ACT_Make_Images`20remapping`20MAPPED`20%lx\0404`5Cn", V\3F03`09(ULONG)\7C09,`20\1210\8E0B; X\9004`20`20act_map_hdr`20=`20(A\DF09_HDR`20*)`20act->data; X\3105/*`20POD`20TEMP`20currently`20assumes`20same`20size`20\AC08*/\F40Dif`20(c Vmap_dither_type`20==`20CMAP_DITHER_FLOYD)\370D`7B X\7D05`20`20UTIL_Mapped_To_Floyd(\C50B\AC06,a\1211 X`09\4203act->chdr->new_chdr,act\1406\23060,0,\3E0Dxsize\130Eysize,\5208\2B22); V\CD0D`7D X\0E0Celse\EC25\0A06\ED33\D95D\AC05`7D X\0705/*`20update`20chdr`20ptrs`20and`20revs`20*/ X\2505\9709`20=\0C0A->new_chdr\5207\1A06map_rev\2A0Erev\2505`7D`20\0604else`20i Vf`20(x11_kludge_1`20==`20TRUE)\9304need`20to`20map`20anyway\8D08`7B X\6C08\D808\6A03(ACT_MAPPED_HDR`20*)\7D06data;\3106UTIL_Mapped_To\0A07(a\470A V\2E06,a\1211 X`09\4103\CC09\0F060,0,\2A0Dxsize,\130Dysize,\3E08\2B22);\AA04`7D X`09`7D X`09/*`20fall`20through`20*/ X\C504`20`20case`20ACT_DISP: X`09a\470A`20=`20(ACT_MAPPED_HDR`20*)`20act->data; X`09line_size\2B03X11_Get_Line_Size(a\A511\9204if`20(x11_display_type`20==`20XA V_MONOCHROME)`20pixmap_\1E06`20XYPixmap; X`09else`20\1E0EZP\1D07 X`09image\3104CreateImage(theDisp,`20theVisual, X`09`09x11_depth,p\4E0A,0,NULL,\2003\BF12,`20\140Dysize,\4A07bytes_pixel,`20lin Ve_s\F10B\9707=`200)`20TheEnd1("ACT_Make_Images:\B50D`20err`5Cn")\4104mage->dat Va\DA03(char`20*)\8B0Ddata\FF04`7B X`09`20`20ACT_IMAGE_HDR`20*act_im_hdr; X`09`20`20\0F0A\4D04\2C0F)`20malloc(`20sizeof\200E)`20\8F04`20`20\D204\470C V\D71F\5306\D104`201\D306\8807->type\8703\6609\A208\EE0AUBYTE`20*)`20\C719->xpo Vs\2C03act_map_\1409\2911yp\2912ypos\5212size\5311size\5412\2B14ysize\2B11imag V\2B04image\1E11clip`20`20\490Fclip; X`09`7D X`09free(\1C0B); X`09break; X`20`20`20`20`7D`20/*`20end`20of`20switch`20*/\1A05act\5606->next\2F04\2D0Cwhil Ve`20\2504*/ X X`7D X Xvoid`20ACT_Setup_Loop(begin_act,end_act,count,\1806frame,end_frame) XXA_ACTION`20*b\3A09*e\3B06; XULONG`20\421B; X`7B X`20`20ACT_BEG_LP_HDR\4B05_loop\C204ACT_END_\1C08end_\1C07\1E03\7509->type V\FF03\4C0A\3E04\4A08\1903(A\660F)malloc(sizeof\1F0F))\3F04if`20(\430A=`200) V`20TheEnd1("ACT_Setup_Loop:`20\4E06`20err0"\3D05\9C0Bdata\8304UBYTE`20*)\E10C V\0C08->count`20=`20count\1B0Fnt_var\1D030;\190Dend_fram\FB04\0C09; X\2403end_act->type\1E03ACT_END_LP\4204end_\D606`20(\1A0A_HDR`20*)\CB06(sizeof( V\1F0E))\3F04if`20(\430A=`200)`20TheEnd1("ACT_Setup_Loop:`20\4E06`20err1"\3D05 V\9A09data\8104UBYTE`20*)\5208\A10C->count\2703`26(\F70Acount\4D09\1407nt_var V\2A10\1606\2C0Fbegin_frame\3003\0E0B\270Eend_\2508\550C\1809\570Fprev_e\DF06 V\33030; X`7D $ call unpack XANIM_ACT.C;1 - 1951214432 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_cmap.c X`20*\1304Copyright`20(C)`201992,1993`20by`20Mark`20Podlipec.`20\2E04All`20 V\2E05s`20reserved. X\4906This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\AA07notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X Xextern`20XA_CHDR`20*xa_chdr_first; X\1F08Color`20`20defs`5B256`5D\1A09Display`20`20`20\0303`20*theDisp\1F09Colorma Vp`20\1F05theCmap; X X#define`20CMAP_ABS(x)`20`20(((x)<0)?(-(x)):(x)) X XULONG`20cmap_scale`5B17`5D`20=`20`7B`2065535,`20\070721845,`209362, X`09`09`09`20`204369,`20`202114\07031040\0703516,\1F06`20257\1103`20128\0704 V`206\2604`203\3E08\19036,\B605\1F06`204\07052,\1A04`7D; X X/*`20Box`20structure`20for`20Median`20Cut`20algorithm`20*/ Xtypedef\2E07\F706Box_Struct X`7B X`20\1A16`20*next; X`20LONG`20rmin,rmax,gmin,gmax,bmin,bmax; X`20UL\2604*clist\0F09clist_len; X`7D`20\5F08; X X#define`20CMAP_MEDIAN_RED\DF030 X\1C14GREEN`201 X\1C14BLUE`20`202 X Xint`20ColorComp(); X\1105MAP_CList_Compare(); X\9D05CMAP_Find_Closest\1A13Exac\180FCHDR_Match(); Xvoid\1806Remap_CHDRs(\1917\180ECompact_Box\620ESpli\1709\300AHistogram_\4C13 V\B205rom_Cli\CA06 X X\520AMedian_Cut(); XCMAP_Box`20*CMAP_Ge\6D13Find_Box_Color(\A00D\4E08ompare\2206s(); X\C317 XXA_CHDR`20*ACT_Get_\C108\1912MAP(); X X\8A05X11_Get_Colormap(\A308X11_Make_Nice_C\4E07 Xstatic`20UL\8804cmap_m\AB06longdim; X/* X`20* X`20*/ Xint`20ColorComp(c1,c2) XColorReg`20*c1,*c2; X`7B X`20long`20val1,val2; X X`20\0E05`20=`20(3`20*`20c1->red)`20+`20(4`20\1006green)\12042`20\1206blue); X\3B052`20\3B082-\3B0E2->\3B0F2->\3B09if`20(\7A05!=\4705)`20return(`20\5505- V`20\1D05\2B05else\3005\8E09\3504\600B\3A08\1309\3F03\2C0A\4412red`20`20\4408 V\0D05\440E\2006\4406\0C06\440A\280Cblue\2707\0B05); X`7D X X/* X`20* X`20*/ XLONG`20CMAP_Find_Closest(t_cmap,csize,r,g,b,rbits,gbits,bbits,color_flag) XColorReg`20*t_cmap; XUL\5B04csize; X\0C05r,g,b\1908\4F11\3209\5609; X`7B X`20`20register`20U\1F05i,min_diff\F004\1D09\3B06map_entry; X\1D03if`20(\4E0A`20==`20FALSE)\1B03\5904\5B11gray\3905`20`20gray`20`20=`2011 V`20*`20(r`20*`20cmap_scale`5Brbits`5D)\8004\2A07+=`2016`20*`20(g`20\2A0Dgbits V\2A10`205\2A04b`20\2A0Dbb\2A10>>=`205;\1005\D80A\93030;\1405for(i=0;`20i`20coff)`20`26`26`20(\5D06<`200)`20)\2705 V\2F03`20i--;`20\5C04gray`20==`20cmap`5Bi`5D.gray)\9109i;`20`7D\3403\0404else V\6A30\6806\7507\6E04\0703(r\6F0Cred)\2007\0404\4604g`20\8F0Deen)\220Fb`20 V\220Bblue)`20`20)\B40B\2F05\B808return\9C06); X`7D X X/* X`20* X`20*/ XLONG`20CMAP_CHDR_Match(chdr1,chdr2) XXA_CHDR`20*\1606*chdr2; X`7B\5903ColorReg`20*cmap1,*cmap2; X`20`20UL\5804i; X\0C03\F604chdr1\B405hdr2)\9308TRUE); X\2406\B304\2906->csize`20!=\3006\1007) X\2304\0303`7C`7C\290Aoff`20\290C\1004)`20\6209FALS\6305\3C03cmap1`20=\2B051->c Vmap\7C04cmap2\17072->c\1707for(i=0;`20i`20<\3309size;`20i++\8C04`7B X\8D04\BB07(cmap1`5Bi`5D.red`20\9306map2\1207\BC09\BD06\2C08green`20\2C0Cgreen V\2E17blue\5A0Eblue)`20\EF13`20`7D\0403\1507TRUE); X`7D X X/* X`20* X`20*/ Xint`20CMAP_CList_Compare(c1,c2) XULONG`20*c1,*c2; X`7B\4C0A`20(*c1)`20-`20(*c2)`20)\5705void XCMAP_BitMask_CList(clist,cnum,bits\580A\180E\6106\1C06i,r_mask\C304if`20(`20(b Vits==0)`20`7C`7C`20(bits>=9)\F203TheEnd1("C\7911:`20bad`20bits")\4904\5306`20= V`20((0x01`20<<\1D05\C7041)\210B<<=`208`20-`20\9506\380C\2109`2016)`20`7C\110C8 V)\1003\B50Afor(i=0;i\AE06>`20\3708)`20\410B\230B\4B04\6306+=\1813hdr\3009ne Vxt;`20`7D X\6706\BB09`20!=`200)`20\CC0A\AD0B\4604return(cnt); X`7D X X/*\B003*`20\1706s`201`20if`20successful\1B0C0`20if`20Try`20fails X`20*/ XULONG`20CMAP_Try_To_1st(chdr,fit_each_flag) XXA_CHDR`20*chdr; X\3906\240D;`20`20/*`20\6304RUE`20fit`20each`20entry`20separately\7704`7B X`20`20\4206wanted\E906,val_i,i\E604\1E06chdr_cnt,first_flag,*tmap\2304ColorReg V`20*tc\1307\A509start_\AB06\1803/*`20POD`20TEMP`20for`20testing`20purposes`20* V/ X`20`20if`20(pod_max_colors)\A00D`20=`20p\1F0D\7304else\2610x11_cmap_size\8105 V\DA05\1A03CMAP_Color_Count(chdr,`26i)\4B04DEBUG_LEVEL1`20fprintf(stderr,"TRY: V`20total=%ld`20\7206\0B05max=%ld`5Cn",val_i,w\8E0B,i\5B05\DB04i`20>`20\1B0C) V`20return(0); X\2403tcmap\A403(ColorReg`20*)malloc(w\E00C*`20sizeof\2809))\6308\4307=`200) V`20TheEnd1("CMAP_Try_To_1st:`20\2505\5A06`20err`5Cn"\8107\8007ULONG`20\7D1F V\2505\7A0B\7924\7817first_flag\7E030;\1203chdr_cnt\1008start_chdr\1208val_i V`20=`20\9D0C\1804/*`20loop`20through`20rev0\4F05s`20*/\2003while(chdr) X`20`20`7B X`20`20\C006chdr->rev`20>`200)\1705\1D04DEBUG_LEVEL1`20fprintf(stderr,"TRY: V\6104`201+`20\9C05encountered`5Cn"); X\4704\CE06\AB03\6306next\1908break;\0D05`7D X\0604/*`20Create`20New`20CHDR`20and`20CMAP\BF06\AD06\FD07\FE0E\B52Cstart`20new V`20chdr=%lx`5Cn",(ULONG)chdr\BC09/*`201st`20in`20cmap,`20just`20copy`20i\1605 V\9607`20`20for(i=0;i<\E806csize;i++\9806\9A06\0A06LONG`20j\6208`20`20val_i-- V\110Atcmap`5Bval_i`5D.red`20`20`20=`20\5707\1A04\1606\3017green`20\3010green V\3217blue\6212blue\6319ay\3112gray; X`09j\1903i`20+`20\1D07off`20-`20\0D06moff; X`09if`20(`20(j`20>=`200)`20`26`26\0C04<`20\2307size)`20)`20\0F07ap`5Bj`5D V\5203val_i\8F08`7D X\0806start_chdr\8D07\2108chdr_cnt\17031;\140B\B409next;`20/*`20move`20to`20nex Vt\2306*/\3105\6406else`20`20/*`20try`20fitting`20old`20cmap`20int\3A04wly`20cr Veated`20on\3003\4307`7B X\7A06ULONG`20val_i_start; X\1A07\140B\E40A\1C03DEBUG_LEVEL1`20fprintf(stderr,"TRY:\8C09chdr=%lx`5Cn",(ULO VNG)chdr);\6207i`20=`200;\0D07while(i`20<`20chdr->csize)\1D07`7B X`09L\A804cmap_index\3708\4603f`20(fit_each_flag`20==`20TRUE\3D08\ED0A\0404 V\430A\7E03\180B`20`20CMAP_Find_Exact(tcmap,val_i,wanted_csize,`20 X`09`09c\A506map`5Bi`5D.red,\B808\1307green,\610D\7F05\250Dblue\3912ay);\3909 V`7D`20else\B70E-1; X\2109if`20(\0703(c\220A>=`200)`20\7C0D`7C`7C\2603\240C<`200)`20`26`26`20( V\E105`20>\0F04)`20`20)\3609`7B X`09`20`20LONG`20j;\4B0B\6F04\4710`7B`20val_i--;`20\A80Dval_i;`20`7D X\3F0Atc\E704\260A`5D.red`20`20`20=`20chdr->\1F05i`5D.red\760C\3712green`20 V\3710green\391Eblue\7012blue\7120ay\3812gray; X`09`20`20j\1B03i`20+`20\1F07off`20-`20\0D06moff\2405if`20(`20(j`20>=`200)`20 V`26`26\0C04<`20\2507size)`20)`20tmap`5Bj`5D\6A04\7E09\9A0A`7D X\0A08else`20/*`20we`20blew`20out`20of`20this`20chdr`20*/ X\2C08`7B X`20`20DEBUG_LEVEL1`20fprintf(stderr,"TRY:`20\4709with\4405=%lx`5Cn",(ULONG)chd Vr);\CA04val_i`20=`20val_i_start\E206\B704hdr->csize;`20/*`20exit\9A04of`20loop V\980C\CE0Ai++;\0D07\1508if`20(i`20=\510D)`20/*`20successful\4C0A\E226\3A0B V\E422for(i=0;`20ims\D305i++)`20\1207ap`5Bi`5D`20=`20tm\0A05\C308\0404ch Vdr_cnt\D90A\1608\3003\3F06next;`20/*`20move`20to`20next\2306\D909`7D X\0806else\2B04\0805create`20new`20\2E05if`20necessary,`20upd\1E04them,`20and V`20\5F05on\550A`7B`20\4B04only\4B14more`20than`20one`20c\1604went`20into`20it V\4706DEBUG_LEVEL1`20fprintf(stderr,"TRY:`20remap`20old\9F0D`5Cn"); X\8706`20`20if`20(chdr_cnt`20>`201)\1A09`7B X`09`20`20XA_CHDR`20*t_chdr,*new_chdr; X\1E03\C505\C00Brev`201`20\B005\EA09\0404\3508`20=`20ACT_Get_CMAP(`20`26tcmap V`5Bval_i`5D,(wanted_csize`20-`20val_i), X`09`09`09val_i\2118\1D0616,16,16\DD0B\7A0A->\9C04=`201;\1D0B\FC04first_flag V`20==`200)`20`7Bxa_chdr_first\3303\F209`20f\2C09++;`7D\490Bt_\DE07star\0D06 V\680C`20`20/*`20remap`20all`20chdr's`20that`20went`20into`20it`20*/ X`09`20`20while(`20(t\5506!=\3105)`20`26`26\140C0)`20) X\2E03`7B X\680C\D204\2406\F107\2904\2704\2904\0705`20DEBUG_LEVEL1`20fprintf(stderr,"TRY: V\AA07chdr=%lx`20to`20match`20%lx`5Cn", X`09`09`09(ULONG)chdr,(\0C06new_chdr); X\6906`20t\8907\1A08`20=`20n\0B07;`20/*`20map`20already`20done`20*/ X\CD0C`7D X\4905\F407=`20\500Axt; X\280Fchdr_cnt\28030;\1D0Bstar\4209\1A0B`7D X\0A08else\0D09`7B X\3B0Aif`20(first_flag`20==`200)`20`7Bxa_chdr_first\5403\610A;`20\2E0A++;`7D V\6C13val_i`20=`20wanted_csize;`20`20/*`20will`20cause`20new`20cmap`20to`20be V`20started`20*/`20\4807\5006`7D`20/*`20end`20of`20try\2E04fit`20\3A05*/\2303 V\210Cloop`20through`20chdr's\2504\2603\E604chdr_cnt`20>`201)\1403`7B X\6104XA_CHDR`20*t_chdr,*new\E906\8807/*`20create\B305rev`201`20chdr\7F06`20 V`20\3008\F103ACT_Get_CMAP(`20`26tcmap`5Bval_i`5D,(wanted_csize`20-`20val_i), X`09`09`09val_i\2118\1D0616,16,16);\740D->\9004=`201;\1705\E604first_flag`20== V`200)`20`7Bxa_chdr_first\2D03\E109`20f\2C09++;`7D\4305t_\CC07star\0D06\5C06 V`20`20/*`20remap`20all`20chdr's`20that`20went`20into`20it`20*/`20\3005while( V\5008!=`200`20)\1A06`7B X\5006\AE04\1F06\C707\AF05\1D07\2504DEBUG_LEVEL1`20fprintf(stderr,"TRY:`20last V`20\9506chdr=%lx`20to`20match`20%lx`5Cn", X`09(ULONG)t_chdr,(\0E06new_chdr); X`09\8608\1408\FF03\0B08;`20/*`20\F506ready`20done`20*/\A707`7D X\0806\E707=`20\4B0Axt; X\2308\0404free(tcmap); X`20`20return(1); X`7D`20/*`20end`20of`20routi\6206 XULONG`20CMAP_Make_Clist(chdr,clist) XXA_CHDR`20*chdr;\3107**clist; X`7B X`20`20\1307clst\3506_len,c_i; X X`09/*`20count`20colors`20in`20chdr's\E106\3009\D803CMAP_Color_Count\87060); X\4604allocate`20room`20for`20list\D004all\5E08\5407st`20=`20(U\9806)malloc(c V\6B09*`20sizeof\2206)); X`20`20if`20(\3906=`200)`20TheEnd1("CMAP_Make_Clist:`20\4E06`20err`5Cn"); X X\7103_i\70030;\0B03while(chdr) X`20`20`7B X`20`20`20`20ColorReg`20*cmap;\1405\9C06i,csize,*hist,stat_size\2306\0505csize V\5D03chdr->csize\1E06cmap`20`20\1909\5909\C805map_hist_flag\D204TRUE\9104 V\9308`20`20hist\3F03(U\8905*)\D706(c\7005*`20sizeof\1E06))\5B06\5D06\3906 V\EF03)`20TheEnd1("CMAP_Manipulate_CHDRS:`20\2B05\5906`20err`5Cn")\4A08for(i=0; Vi<\D406i++)\3005`5Bi`5D`20=`200\2808CMAP_Histogram_CHDR(chdr,hist,csize,chdr-> Vmoff\5F09stat_s\CB04=`20c_i;\1705`7D`20else\FA08\6307\8908`20i\9006`20i V++)\2105`7B X\FC0A\0804(cmap_hist_flag`20==`20FALSE\2E06\2C06`7C`7C`20(\2813TRUE)`20`26`26 V\E908)`20`20)\3607\6608`20`20/*`20note:`20cmap's`20are`20full`2016`20bits`20an Vd`20clist`20is`200`20r`20g`20b,`208`20\1D05each*/\4D09clst`5Bc_i`5D`20`20=`20 V\9205\7703.red\1C03`26`200xff00)`20<<`208;`20\3513`7C=\0E03\3507green`20\3508; V X\2E15\6309blue\630C>>\630E_i++\4408`7D X\0606\0604if`20(hist)`20free\0B06\2806\1A04cmap_hist_flag`20==`20TRUE)\2005 V`7B X\4E06DEBUG_LEVEL1\710Afprintf(stderr,"\8404size`20%lx`20afta`20hist`20%ld`5Cn" V, X`09`09chdr->csize,(c_i`20-`20stat_size)`20\9407\B406chdr`20=\0705->next\1D04 V\1B04*clist`20=`20cls\1505return(c_i); X`7D X Xvoid XCMAP_Map_To_One() X`7B\2B03XA_CHDR`20*new_chdr\4004ULONG`20\5706,clist_len,i,wanted_csize\290Aact Vual\1608\AC04/*`20NOTE:`20cl\9A04is`20malloc'd`20in`20C\8A06ke_C\1F05*/\3403 V\6709\C803\210F(xa_chdr_start,`26clist); X`20`20DEBUG_LEVEL1`20 X`09fprintf(stderr,"C\F30E:`20start`20csize\6703%ld`5Cn"\E10A); X\5403/*`20POD`20TEMP`20for`20testing`20purposes`20\AF05if`20(pod_max_colors) V`20wanted_c\5F07\1F0E\AF04else\2610x11_cmap_size\8105`7B X`20`20`20`20ULONG`20bits\1505`20`20bits\30037;\0E05while`20(`20(c\BE08`20>= V`20\5C0C)`20`26`26`20(\3605>=`20cmap_median_bits)`20) X\4804\6D06`20`20CMAP_BitMask_CList\5A06,c\6008,bits)\7E06`20`20\770A=`20CMAP_C Vompress\3D16); XDEBUG_LEVEL1`20 X`20`20fprintf(stderr,"CMAP_Map_To_One:`20bit`20%ld\6C03size\6803%ld`5Cn",bits V\5A0D\9206bits--\0E06`7D X\0604if`20(\A80A<`20wanted_csize)`20\0E0C\5D03\2909\4204`7D X\0503new_chdr\1D03ACT_Get_CHDR(1,w\3B0B,0\0F0F,TRUE,TRUE\9B05\850E>`20\850D V\2003`7B X\AB04actual\8D09CMAP_Median_Cut(\8B08->cmap, X`09`09`09`09clist,c\5B08\860D\7A05`20`20DEBUG_LEVEL1`20fprintf(stderr,"C\640E: V`20\7D06%ld`5Cn",a\910B\4E05`7D X`20`20else\B309CMAP_CMAP_From_Clist\A910\A40F\9707\ED0F\1F09\B528CList\B024fre Ve(clist);`20 X`20`20\9E0B\7C07\370C\3604\220Boff`20\2203x11_cmap_s\3204-`20\321Ams\5420mo V\5426for(i=0;`20i\9F08\6B09\1E0Esize\1F09off\3D0F\6D07\CC07`20`20 V\1E0D\5A0Bmsize\1D0E\5A0Cmoff\3C0Foff; X\1F03new_\9808new_c\980Enew_c\3E07\1F0B\9807new_c\F307\1E0B\9907new_\7A08 V\1E0A\7A09tmp_\3C04=`20(ULONG`20*)malloc(\D20A*`20sizeof\2206))\5704if`20( V\3C09=`200)`20TheEnd1("CMAP_Remap_CHDR:`20map`20\5506`20err`5Cn")\7B05cflag V`20=`20(x11_display_type`20`26`20XA_X11_COLOR)?TRUE:FALSE;\3803for(i=0;`20i V`20<`20o\A608;`20i++) X`20`20`7B X`20`20`20`20\CD06j,match;\1305j`20=`20i`20+`20old_moff`20-`20old_coff;`20/* V`20get`20c\AC04entry`20for`20this`20pixel`20*/\4505\F804\B01ATRUE\8404\8608 V`20`20tmp_map`5Bi`5D`20=`20X11_Get_True_Color( X`09`09old_c\2404j`5D.red,o\100Bgreen,\120Cblue,16)\D406`7D X\0604else\760Dmatch\7103CMAP_Find_Closest(`20new_cmap,new_csize, X\8311`20o\8411\130D\8507,16,16,cflag)\9106\F20F\8906+`20new_coff;`20/*`20new V`20pixel`20value`20*/ X\CC08\0404old_chdr->new_chdr\4903\0B08\6604free(o\2609map\7D05\120D\3303\8907; V X`7D X Xvoid XCMAP_Remap_CHDRs(the_chdr) XXA_CHDR`20*\1308; X`7B X`20`20\170Amp_\1706\1603DEBUG_LEVEL2`20fprintf(stderr,"C\650F`20to`20%lx`5Cn", V(ULONG)\7609\4D05\5A08\B103xa_chdr_start\D204while(\2208) X`20`20\9504`20`20if`20(CMAP_CHDR_Match\CC09,t\2F08`20==`20FALSE) X`09`09`09\980F\3013\7204\900D\0B08->next\1F04`7D X`7D X Xvoid X\7F06MAP_From_Clist(cmap_out,clist\0606_len) XColorReg`20*\2408; XULONG`20*c\2C0E; X\E404register`20U\2505i,r,g,b; X X`20`20for(i=0;i<\340Ai++)\1B03\3A04\3C03\BB03(clist`5Bi`5D`20>>`2016)`20`26 V`200xff;\2105g`20\210F8)\200Db`20=`20\1F09\190C\BC08\1803.red\1203=`20(USHORT) V(r`20*`20257)\2B12green`20\2B0Bg`20\2B18blue\560Db`20\561Aay\2B04 X`09\2D09`20(((\870411)`20+`20\6705\FC04+`20(\47045)`20)\EE045)`20\5405`20) V\5504`7D X`7D X XCMAP_Box`20*CMAP_Get_Box() X`7B\2203\1D0Atmp;\1103tmp\A304\180A)malloc(sizeof\1909))\2E04if`20(\3205=`200) V`20TheEnd1("\690C:`20\4106`20err`5Cn")\3704return(tmp); X`7D X XLONG\8B06Median_Cut(cmap_out,clis\0606t_len,wanted_clen) XColorReg`20*\3008; XUL\5004*c\381A; X\FD0Estart_box,*box\A304\4406i,cur_box_num; X\1803DEBUG_LEVEL1`20fprintf(stderr,"\C30F:`20starting`5Cn");`20 X`20`20/*`20make`20first`20box`20*/ X`20`20\8009`20=\9606Get_Box()\8C04\1E09->clist`20`20`20`20\2903clist\2014_len V\2008_len\240Fnext\4305\24030;\1C03CMAP_Compac\7606\2D09); X\2003cur_box_num\33031;\1303while(\190C<`20wanted_clen) X`20`20`7B X\6304ULONG`20box_i,\2B07\5405`20`20/*`20loop`20through`20current\2C04es`20and V`20split`20in`20half`20*/ X\3704box_i\BA08\0F06\9806\8D0B\1B09\1703\CC09\1506\B906\1C05`26`26`20(\C21A V\1F05\6D06<`20\2307)`20\D904\DB08`20`20if`20(`20CMAP_Split_Box(box)`20==`20TRU VE`20)`20\2A07\3208`20`20\720B++\9406\AD0Abox->next;`20/*`20move`20past`20new V\2205*/\3107`7D X\3709_i\480A\4610\1705\2C06\AC04\EA08==`20\870B)`20break;\7304no\3E04es`20spli Vt\7006`7D X\0503\5A06start_box\5A04for(i=0;`20irmin`20=`20box->gm\0C0Abm\0C05256\E404\2B07ax\2B0A\0C0Abm\0C05-1 V\2A04for(i=0;`20iclist_len;`20i++) X`20`20\ED04`20`20register\F806r,g,b\FC05\6C03\5808clist`5Bi`5D;\3106\1703(b V`20>>`2016)`20`26`200xff\1A06g`20\1A08`208\1A0Eb`20`26=\0F07\1005if`20(r`20< V`20\FA09)`20\0B09\4503r;\2609g`20\2607gm\2609gmin\2603g;\2609b`20\2607bm\2609b Vmin\C204\260Ar`20>`20\6707ax\7209ax\7210\2607gm\2609gmax\7210\2607bm\2609bmax V\7208`7D X`7D X XLONG`20CMAP_Median_Compare_Colors(c1,c2) X\2705*c1,*c2; X`7B\3E03switch(cmap_median_longdim)\1E03\2204`20`20case\5D07EDIAN_RED: X`09return(`20(((*c1)`20>>`2016)`20`26`200xff)`20-\19062)\1910);\5616GREEN: V\5815`208\5817\190C\5818BLUE\570D\5605\4F0C\4E05\470Fdefault:`20 X`09TheEnd1("\5606edian_Compare_Colors:`20longdim`20err`5Cn"\4505`7D X`20`20\76070); X`7D X XLONG`20CMAP_Split_Box(box) XCMAP_Box`20*box; X`7B X`20`20\130Anewbox; X`20`20\4005rdif,gdif,bdif; X\6604dif`20=`20box->rmax\D603\0C07in\3804gdif\2008gm\200Agm\2006bdif\2008bm V\200Abm\2006if`20(box->clist_len`20<=`201)`20\DF07FALSE)\2A08(r\4F04>=\7705) V`20`26`26`20(\1208bdif))`20 X`09cmap_median_longdim`20=`20CMAP_MEDIAN_RED\5104else\5606\C505>=`20rdif\5606 V\1208\5606\5524GREEN;\5708`20c\3121BLUE\3004qsort(box->clist,b\0B09_len,sizeof V(LONG),\4106\5706Compare_Colors);\4C03newbox\6908Get_Box(\1B0B->next\2103 V\0C09\1C04\190C\2806\1604/*`20split`20color`20list`20*/ X\4B0A\A409\5008\110A/`202;\5908\160A-=\3C12\9C0Cclist\4D03`26b\0E09`5Bb\2E0D V`5D;\2F03CMAP_Compact_Box(box\E405\1911\5906\1C05return(TRUE); X`7D X X/* X`20*`20Assumes`208`20bits`20per`20\EF06component X\F504void XCMAP_Find_Box_Color(creg,box) XColorReg`20*creg; XCMAP_Box`20*box; X`7B X\8404gister`20LONG`20i\9706\1307UL\1404r,g,b,sum; X\1D03DEBUG_LEVEL3`20fprintf(stderr,"`20`20`20`20box`20has`20%ld`5Cn",box->clis Vt_len\F705if`20(cmap_median_type`20==`20CMAP_MEDIAN_SUM) X`20`20\A204\9103=0;`20g=0;`20b=0;`20sum=0;\1A05for(i=0;`20i<\690E;`20i++\4204 V\4408\D711tcol\4506`20`20tcol`20=\BB04\4307`5Bi`5D;\3708`20+=`20(t\2204>>`2016 V)`20`26`200xff;\2007g`20\200C`208\2010b`20+=`20\6206\1106\200D`7D X\0604sum\7F0D_len;\FB06`20/=`20sum;`20\6903\0B09b`20\0B07\2403\4204else\0703 V\EA06r`20=`20(box->rmin`20+\5806rmax)`20\C204\5906g`20\2608gm\260Agm\260Eb`20 V\2608bm\260Abm\260C\8104creg->red\3403=`20r`20*`20257;\1909green`20=`20g`20 V\190Fblue\3204b`20\3211ay\1904(((r\1C0311)`20+`20(g\0B046)\0B04\32045)`20) V\87045)`20\3F07`7D X X Xvoid XCMAP_Histogram_CHDR(chdr,hist,csize,moff) XXA_CHDR`20*chdr; XULONG`20*h\270E; X`7B X`20`20XA_ACTION`20*act; X X`20`20DEBUG_LEVEL1`20fprintf(stderr,"H\8008`20for`20%lx`5Cn",(ULONG)chdr); V\4203act\E803chdr->acts;\1403while(act) X`20`20\7A04`20`20switch(act->type\1A04\1C08`20`20case`20ACT_DISP:\1510MAPPED: X`09`7B X`09`20`20register`20UBYTE`20*p;\160ELONG`20psize\1905\410A_HDR`20*map_hdr V\FE05\6806`20`20DEBUG_LEVEL2`20fprintf(stderr,"`20`20hist'ing\EC05%lx`5Cn",( V\6805)act)\6705\5707`20=`20(\7210)act->data\2A05psize\2803\3207->xs\1104*`20 V\1109ys\BD08p`20\280B\4209if`20(p)\0A04`7B X\0503\1106moff)`20while(psize--)`20hist`5B`20(*p++)-moff`20`5D++\4405`20`20els Ve\3016*p++\2909`7D X`09`7D X`09break; X/* X\3B04`20`20case`20ACT_SETTER: X`09`7B\2D04register`20UBYTE`20*p\4305\160ALONG`20p\DF09ACT_MAPPED_HDR`20* V\EB07\1C09\5D06\1C06setter\1F09XA_ACTION`20*back_act; X X\9D06\0404DEBUG_LEVEL2`20fprintf(stderr,"`20\E905'ing`20setter`20act`20%lx`5Cn V",act); X X\6403\730A`20=`20(\9110)act->data\9105\8608\2B03\380A->back\2005if`20(\2408) X\1103`7B +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 10 Archive-name: xanim/part04 -+-+-+-+-+-+-+-+ START OF PART 4 -+-+-+-+-+-+-+-+ X\0503`20`20\F407\6208MAPPED\6207\3008\670B`20`20psize`20=`20\3907->xs\1104* V`20\1109ysize\2E07DEBUG_LEVEL2`20fprintf(stderr,"p\4B07%ld`5Cn",psize); X\6706\630C\7F0B\C804p)\0C06\C307\1506moff)`20while(psize--)`20hist`5B`20(*p++) V-moff`20`5D++\4A07`20`20else\3216*p++\2B0B`7D X\0703\0503\0303break; X*/ X\1905`20/*`20end`20of`20switch`20\1A07act`20=`20act->next_same_chdr; X\370Ewhile\3604 X`7D X Xvoid`20CMAP_Expand_Maps() X`7B X`20`20XA_CHDR`20*tmp\4A07\1603DEBUG_LEVEL1`20fprintf(stderr,"C\4A0F`5Cn") V\3605\4308\A303xa_chdr_start\9D04while(t\2207) X`20`20\7E04`20`20register`20ULONG`20i,msize,d,*map;\5604`20`20msize\5503\3E08- V>msize\5704\1D03ap\0603\1D0Dap; X\1B04if`20(map\6D04\0F04for(i=0;i<\3F06i++)\1B07\8C06\0404d`20=`20map`5Bi`5D V`20`26`200xff; X`09m\1006=`20`20(d<<24)`20`7C\0A0516\0A088)\0903d;\4607`7D X\0604\9108\9C0Dnext\2704`7D X`7D X Xvoid XCMAP_Cache_Init() X\8D04cmap_cache_bits\4403cmap_median_bits\4604\E104\2A10>`20\5206ACHE_MAX_BITS V)\E009\0808\6112\3713\6404\290Bsize\29030x01`20<<`20\7B11*`203)\330E\2E03(USHO VRT`20*)malloc\360C\5105*`20sizeof\2907))\760Fmask\7605ff`20-`20((0\7F088`20- V`20\830F)`20)`20-`201)\4304DEBUG_LEVEL1`20fprintf(stderr,"c\6011%lx`5Cn",c V\190E\4A05if\EC0C`20==`200)`20TheEnd1("CMAP_CACHE:`20malloc`20err")\C70Fchdr V\C704; X`7D X/* X`20*`20Set`20CMAP`20c\5705to`20all\E805ff's.`20Since`20CMAP's`20are`20currentl Vy`20limited\4604to`20256`20in`20size,`20this`20is`20a`20non-valid`20value. X`20*/ Xvoid XCMAP_Cache_Clear() X`7B X`20`20register`20USHORT`20*tp;\170DLONG`20i\1404tp\CC03\DE0A;`20i`20\100C_size V\2804while(i--)\4E04++\2603\E106; X`7D X X X\5206CMAP_Get_Or_Mask(cmap_size) X\2206\1109;`20`20`20/*`20number`20of`20colors`20in`20anim\2905\E704\CF04\3B06o Vr_mask,imagec; X X\4105if`20image`20is`20getting`20remapped`20then`20this`20doesn't`20matter`20* V/ X`20`20if`20(`20`20`20\A506play_nice`20==`20TRUE)\2203\1E03`20`7C`7C`20(x11_dis Vplay_type`20`26`20XA_X11_\2A2ASTATIC\2C1D==`20XA_MONOCHROME)`20)`20return(0); X`20\3C03\B707cmap_size`20>=`20x11_\1109\320C`20`20/*`20needs`20to`20be`20quant V'd\FF04\4903/*`20find`20largest`20power`20of`202`20<=`20d\9A06's`20cmap`20s V\6D04*/ X`20`20or_mask`20=`200x01; X`20`20while(o\1807<=`20\920F\1A09<=`20\3105\1108>>=1; X\8B06round`20\D90Aup\B504near\9C0Dtwo`20\8705imagec\8611\1707<=`20\810B\1508 V\8008\1007\7F09if`20(\1408=`20\9E07)`20return(0);\2403\0D07\BB08-`20\3106); X`7D X X Xvoid`20CMAP_Create_332(cmap,csize,r_shift,g\0807b_\0806\4E06,g_mask,b_mask) XColorReg`20*cmap; XULONG`20*csize\0E09\5308*g\0908\5507;`20/*`20rgb`20shifts`20*/\330Amask,*g_ V\0806\7006;`20`20`20\3308mask\3205`7B X`20`20\3606i,\7706\1008r_bits,g_bits,b_bits,last,disp_bits\2D0Cscale,g_scale,b V_scale; X\2203if`20(x11_display_type`20==`20XA_MONOCHROME)`20`7B`20size`20=`20256;`20 V\6409\11038;`20`7D\4803else\0703\B204`20`20\2C070x01\2D0E0;\2005while(\2605<= V`20x11_cmap_size\6B09<<=`20\3E0C++\6906\5E07>>=1\1E0B--\5A04`7D X\0503r_\6D073;`20g\0C0Bb_\0C0Alast\CD04\3504\8D06`20(\3807+`20\3507+`20\3206) V`20>`20\6809) X\E409witch(last\1504\1708`20`20case`200:`20\4807--;\6F05\C004break;\280C1: V\B108\2819default:\8F07\2808=0\280D`7D X\0404`20`20*b_shift\DE0316`20-\3507\2404*b_mask\1903((0x01`20<<`20\E208-`201) V\1004(1\340A); X X\3603g_\5008\5B09-`20\DB06\5605g_\5611\1E06\5610\1607\5606r_\5609\6108-`20r_ V\5609r_\5611\1E06\5610\1607; X X\3703DEBUG_LEVEL3\0F03`7B X`20`20`20`20fprintf(stderr,"CMAP_Create_332:`20%ld\0505\0404\0404`5Cn", X`09disp_bits,r\0706\C006,b\7108\5C25masks:`20%lx`20\0404%lx\5E06\E107,*g_ V\0806b_mask\5728shifts\5816shift,*g_\0907b_shift\5B05`7D X`20`20i`20=`20\D306`20+`20g\0908\D706\2404*csize\2503\07070x01`20<<`20i; X X`20`20r_scale\1803cmap\0D06`5Br_bits`5D;\2003g_s\2012\6606\2005b_s\2012\7D06 V\2003\2103`7B X`20`20\6703egister`20ULONG`20rmsk,gmsk,bmsk,rshft,gshft\3405\7703shft\5503 V\C707\1304`20r\140D\ED09\8604\8803msk\1C03`20(\DF08\2606)`20-`201;\5306\2206(( V\2208\3F06\2205)`20\1004\8006\6B05\2C10r_\2C0Ershft\AC07for(i=0;i>\EF07)`20*`20r_scale;\3D0Fgreen`20=`20g`20\3D09gmsk\3D05 V\CC05\3D05g_\3D15blue\7A04b`20\3D04`20i\3D03bmsk`20\2606\0404\3D04b_\7A17ay V\3804(r\240311)`20+`20(g\0B046)\0B04b`20*`205)\88055;\3B05`7D X\0404`7D X Xvoid`20CMAP_Create_Gray(cmap,csize,g_bits,gray_shift) XColorReg`20*cmap; XULONG`20*csize\0E09\3806;`20/*`20g\9E04shifts`20*/\2109\5209;`20\9203\2808mask V\2705`7B X`20`20\2B06i,\5A06\1008disp\5E06\1309g_scale; X\1203/*`20find`20number`20of`20bits`20in`20display`20or`20use`20256`20if`20mon Vochrome\7704`20`20if`20(x11_d\2E06_type`20==`20XA_MONOCHROME)`20`7B`20\8809 V`20=`208;`20size\0A03256;`20`7D X`20`20else\0703\C804`20`20\1D070x01;`20\390C0;\2005while(\2605<=`20x11_cmap_si Vze\6B04\1906<=`20\3E0C++\6906\5E07>>=1\1E0B--\5A04`7D X\0503*g\6E08\1E09\1C04*gray_shift`20=`2016`20-`20\200B\2103DEBUG_LEVEL3`20fpri Vntf(stderr,"Gray:`20\5805%ld`20\4706%ld`5Cn", X`09`09`09`09`09\4D09,(\6B0B))\7C04g_scale`20=`20\E806cale`5Bd\3108`5D;\B705cs V\D804=`20size\1205for(i=0;i=\1D040)`20`26`26`20 V\1307<=\3006`20)\570E\C807\1407FALSE); X`7D X X/* X`20* X`20*/ Xvoid`20DL_Read_File(fname,anim_hdr) XXA_ANIM_HDR`20*\1708; Xchar`20*fname; X\A604FILE`20*fin\7704LONG`20i,j,ret,tmp\1404XA_ACTION`20*act\1204UBYTE`20*pic; V\0E04\3505pic_size; X\320Dprev_end_act; X\1C03dl_chdr`20=`200\2B04dl_acts`20\0F04`20 X\1103if`20(`20(fin\1303fopen(\D906"r"))`20==`200) X`20`20`7B`20\0503`20`20fprintf(stderr,"DL_Read_File:`20Can't`20open`20%s`20for V`20reading.`5Cn",fname);\4906TheEnd()\9304`7D X\9806versio\8805getc(fin);`20`20/*`20either`201`20or`202`20*/\3104switch(d V\3809\A705\5D05case`20DL_VERSION_1: X`09`09dl_format`20=`20DL_FORM_MEDIUM;\1E03break;\3E152:\3E0F\9E0B\3A0Edefault: V\160C\DD05\AC0A\4506\AB12FORM_LARGE: X`09dl_imagex\AB06LARGE_XSIZE; X`09\1D08y`20\1D0BYS\1D06\C713\E90B\5B12\1806\5C18\1E07\5D20SMALL:\5C11SMALL V\5B18\1D06\5A13default: X`09fprintf(stderr,"DL_Read_File:`20unknown`20format`20%lx`5Cn",dl_\1106); X`09TheEnd()\610C`7D X\0503dl_title`5B20`5D`20=`200;\1403for(i=0;`20i<20;`20i++)`20\1703`7B X\9504tmp`20=`20fgetc(fin)\AB07\4708i`5D\1E03(tmp)?(tmp`20`5E`200xff):tmp\740Ca Vuthor`5B0\2E04\0F0A\840Bif`20(dl_version`20==`20DL_VERSION_2)\8F09\AC13\1805 V\1E06\AF18\840C\B21F\B404\B80Anum_of_screens\5A11\220Aimages\DE06\350F*`20(dl_ Vformat`20*`203`20+`201); X\F5201)\BB06\510Afram\6405UTIL_Get_LSB_Short(\9208else\3826Long\3707\8B07xa_ve Vrbose\8B04TRUE\8304`7B X\4E04fprintf(stderr,"\1303Ve\B706%ld`20`20F\DF06%ld",\D30A,dl_\F906\9D05\4713I Vmages`20\4406\A806%ld`5Cn", X`09`09`09\C40Aimages,`20\D611\5918`20`20Title`20=`20%s`20`20Author`20\0D04 V\5C04dl_title,dl_author\4705`7D X\0503dl_imagec`20=`20DL_MAX_COLORS;\1D03for(i=0;`20i`20<`20\1E0E`20i++) X`20`20`7B X\9004dl_cmap`5Bi`5D.re\DC03\4D03fgetc(fin)`20`26`200x3f;\2A10green`20\2A24blue V\5419`7D X\2C06hd\F204ACT_Get_CMAP(d\4306,D\BB0C,0\1010,6,6,6);\4903\0303pic_size\4D03dl V_imagex`20*\0C09y;\7006time\2303XA_GET_TIME(100); X\1F06acts\1F03(XA_ACTION`20**)malloc(dl_num_of\5206s`20*`20sizeof\2E0C))\6907 V\2405_cnt\4F030;\5F04for(j`20\0E04`20j`20<\2404\4F07screens;`20j++) X`20`20`7B X`20`20`20`20switch(dl_format)\1605\1C06`20`20case`20DL_FORM_LARGE:`20/*`20larg Ve`20*/ X`09pic\C904UBYTE`20*)`20m\C506\FA04PIC_SIZE(pic_size)`20); X`09if`20(pic`20==`200)`20TheEnd1("DL:\3D07`20failed.`5Cn")\E604\8A06re\E304fre Vad(pic,`20\5608,`201,`20fin\5C08\2904!=`201\5C0Fread`20of`20image`20\6306`20f V\F305`200"); X`09DEBUG_LEVEL2`20fprintf(stderr,"Read`20\F706\3507image\A40Eac\A404ACT_Get_Ac Vtion(anim_hdr); X`09dl_acts`5Bdl_image_cnt`5D`20=`20act;`20`20d\160B++; X`09ACT_Setup_Mapped(act,pic,dl_chdr,0,0,dl_imagex,\0A08y, X`09\6B04\17110,TRUE,FALSE\0606\9504ACT_Add_CHDR_To_\B808ct,\6807\2604break; X X\EA06case`20DL_FORM_MEDIUM:`20/*`20medium`20*/ X\2813SMALL:\270E`09`7B X`09`20`20ULONG`20x,y;\0E05BYTE`20*t_pic; X X\1203tmp`20=`20DL_LARGE_XSIZE`20*\110AYSIZE\3C05pic\2A03(U\4306)`20malloc(`20 V\4204\C704`20`20if`20(\2605=`200)`20TheEnd1("DL:`20\2D06`20failed.`5Cn"); X\C806\0404ret`20=`20fread(pic,`20\5404,`201,`20fin\5C0A\2704!=`201\5C0Fread V`20of`20image`20\6306`20format`201"\3F06DEBUG_LEVEL2`20fprintf(stderr,"R\4104s Vmall/medium`20image\A606\A70Bfor(y\A9030;`20y`20<`20DL_LARGE_YSIZE;\1403+=`20d Vl_imagey)\390B\3B06x`20\3B05x`20\3B0BXS\3B05x`20\3B0Bx)\B204`20`20`7B X\0705`20`20t_pic`20=`20(UBYTE`20*)`20malloc(`20XA_PIC_SIZE(pic_size)`20)\F305 V\3A04if`20(\3E07=`200)`20TheEnd1("DL:\4507`20failed.\EE06\3807UTIL_Sub_Image V\4306,pic,\A409\0A09y,`20x,`20y,(D\D40D),1)\4F09act`20=`20ACT_Get_Action(anim_ Vhdr)\2709dl_acts`5B\5B08_cnt`5D`20=`20act;`20\1E04\1609++\3509ACT_Setup_Mapped V(act,t_pic,dl_chdr,`200,0,\BA14 X`09`09`09\18140,TRUE,FALSE\0606\A50AACT_Add_CHDR_To_\CE08ct,\7007\2C08`7D X`09`7D X`09break; X`20\1004\0303 X`20dl_frame_lst`20=`20(XA_ACTION`20**)malloc(\2504num_of\2C06s`20*`20sizeof V\2F0C)`20); X`20if`20(d\540D=`200)`20TheEnd1("DL_Read_File:`20\6106`20failed"); X X`20prev_end_act\91030;\A405loop\5506\1407switch(dl_version) X`20`7B\D804case`20DL_VERSION_1: X`09d\9108cn\5407`09for(i=0;`20i`20<`20\E010;`20i++) X`09`7B X`09`20`20register`20ULONG`20tmp; X`09`20`20tmp\4B03fgetc(fin)\150B(tmp`20%`2010)`20-`201`20+`20((\1204/`20\1207) V`20*`204;\3004\9909lst`5B\A60C`5D`20=`20dl_acts`5Btmp`5D;`20 X\2F0Ccnt++; X`09`7D X`09break; X\FA132:\C207DEBUG_LEVEL2`20fprintf(stderr,"`20DL`20reading`20frame`20lst:`20") V\A10Ecnt\93030;\1504i`20\0A08while(i`20<`20dl_num_of\3006s)\1F04\7E05`20`20reg Vister`20ULONG`20tmp\3D05`20`20tmp`20`20=`20`20fgetc(fin);\1405`7C=`20`20(`20 V\160A`20<<`208);`20i+\F504\3A04\D31D`5Ct<%ld`20%lx>",i,tmp); X\3806if`20(\6204`26`200x8000\A705\A909`20`20switch(tmp\1A07\1C05`09case`200xff Vff: X`09`09\1506\1D04\D206cnt;\1107XA_ACTION`20*begin_act,*end_act\2508ACT_END_LP_H VDR`20*end_lp\A404\1F05cnt`20`20=`20`20fgetc(fin);`20\1404`7C=`20`20(`20\160A V`20<<`208);`20i++;\3B07DEBUG_LEVEL2`20fprintf(stderr,"begin`20loop`20%ld",cnt) V;\3907\AD09\7903ACT_Get_Action(anim_hdr,0)\2E08\D007\2C20\2B04\0404\0404dl_fra Vme_lst`5Bd\0D08cnt`5D`20=`20\7E09\3518cnt\E50AACT_Setup_Loop(b\3D08,e\9706,cnt V,d\3B0B, X`09`09`09`09\BF0Elp\7803(ACT_END_LP_HDR`20*)e\4306->data\300E->prev_e\FC09 V\0F0C\2B08\230F\1E08`20`20/*`20nest`20loops`20*/\3005`7D X\0604break;\0B03case`200xfffe:\1A05`7B X\F20A\A70C\9106\CF23\8F0C\D40Eif`20(dl_frame_cnt`20>`200) X`09`09`09*\EE08end_frame\5A03\2A0D-`201;\7B08lse`20\32150; X X\2305\0404\0404\4309lst`5B\500C`5D`20=`20\A80C; X`09\3815cnt++\7904`09/*`20unnest`20loops`20*/ X\8F06\470C\5603\9808\5E0F\2B05DEBUG_LEVEL2`20fprintf(stderr,"end\5B05`20"); V\3005`7D X\0604break;\0B03case`200xfffd: X\9103tmp`20\7003`20fgetc(fin);`20tmp`20`7C=`20`20(`20\160A`20<<`208);`20i+ V\C906\851Dkey`20press`20%lx`5Cn",tmp\8F05`09b\8808default:\1504\3F10unknown V`20code\421A\D903`20`20\E005\0704else\0A06`7B X\0705`20`20if`20(\CB04<`20dl_image_cnt) X\1F07\2809`20`20dl_frame_lst`5B\0D09cnt`5D`20=`20dl_acts`5Btmp`5D;\3413cnt++ V\1909\8F07\910C\6B05\E511\1703\E80D-`20ignored.\F30F\580D\0705\0505DEBUG_LEVEL V2`20f\5D0F`5Cn"\3B06if`20(dl_loop\AF06`20>\D205\BB09)`20\1F0E=`200; X`09\6203break; X`20\6E03`20`20anim_hdr->\3906lst`20=`20 X`09(XA_FRAME`20*)malloc(sizeof(\1908)`20*`20(dl_\7109`20+`201)`20);`20 X\9E06\5B15=`20NULL) X\FC06TheEnd1("DL_ANIM:`20couldn't`20malloc`20for`20f\3F08`5C0"); X\3C03for(i=0;`20i`20<`20\840C;`20i++)`20\2303`7B X\6104\8413`5Bi`5D.act`20\E703\3A09\1706; X\3304\BB04\0703\DB0A\1D06->type\C104ACT_BEG_LP\C708`20`20`7C`7C\311FEND_LP) V`20) X`09`09`20\991Atime\99030;\5A05else\2A1Fdl_time\3004`7D X\5716\9809cnt`5D\620D\2E22act`20\2E12loop\2606\8206\100A\280Fast_\280B\5909-1 V\290Eimagex\2506\0C06\2013y`20\200Ay;\2012c`20\200Ac;\2012d`20=`208;`20/*`20no Vp`20*/ X X`20`20free(d\9A08lst)\3904\1608acts); X`7D X $ call unpack XANIM_DL.C;1 - 522594354 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X/* X`20*`20xanim_dl.h X`20*\1104Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec. X\3703All`20rights`20reserved\1804\1B04This`20software`20may`20be`20freely`20co Vpied,`20modified`20and`20redistributed X\4203without`20fee`20provided`20that`20this`20cop\B307notice`20is`20pr\8607 V\4004intact`20on`20all`20copies`20\6A04\7709\1406\B20Aer\4605no`20warranty`20o Vr`20other`20guarantee`20of`20fitness\0B04\8C05\E808\4B04`20It`20\8B05\B207sole Vly`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B204liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X X#define`20DL_MAX_COLORS`20`20`20256\1C0CDEFAULT_TIME`20100\390DVERSION_1`20 V`201\18142`20`202\310DFORM_LARGE\6A030 X\1A10MEDIUM\4D0FFORM_SMALL`20\4F10LARGE_XSIZE\1C0332\520D\1D06YS\1D0620\1D0D V\6A06\3B0816\1D14\3B07100 X\1D0BSMALL\7409`208\1D13\7408`2050 $ call unpack XANIM_DL.H;1 - 151527623 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_fli.c X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20"xanim_fli.h"`20 X XLONG`20Is_FLI_File(); Xvoid`20Fli_Read\160FLI_Read_Header\1812Frame_\1E0AFLI_FRAME`20*FLI_Ad\2307 V\3A0DDecode_BRUN(\1813LC\16167(\7F11COLOR(); X XXA_ACTION`20*ACT_Get_Action(); XXA_CHDR\1B0ACMAP\4E09ACT_Add_CHDR_To_\380A\1F09Setup_Mapped\190DGet_C\4E08 X X\1805UTIL_Sub_Image(); XULONG`20UTIL_Get_LSB_Long\1B17Short(); X Xstatic`20ColorReg`20fli_cmap`5BFLI_MAX_COLORS`5D; X\2A07Fli_Header\2C05hdr;\1B0CFrame_\2108rame_hdr; X\2409LI_FRAME`20*fli_\2206start,*\110Acu\560A\BF06\1C0Bnt\1C13imagex,f\0B08y, V\0B09c; X X/*`20 X`20*\7E04`20has`20time`20period`20of`201/70th`20sec`20where`20`20FLC`20\2914 V`20ms. X`20*/ X#define`20FLI_TIME_PERIOD`20`20`20((fli_hdr.magic`20==`200xaf11)?(14):(1)) X XXA_CHDR`20*fli_chdr; X XFLI_FRAME`20*FLI_Add_Frame(time,act) X\F106time; XXA_ACTION`20*act; X`7B X\B804\4309fframe; X X`20`20\0B06`20=`20(\200B)`20malloc(sizeof(\1B09)); X`20`20if`20(\3808=`200)`20TheEnd1("F\9C0C:`20\4606`20err")\6E0B->time\7403 V\AD06\170Aact\1603act; X\150Anext\16030;\4104\7B05li_frame_start\8407\1611\4107\4B04else\210Bcur- V\5708\2508\7104\210C\400D\1A0Bnt++\1304return(fframe); X`7D X Xvoid XFLI_Free_Frame_List\2507s)\1D06RAME`20*\1407; X`7B X`20`20\180Ctmp;\1303while(\2607`20!\E304\1603\2D04\8F03tmp\A009s; X\1405\2A07\1709\E206\1D07ree(ftmp); X`20`20`7D X`7D X X/* X`20* X`20*/ XLONG`20Is_FLI_File(filename) Xchar`20*f\1007\AC07IL\A704in\4B04UL\3D04data; X\0F03if`20(`20(fin=fopen\4A09,"r"))`20=\C60Cfprintf(stderr,"can't`20open`20%s V`5Cn",f\8708\C405TheEnd()\C106\0503data\EE03UTIL_Get_LSB_Long(fin);`20`20/* V`20read`20past`20size`20*/ X\3716Short(\3806\3708magic`20\3305fclose\2006\E509\4806=`200xaf11)`20`7C`7C V`20\140E2)`20)`20return(TRUE)\3C04\1007FALSE); X`7D X X Xvoid`20FLI_Read_Header(fp,fli_hdr) XFILE`20*fp; XFli_\2106`20*f\1F06; X`7B X`20`20LONG`20i; X\AD04\1806->\F305`20`20\EB0FLong(fp\8D05\2B09\EC06\2B10Short(\2C10frames\2C26w Vidth`20\2C26height\2C26res1\DB12\B017lags\2C27speed`20\2C1Dif`20(\300F<=`200) V`20\150F=`201;\5B0Cnext\B312Long\B212ri\2B20or(i=0;i<102;i++)`20fgetc(fp); V\3B03/*`20ignore`20unused`20part`20of`20Fli_Header`20*/ X\7507imagex=f\8008width;\1D0Cy=\1D09height\1E04if`20(`20(\1909magic`20!=`200xa Vf11)`20`26`26\1E192)`20)\4203`7B X\AC03fprintf(stderr,"i\8E06%lx`20\7C07%lx`5Cn",\AB0A\0B0Ay)\8A04\4411Fli`20H V\E706Error`20\7F06\5404not`20\A408\5608\A20A\4F06TheEnd()\0D04`7D X`7D X Xvoid`20FLI_Read_Frame_Header(fp,frame_hdr) XFILE`20*fp; XFli\290D`20*f\2708; X\F904LONG`20i; X\0B03\1A09->size\A003UTIL_Get_LSB_Long(fp\8F05\2B0B\D406\2C0FShort(\2D12chunks V\2E1Eor(i=0;i<8;i++)`20fgetc(fp);`09/*`20ignore`20unused`20part`20of`20\E712/ X\4C03DEBUG_LEVEL1`20 X`09fprintf(stderr,"Frame`20H\3206\F305%lx`20`20m\D205\0B05\B007%ld`5Cn", X`09`09\CC0Bsize,f\100Amagic\110C\3D06); X\8A03if`20(`20`20`20(\3010`20!=`200xf1fa) X\2003\0303`26`26\261A00)`20\2804`7B X\2A04\CF15_H\CF06Error`20\CB0Anot`20\6B08\CC07`09`09\0303\6B10); X\5C04TheEnd()\0E04`7D X`7D X Xvoid`20Fli_Read_File(fname,anim_hdr) Xchar`20*fname; XXA_ANIM_HDR`20*a\2407; X\BA04FILE`20*fin\5D04LONG`20i,j,ret\1004XA_ACTION`20*act\1204UBYTE`20*pic; V\0E04\3105pic_size; X\1303if`20(`20(fin=fopen\9807"r"))`20==`200) X`20`20`7B`20\D705fprintf(stderr,"can't`20open\DC04`20File`20%s`20for`20reading V`5Cn",fname);\4306TheEnd()\8D04`7D X\1404fli_chdr`20=`200\1604fli_frame_start\1712cu\2C13cn\2A07\1603FLI_Read_Head Ver(fin,`26fli_hdr); X\F407xa_verbose)`20\D910\A903Size`20%ldx%ld`20Frames=\1004`20Magic\0B04x`5Cn", V X`09\5907.width,`20\0F08height,f\0F07frames,\0F08magic\8C06`20`20/*`20Allocate V`20image`20buffer`20so`20deltas`20may`20be`20applied`20if`20\2306ing`20*/ V\4603pic_size`20=`20fli_imagex`20*`20\0D09y;\F80A\3C06_flag`20==`20TRUE)\1E03 V`7B X\8E04pic\4503(UBYTE`20*)`20malloc(`20\6209); X\2804\4C04\2C05=`200)`20TheEnd1("BufferAction:`20\3D06`20failed"\3A05`7D X\F604for(i`20=`200;`20i`20<`20fli_hdr.frames;`20i++\920AULONG`20fli_time,frame V_read_size\8E06\AF07t_pic; X\1305FLI_Read_Frame_Header(fin,`20`26frame_hdr); X\2D05\5E08\9303XA_GET_TIME(\9808speed`20*`20FLI_TIME_PERIOD)\7D06\0505if`20( V\5709.magic`20==`200xf100)\2305\CF06`20`20\D005i;\0E07DEBUG_LEVEL1`20 X`09`20fprintf(stderr,"FLI\4607`20Frame:`20size\A903%lx`5Cn",f\7509size\9307 V\D203or(i=0;i<(\220E`20-`2016);i++)`20fgetc(fin)\3708\C70E\3005`26`200x01 V\2D0D\F306`7D X\0604else\370Fchunks==0)`20`20/*`20this`20frame`20is`20for`20timing`20purposes V`20*/ X\4B04`7B X\8506DEBUG_LEVEL1`20fprintf(stderr,"`20FLI`20DELAY`20%ld`5Cn",fli\AE06peed V\CA09act`20=`20ACT_Get_Action(anim_hdr,ACT_DELAY\300C->data\36030;\1507FLI_Add V_Frame(fli_time,act\3807`7D X\0604else\EA0Fhas`20real`20d\5304in`20it`20\E70F/*`20Loop`20through`20chunks V\2C04the`20frame\2A07\3A08`20`20frame_read_size\AC0310\AD08for(j=0;j<\2606hdr. Vchunks;j++) X\2606\7E08`20`20ULONG`20chunk_size,chunk_type\5305 X`09/*`20only`20last`20chunk\9E04\E106should`20have`20full`20time(j`20must`20st Vay`20signed)\BC09`20`20if`20(j`20<`20(f\A10F`20-`201)`20)`20fli_time\D8030; X`09else`20f\140AXA_GET_TIME(fli_hdr.speed`20*`20FLI_TIME_PERIOD)\C305\7605 V\E20A\4303UTIL_Get_LSB_Long(fin)\2D10type\2D10Short(\2E06`09frame_read\5906+= V`206`20+\6B0B\520A\F504\830B`26`200x01)`20f\420E++\320ADEBUG_LEVEL2`20fprintf( Vstderr,"`20\6506`20%ld)`20\5205%lx`20`20t\B204\0A04tot`20%lx`5Cn", X`09`09j,c\7B09\0B07type,f\7E0E); X\7D08switch\B207type) X\1B08`7B X\0A08\8503ase`20CHUNK_4:\1205/*`20FLI`20Color`20with`208`20bits`20RGB`20*/ X\3C0A\E7121`20\E711\4C05OLOR(4)`5Cn"); X`09`09\1504_Read_\1A06anim_hdr,fin,fli_time,8,\DE06hdr.chunks)\3D05break; X`20\C610FLI_COLOR\C8186`20\C829\6803`09f\CB1A11\CC2F6,\CC1D\CB14LC: X\17157:\1814BRUN\1915COPY: X`09`09`7B X\7003UBYTE`20*chunk_data,kludge\8D05\0404if`20(`20(\2006type==\4408)`20`26`26 V`20(fli_imagex`20==`20320))`20\4306`20=`204\4705else`20\14096;\5709`20`20 V\3F05hdr.magic\42040xaf12\5C07rame_hdr.size`20`26`200x01) X\3F03\D104\220Aread_s\2304>`20\340E\2D0D!(\C706\4D0C)`09`09`09\B109++; X X`09\3005\0404act`20=`20ACT_Get_Action(anim_hdr,0);\5D04FLI_Add_Frame(fli_time, Vact\2006switch\7A07type\9305`7B X\9804case\4105LC7:\AA07DEBUG_LEVEL1`20fprintf(stderr,"`20FLI`20LC(7)`5Cn") V\6005\A806->type\AE07\5207\1F08break;\7110\702D12\7123\701CBRUN\722ABRUN(15) V\7420BRUN\761CCOPY\762ACOPY(16)\7620COPY\7612`7D X\0604if`20(chunk_size`20>`20kludge)\1C04`7B X`20`09\3504\2006data\5503(UBYTE`20*)`20malloc(`20\3F0A-kludge`20); X\3A06\5E0A\3E06=`200)`20TheEnd1("\C405HUNK:`20\4C06`20failed"\4009ret`20=`20fr Vead(\870B,`20\B40B\7507),`201,`20fin)\7D0C\4104!=`201\7616read\740B\3603`7D X\0503else\3015invalid`20chunk`20size"); X X X\3403ACT_Add_CHDR_To_Action(act,fli_chdr)\6205\9604xa_buffer_flag`20==`20FALSE V)`20act->data\F603\EF0A; X`20\CF03\0404\0808\A306/*`20buffer`20it`20up`20*/ X\6103`7B X\FE05ULONG`20xpos,ypos,xsize,ysize,new_size; X X\2C05switch(chunk_type) X\1805\4B07`20`20case`20FLI_LC7:\1503`09FLI_Decode_LC7(f\E307->map,\BA0A,`20pic V,`20 X\3203`09fli_imagex,f\0B08y,\1B05`26xpos,`26y\0605\A906`26ysize,FALSE); X\2503break;\9213\9112\907CBRUN\9210BRUN\941Apic,\921B\730Bxpos`20=`20y\07060; V`20xsize\0B03\3A0A;`20ysize\140Cy;\AF1BCOPY\AF05if`20(`20(\9706size-kludge) V`20>`20pic_size) X\2803`7B X\0503`20fprintf(stderr,"c\3809\7A03%lx`20\3408=%lx`5Cn",\E105\260A,pic\5406 V\9D05`20TheEnd1("FLI`20COPY:`20invalid`20c\3509")\2D05`7D X\0503memcpy((char`20*)pic,(\0C07\3106data,(ch\D0096)\3F06xpos\A503yp\07050; V`20x\B707fli_imagex;`20ys\140Fy;\3C04break;\0A03`20`20`20`7D\0706new_\2D07 V\4906*`20ysize; X/*POD`20TEMP`20could`20move`20Sub`20to`20Setup`20*/ X\4505t_pic\4203(UBYTE`20*)`20malloc(`20XA_PIC_SIZE(n\6B07)`20\CA05\3803if`20( V\3C07=`200)`20TheEnd1`20("FLI`20BUFF`20CHUNK:`20\5006`20failed"\4008UTIL_Sub_I Vmage\4B06,pic,xsize,ysize,xpos,ypos,fli_imagex,1)\4307ACT_Setup_Mapped(act, V\4906fli_chdr, X`09`09`09x\4609\5C0C\520B\0B09y,0,\3204TRUE,FALSE\0606\7208free(chunk_data) V\1705`7D`20/*`20end`20of`20buffer`20*/ X`09`09`7D X`09`09break; X`20 X`20\3E03\0404`20`20case`20FLI_BLACK: X`09`09`7B X\1E0A\0707DEBUG_LEVEL1`20fprintf(stderr,"`20FLI`20BLACK(13)`5Cn")\8805if`20( V\9C06size`20>`206)`20\5A12\0606TheEnd1("FLI_Read\8E06`20different`20than`20exp Vected`5Cn"); X X`09\4009act`20=`20ACT_Get_Action(anim_hdr,0)\9105FLI_Add_Frame(fli_time,act V\2006ACT_Add_CHDR_To_\4708ct,fli_chdr); X X\BD11\E904xa_buffer_flag`20==`20TRUE)\5704`7B X\F113t_pic`20=`20(UBYTE`20*)`20malloc(`20XA_PIC_SIZE(pic_size)`20); X\4613\7A04\4A07=`200)`20TheEnd1("Buff\F004`20BLACK:`20\5D06`20failed"\EF05`09/ V*`20create`20black`20image`20*/ X\6913memset\6C06,0x00,\A819`20 X\5C07lear`20pic`20buffer\5A1E\5809\4B09\A404\2003ACT_Setup_Mapped(act,t_pic,fl Vi_chdr, X\72030,0,fli_imagex,\0B09y,\16160,\3604TRUE,FALSE,TRUE\7506`7D X\0503else\0804`7B X\8705act->type`20=\9305FLI_BLACK; X`20\210Adata\21030;\4708\0404break;\FC0Bcase`20FLI_MINI: X`09`09\6406LONG`20i\F706DEBUG_LEVEL1`20fprintf(stderr,"`20FLI`20MINI(18)`20ign Vored.`5Cn"\BF06`20for(i=0;i<(chunk_size-6);i++)`20fgetc(fin\2E04\950Aif`20( V\2E0A`20`26`200x01)\2E0E\CF0C\D00B`20default:`20\150C`20`20`7B X\0F0D\E20B\1007\D910\D804Unsupported`20Chunk:`20type`20=`20%lx`20size=%lx V\ED03, X`09`09`09`09`09chunk_type,c\BF09); X\7B0Ffor(i=0;i<\E60B-6);i++)\E60E\3207if`20(\2B0A`20`26`200x01)\2B0D\620D`7D X\3A08`20`20\9B03`20break\240A`7D`20/*`20end`20of`20switch`20*/ X\1C12chunks`20is`20frame\2508\230Cnot`20Timing`20F\240A\220Cframes`20in`20file V\2006\D004`20(xa_buffer_flag==TRUE)`20`26`26`20(pic`20!=`200)`20)`20free(pic); V\D209`20`20fclose\FB07\1003anim_hdr->frame_lst`20=`20(XA_FRAME`20*) X`09`09malloc(sizeof(\1C08)`20*`20(fli_frame_cnt`20+`201)); X\A806\5B15=`20NULL)`20TheEnd1("FLI_Read_Anim:`20\6B06`20err")\A105\610Bur V\9B03\100Astart;\6D04\17030;\0903while(f\320D!=`200) X`20`20`7B X`20`20\9806i`20>=\570Cnt\2004\2208\7203printf(stderr,"\A20Fframe`20inconsisten Vcy`20%ld\0404`5Cn",\4507\0606\7305,f\6C0D\A904\1804break;\0D05`7D X\0604anim_hdr->\2D06lst`5Bi`5D.time`20\B10Dur->time\3D06\3717act`20\3611act V\3506\180D\2812next\2906i++;\0903\A204\690Aimagex\3707\0D06\2504\210Fy`20 V\210By;\2112c`20\210Bc;\2112d`20=`208;`20/*`20nop`20*/\220D\EE0Dtime\2D030; V\231Aact`20`20\2311loop\FA06\1C08if`20(i`20>`200)\270Cast_\2708i`20-`201; V\2B03else\0E03\3907FLI_Free_Frame_List(fli_\8606start); X`7D X X X/* X`20*`20Routine`20to`20Decode`20a`20Fli`20BRUN`20chunk X`20*/ Xvoid\5C05\2506_BRUN(map,data,image_out\0A06x,imagey,map_flag) XULONG`20*map; Xunsigned`20char`20*data,*i\4308; X\2C06\4A0D\1508\5108; X`7B X`20`20\2907,j,k,packets,size,x,offset; X\2603for(i=0;`20i`20<\5606y;`20i++) X`20`20\4604`20`20\2D06`20=\2203*`20\7806; X\1904\5507\1A03*data++\5105`20`20x=0;\0905for(j=`200;`20j`20<`20\2F07;`20j V\5E06\6008`20`20size\460C\1606if`20(\1A05`26`200x80)`20\1706`20`20/*\3206<`200 V`20so`20there`20is`20-s\1604unique`20bytes`20*/ X\3406\6B08\6D09256-size;`20\1A09\7104map_flag`20==`20TRUE\A906\420E\2A06x11_ V\6505_pixel\31044)\240B\FF06k=x;k<(x+size);k+\FB07\280C((ULONG`20*)(image_out) V)`5Bk+offset`5D\AE03\2206)(map`5B*data++`5D); X\440Aelse\97182)\9738SHORT`20\981DSHORT\991F\7F38BYTE\7E1EBYTE\7D19`7D X\8515`7B X\8D5D\8907\880D\0B09x`20+=`20size;`20`20`20\1607\A708else\7810\0505/*\3305`20i Vs`20pos`20repeat`20next`20byte\1D06times`20*/\4D07\E50AULONG`20d;\1109d`20= V`20\A507\150Aif`20(map_flag`20==`20TRUE) X\1E08\4E0A\2A06x11_bytes_pixel`20==`204)\240B`20`20for(k=x;k<(x+size);k++) V\240D\0404((\A006*)(image_out))`5Bk+offset`5D\AC03\2206)(map`5Bd`5D)\B40A`20 V`20else\91182)\6D0E\922BSHORT`20\931DSHORT\9419\7A39BYTE\791EBYTE\7813`7D X\8015`7B X\875Dd)\8214x+=size;`20`20`20\1407\1C06`7D`20/*`20end`20of`20packets`20per`20l Vine`20*/ X\220E\1608`7D X X/* X`20*`20Rout\1404to`20Decode`20an`20Fli`20LC`20chunk X\2F04void`20FLI_Decode_LC(map,data,i\CF08\0A06x,imagey, X`09`09xpos,ypos,xsize,ysize,map_flag) XULONG`20*map; XUBYTE`20*data\E404\0303/*`20delta`20data\8604\2307\7109;`20/*`20\0E09`20buffer V`20*/ XU\5805\8F0D\5403\2D14size\320A*xpos,*ypos,*\B306*ysize\6A05\2C05of`20affected V`20are\9806\3D05\D708\BE04/*`20remap\7106`20using\2104`20or`20not`20*/ X`7B X`20`20\A807,j,k,packets,size,x,offset; X\2508start,lines,skip,minx,maxx; X X`20`20start`20=`20*data++;`20\1106`7C=\1208`20<<`208;\9A05lines`20to`20skip V\8B04`20`20\1306\3F0B\1106\3F15number`20of`20\2506*/ X\4203minx\4103imagex;`20 X\1203axx\12030; X`20\0E03for(i=start;i<(start+lines);i++)\2303`7B X`20`20`20`20\F906\4B04`20*\4F08\1905packet\A60C\7804`20`20x=\6304\0903for(j=0; Vj<\2B07;j\5906\5B08`20`20\F205\E70B\D105this`20is`20the`20\2105count`20*/ X\3507ize`20\7610`20`20if`20(j==0)`20\0A04\3905<`20minx)`20minx\3203skip\9B06 V\A603+=\0F0C\3305ize\4005\1407`7B X/*\0B07\7512\1808fprintf(stderr,"\4507`20what`20to`20we`20do?`20next\D404%ld V`5Cn",size);\4509TheEnd(); X\E509`7D X\0806else\9E09`20`26`200x80)`20/*\5206byte`20repeated`20-s\2404times`20\4909 V`7B X\6608ULONG`20d;\D410256-size;`20\1A09d`20\EB0B`09if`20(map_flag`20==`20TRUE) X\2C08`7B X`09`20\A205x11_bytes_pixel`20==`204)\2709\0404for(k=x;k<(x+size);k++)`20 X`09`09((\9F06*)(image_out))`5Bk+offset`5D\9103\2206)(map`5Bd`5D); X`09`20`20else\7D182)\7D0D\7E1FSHORT`20\7F1DSHORT\8012\662CBYTE\651EBYTE\640B V\5708`7D X\0A08\730D`7B X\7A50d)\7514x+=size;`20`20`20\1407\1C08else`20/*`20size`20is`20pos`20*/\1D07 V\9F0Aif`20(map_flag`20==`20TRUE)\C715\2A04x11_bytes_pixel`20==`204)\240B\ED20L VONG\ED1ELONG)(map`5B*data++`5D)\F80A\D607\8A172)\8A2BSHORT`20\8B1DSHORT\8C1F V\722BBYTE\711EBYTE\7019`7D X\7815`7B X\8050\7C07\7B0D\0B09x+=size;`20`20`20\1407\9806`7D`20/*`20end`20of`20packets V`20per`20line`20*/ X\2404if`20(x`20>`20maxx)`20maxx\7603x;\1C03\3E0C\3208\1703\3105a_optimize_flag V`20==`20TRUE)\2003\FC05*ypos`20=`20start;\1206size\1303lines;\1305xp\2505minx V\1105\5B04\8205>`20imagex\9106=imagex\2310minx)`20*x\5807\1605-`20\4D09else V\1E0A\4306\200B`7D X\2306\B2100;\AE0Dimagey;\AF0C\2207\5A0E\5306\0503DEBUG_LEVEL1`20fprintf(stderr V,"`20\3903`20`20LC:`20xypos=<%ld`20%ld>`20xysize\110A`5Cn",\6704\3206\0909 V\0606*xpos,*ypos,*xsize,*ysize); X X`7D X X X/* X`20*`20Routine`20to`20read`20an`20Fli`20COLOR`20chunk X`20*/ Xvoid`20FLI_Read_COLOR(anim_hdr,fin,fli_time,cbits,num_of_chunks) XXA_ANIM_HDR`20*\3808; XFILE`20*fin; XULONG`20\460E\1608\4D0D; X`7B X`20XA_ACTION`20*act; X`20U\2905k,l,c_index,packets,skip,colors,cn\2C0Amask; X X`20mask`20=`20(0x01`20<<`20cbits)`20-`201; X`20\4507\2003UTIL_Get_LSB_Short(fin); X`20\7107\24030; X X`20DEBUG_LEVEL1`20fprintf(stderr,"`20`20`20\530A%ld`5Cn"\A908\4B05nt=2; X`20for(k=0;k<\1D07;k++) X`20`7B X`20`20skip\3D03fgetc(\8307`20colors=f\150D\8A20\0303\4D05%ld\4107\9308skip,c V\1305\5F06nt+=\9904`20if`20(c\6D06=0)`20\0B07FLI_MAX_COLORS\2808\2A08`20>`20x1 V1_cmap_size)`20`26`26\2303\8105(x11_display_type`20`26`20XA_X11_CMAP)`20) X`20\F705\C111FLI`20has\BE0Cand`20the`20\5007`20only`20supports\2904.`5Cn", V\7B08\D703olors,x\9D0D\BE04`20TheEnd(\0D05`7D X\2A03_index`20+=`20skip\1704for(l`20=`200;`20l`20<\4C07;`20l++\B30Ali_cmap`5Bc V\3F06`5D.red`20`20`20=`20fgetc(fin)\F003mask\7605\3012green`20\302Ablue\601ADE VBUG_LEVEL5`20fprintf(stderr,"`20\2103\0404`20%ld)`20`20<%lx`20\0404%lx>`5Cn", V`20 X`09`09`20`20l,f\7508l`5D.red,`20\110Cgreen\230Dblue);\7E04\A507++\0E04`7D`20/* V`20end`20of`20colors`20*/ X\2503nt+=`203`20*\1607; X`20\2B0Cpacket\2C06if`20(cnt`260x01)\F20B;`20\3104read`20pad`20byte\2C04needed V\3A04 X`20/*`20if`20only`20one`20chunk`20in`20frame`20this`20is`20a`20cmap`20change V\2E06\7808`20(num_of_chunks==1)`20`26`26`20(fli_chdr`20!=`200)`20) X`20`7B\FB04act`20=`20ACT_Get_Action(anim_hdr,0);\2504\1F08CCMAP(act,fli_cmap,F VLI_MAX_COLORS,0,cbits,\0606cbits\4306FLI_Add_Frame(fli_time,act\630AAdd_CHDR_T Vo_\8A08\6C08hdr\2904`7D X`20else X\3203\D109\BF0ACMAP(\9B1A\1111 X`09`09`09\0303`09c\B413`7D X X/* X`20*`20Routine`20to`20Decode`20an`20Fli`20LC`20chunk X`20*/ Xvoid\E505\2406_LC7(map,data,image_out\0A06x,imagey,\8004xpos,ypos,xsize,ysize, Vmap_flag) XULONG`20*map; XUBYTE`20*data,*i\5508; XU\2405\5C0D\1508*xpos,*ypos,*\6206*y\630D; X`7B X`20`20\4307,j,x,y; X\1108packets,blocks,xoff,cnt,tmp_data0,\0A081;\3509minx,maxx,min\4D06\B906ptr; V\0E03 X X`20`20minx`20=\B407\1504maxx\11030;\1D06y`20\1D07y; X\1203ptr\1108\F306`20`20\2204\2E05\A407\0F03*data++;`20\1308`7C=\1408`20<<`208 V;`20`20/*`20#`20of`20\2208*/\5F04DEBUG_LEVEL5`20fprintf(stderr,"pkts=%ld`5Cn", Vp\3706);\3604for(i=0;`20i`20<\5108;`20i++) X`20`20`7B X`20`20`20 X\0403`20block\9F0D\1207\9E11\5504\8D1F\2104`20%ld)`20",i)\8705`20`20if`20( V\5407`26`200x8000)`20\EB04neg`20lines`20to`20jump`20*/ X\3204\9E05\9C0C0x10000`20-\1307; X\2106y`20+=\130F\A022yskip`20%ld",\3B06); X\700F\F907;`20\1207`7C=\1308`20<<`208;\3005`7D X\7026\5609%ld`5Cn\750B\4005if`20(xa_optimize_flag`20==`20TRUE)`20\1E04y`20< V`20miny)`20miny\4803y;\3B06ptr`20\0F03(UBYTE`20*)(`20(ULONG)(image_out)`20+ V`20y*imagex*x11_bytes_pixel)\C706x`20=`200;\5206for(j=0;`20j\7403\A806;`20j++) V X\1E04`7B X\D005`20xoff`20\7804LONG)`20*data++;`20`20/*`20x`20offset`20*/\2E07cnt`20 V\2E18halfword`20count`20\3409\DA04+=`20(\6A05*`20x\B915\BB04+=`20xoff\BF07`20 V`20DEBUG_LEVEL5`20 X\1406\D703printf(stderr,"`20\1908`20%ld)`20\6605%lx`20\AC05=`20%lx",j,xoff,cnt V); X\4A07if`20(\2304`26`200x80) X\1606`7B X\4E08\3F06256`20-`20cnt\A708\970F\8E1A\0505NEG`20%ld`5Cn",\7D06\1908\7E04xa_op Vtimize_flag`20==`20TRUE\8C08\8E03`20`20\0C09\3407`20<`20minx)\0605\A103x; V\220Bx`20+=\D606<<`201\6F0B\3D08>`20maxx)`20maxx\3D0E`7D X X`09\2404map_\8D17\4E0Btmp_data0`20=`20map`5B*data++`5D;\24131`20\241A\960511_b Vytes_pixel\79044) X`09\FE04\0604`20`20ULONG`20*ulp\4A03(U\0E06)ptr\4A0C`20`20while(cnt--)`20`7B V`20*ulp++\3209)t\B308; X`09`09\5804\21181;`20`7D\7906ptr\1F05BYTE`20*)ulp\720C`7D X\0C0Aelse\CD182)\CD0DSHORT`20*usp\5C05\0F07\CF06\2205\C811sp\A707SHORT\C914 V\2217\CA1Asp\CA1C\0F0B\8F12ptr\6D07BYTE\8E0C\360C\0C0C\A304\3617\A206\0303 V\7705`09`7B\440B\5909\3603*data++\630C\4209\1F16\B643\B420\3A07`7D X\0806else X\0B06`7B`20`20`20/*`20cnt`20is`20number`20of`20unique`20pairs\1004bytes`20*/ V\8409DEBUG_LEVEL5`20fprintf(stderr,"`20\9F0EPOS`20%ld`5Cn",cnt);\4509if`20(xa_ Voptimize_flag`20==`20TRUE) X\2608`7B X\4B0A\3204\AD04==`201)\BB05potential`20NOPs`20just`20to`20move`20x`20\B20B V\490E\4B06`20(*ptr`20!=`20*data)`20`7C`7C`20(ptr`5B1`5D`20!=`20data\0B03)`20 V\6B03\3C0D\4A0E\C907`20<`20minx)\0605`20=`20x;`20\270Fx`20+=\C006<<`201); X\4614>`20maxx)`20maxx\4605\260D`7D X\0C0C`09`20`20else X\E41C\9821\961D\9422\920A\0A0A\3604map_flag`20==`20TRUE) X\A414\600511_bytes_pixel\31044)\DC04`7B`20\0604`20`20ULONG`20*ulp\7D03(U\0E06) Vptr; X\2005while(cnt--)`20`7B`20*ulp++\2B09)map`5B*data++`5D;\DE0D\0C0C\0303\391D V\DF03\6D05ptr\2205BYTE`20*)ulp\540C`7D X\0C0Aelse\E1182)\E10DSHORT`20*usp\5C05\0F07\E31Csp\AA07SHORT\E40F`09`09\3504 V\251E\D018sp\D01C\0F0B\9613ptr\7107BYTE\9515\251E\700B\0A0A\7831`20*\5006 V\7419\2109\6603\5A07`7D`20\0905`7D`20/*`20(j)`20end`20of`20blocks`20*/ X\1E04y++; X\2508i)\2508packet\2605 XDEBUG_LEVEL3 X`20fprintf(stderr,"`20\6C05LC:`20minx\0504y`20(%ld`20%ld),`20maxx`20max\150B V`5Cn",\A306minx,miny,maxx,y);\BC04if`20(xa_optimize_flag`20==`20TRUE) X`20`20`7B X\3C04\2604\7205>=`20imagex)\8206=`200;\FA06\2307y`20\2308y)\A006\2306\2405*xpo Vs`20=`20minx; X\1205yp\1208y;\2506\4905\C904>`20minx)`20*xsize\2504\1604-`20\7905+`202;\2F05e Vlse\E005\0505\6505\2F07\A906\3107\5D0By`20>\7005)`20*ys\2B06y`20\2605y`20+`201 V;\5713\2909\DA06\2E07\2A04`7D X\2C06\0703`7B X\E40C0;\E10D\0F08\9D0E\2408\5E0D\5706\0503DEBUG_LEVEL1`20fprintf(stderr,"`20 V\9905LC:`20xypos=<%ld`20%ld>`20xysize\110A`5Cn", X`09`09`20*xpos,*ypos,*xsize,*ysize); X X`7D X X $ call unpack XANIM_FLI.C;1 - 356109676 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_fli.h X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X Xtypedef`20struct X`7B X`20`20LONG`20size;`20`20`20`20`20`20/*`20`200`20size`204`20`20*/ X\2307magic;\23094`20\23052`20\230Bframes\2405\23046`20\2312width;\46098`20 V\2312height\460810\6914lags\460912\2313res1\D20A14\2313speed;\2309\AF14next V\460B\AF074`20\F50Dit\230A22\230E\1906\0808\2205\6807102`20future`20enhancemen Vt\3604`7D`20Fli_Header; X Xtypedef`20struct X`7B X\BF08ize\790A`200\7908\0705of`20chunk\A90Bmagic;\3009\29072`20\220Achunks; V\2211number\5409s`20in`20frame`20\E414\3C0C8`20\E306\D609Frame\DC18`20FLI_FRAM VE_STRUCT X\ED04UL\9C04time; X`20`20XA_ACTION`20*act\1204\3C17`20*next; X\7803\1A08; X X#define`20CHUNK_4`20\B5094 X\1B08FLI_LC7`20\1B097 X\1B0CCOLOR`20\1A0611\360F\350A12\1B0DBLACK`20\1B073 X\1B0DRUN`20\1B085 X\6C0EPY\1B096 X\1B0CMINI`0918 X\150EAX\A006S`20`20256 X Xextern`20void`20Decode_Fli_BRUN(); X\1F17LC\1D10Fli_Buffer_Action\2114Read_File(\1D0ALONG`20Is_FLI_\1B08 X/*`20Words(32`20bits)`20and`20HalfWords(16\1708re`20stored`20little`20endian X`20*`20according`20to`20the`20FLI`20spec. X`20*/ X#define`20GETWORD`20`20`20\0303Fli_Get_Word\220CHALF\2606\2208\8D08 X $ call unpack XANIM_FLI.H;1 - 1062493147 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_gif.c X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20"xanim_gif.h" X Xvoid`20GIF_Read_Anim(); XGIF_FRAME`20*G\1C08File\1C13Add_Frame(); X XLONG`20Is_GIF_F\3107\6309Decompress(\170CGet_Next_Entry\1B0DAdd_To_Tab\4B0FSen Vd_Data(\160CInit\2D13Clear_\1809UL\A504\7A08Code\5B0Ecreen_Header\5F0Emage V\1914Read_Extension(); X XXA_ACTION`20*ACT_Get_Acti\1E06XA_CHDR`20`20\1D0ACMAP\5409ACT_Setup_PIXM\1915IM VAGE(\1812CLIP\1713Mapped\190DAdd_CHDR_To_\9B0A\1F05UTIL_Create_Clip(); XLONG\1906Get_LSB_Short(); X X X#define`20MAXVAL`20`204100`20\DF03\0404\0404/*`20maxval`20of`20lzw`20coding V`20size`20*/ X\400EP`204200\570BGIF_CMAP_SIZE`20256 Xstatic\1905Screen_Hdr`20gifscrn; X\1F0BImage_\1E07image\1F09ColorReg\1A04_cmap`5B\690D`5D;\2908XA_CHDR`20*gif_ch Vdr_now;\660CTable`20table`5BM\C506`5D; X\2208ULONG`20root_code_size,c\0A09CLEAR,EOI,INCSIZE\5B09\3906nextab\150Fgif_ma Vsk`5B16`5D`20=`20`7B1,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,0,0`7D; V\5412ptwo\540A2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,\540EBYTE\5405buf Vf`5BMAXVALP`5D;\7412block_size\1D09\1C0Aits,num_bits\1F09gif_lace_flag; X X\3610max_imagec,g\0F0Cx,\0F0Dy,\0F0Dd;\9C12\370B\330B\5C0B\3A19screen\3B06 V\0C06y;\AA0Epic_i,pic_\FC06 X/*`20GIF89a`20variables`20*/ X\DE10anim_type;`20`20/*`20from\3806`20f9`20extension`20\3A19im\3A37mask\3A21 V\3B08GIF_FRAME`20*gif_frame_start,*\110Acur;\3208UL\6E08\1C07nt; X XG\480AGIF_Add_Frame(time,act) X\3906time; XXA_ACTION`20*act; X`7B X`20`20\8B0Cframe; X X`20`20\0B06`20=`20(\200B)`20malloc(sizeof(\1B09)); X`20`20if`20(\3808=`200)`20TheEnd1("\9C0D:`20\4606`20err")\6E0B->time\7403 V\AD06\170Aact\1603act; X\150Anext\16030; X`20\7C08if_frame_start\8507\1611\4207\4C04else\210Bcur-\5808\2509\7304\220C V\410D\1A0Bnt++\1304return(gframe); X`7D X Xvoid XGIF_Free_Frame_List\2507s)\1D06RAME`20*\1407; X`7B X`20`20\180Ctmp;\1303while(\2607`20!\E404\1603\2D04\8F03tmp\A009s; X\1405\2A07\1709\E306\1D06free(gtmp); X`20`20`7D X\AD0CRead_Anim(fname,anim_hdr) Xchar`20*fname; XXA_ANIM_HDR`20*a\2407\BE12list,*\C508ULONG`20frame_cnt,i; X\1603glist\A903\7E09File(\7E0E,`26\3609); X\3503\1908->\1906ls\4304(XA_\7B07)malloc(sizeof\1909)`20*`20(f\4C08+1))\9904if V`20(\5215=`20NULL) X`20`20`20`20\0303TheEnd1("G\AC08Anim:`20\6C06`20err")\D406tmp\9003glist\6105 V\0D030;\0903while(\1F05!=`200\5A04`7B X\5B04\8304i`20>=`20f\E909\1805\1E06`20`20fprintf(stderr,"\820Fframe`20inconsis Vtency`20%ld\0404`5Cn", X`09`09i,f\5A09\8A04\5504break;\0D05`7D X\0604anim_hdr->\2D06lst`5Bi`5D.time`20=`20gtmp->time\3406\2E17act`20\2D08act V\2C06\F305\1608next\1706i++;\0903\7E04\7C1E0;\231A\7104\2312loop_frame\1C08if V`20(i`20>`200)\270Cast_\2708i`20-`201;\2B03else\0E03\3905\0F03GIF_Free_Frame_L Vist(glist); X`7D X X/* X`20* X`20*/ XGIF_FRAME`20*GIF_Read_File(fname,a\7707,frame_cnt) Xchar`20*fname; XXA_ANIM_HDR`20*a\2E07; XULONG`20*f\3608; X`7B X`20`20FILE`20*fp;\0C03\2105i,exit_flag;\1403XA_ACTION`20*act\C905gif_\4609 V\DF06\150Cstar\1704\270Bur\270Cimagex\2207max_\1109\230Ey`20\230F\1104\230Ec V`20\230F\1104\230Ed`20\230F\1104\2309screen\7C0D\1306\6C07\1403if`20(`20(fp=fo Vpen(fname,"r"))==0)\2103`7B`20\0503`20`20fprintf(stderr,"Can't`20open`20%s`20f Vor`20reading.`5Cn",fname);\3B06TheEnd()\8304`7D X\8807anim_type`20\9D0B\1506im\1504XA_GET_TIME(MS_PER_60HZ)\2C0Dmask\CB09GIF_Sc Vreen_Header(fp,anim_hdr)\2305/***\A905`20until`20`20,`20`20separator`20*/ V\2303do\F504\B905i=fgetc(fp\7605\1103f`20(`20(i<0)`20`26`26`20feof(fp)) X\1C04\3306`20`20fclose\340A`20`20TheEnd1("GIF_Read\9F07:`20Unexpected`20EOF V`5Cn")\3406`7D X\6E08i`20==`20'!')`20\3D09Extension(fp);\D404\1C04`20e\1708\C706`7D`20while(i V`20!=`20','); X\1603exit_flag`20=`200;\1103\2506!e\1808\CC04\CA06UBYTE`20*pic_ptr\2C04\1705 V\6E03Read`20Image`20Header\E806\7705`20`20GIF_Image\E607(fp,anim_hdr)\8505 V\4504**`20Setup`20ACTION`20for`20IMAGE`20or`20CLIP\4F08act`20=`20ACT_Get_Actio Vn(\5010pic_size\2A03gif_imagex`20*`20\0D09y;\290Aptr\2803(U\E006)`20malloc( V`20XA_PIC_SIZE(\5108)`20); X\3904if`20(\3D07==0)`20TheEnd1("GIF_Read_File:`20could\5307`20of`20image`5Cn") V\810Bi=0;\0D05GIF_Decompress(fp,\6307\2E08\7604gif_anim_type`20==`200x01) X\1F04`7B X\0604`20`20\CB07clip_ptr\5D06\1703LONG`20t_x,pix_size,xclip,mask_pixel\6807 V`20`20/*`20make`20room`20for`20pad`20on`20non`20byte`20sizes`20*/\3007t_x`20= V`20xclip\0803X11_Get_Bitmap_Width(gif_imagex)\9208\3604/=`208;`20\7104how`20ma Vny\6105\5C05\2707\C908\5A03(U\DC06)`20malloc(`20\5709y`20*`20\5104\5E09if`20( V\3B08==0)`20TheEnd1("GIF_Read_File:`20could\5107`20of`20image`5Cn"); X\4B07pix_size\82031;\1407mask_pixel\1603gif_anim_mask\2208UTIL_Create_Clip V\8E09,pic_ptr,\440A, X`09`09\CB09x,\D60A,pi\7C06,xclip,X11_LSB\9C0AACT_Setup_Mapped(act,`20\6208 V\9A05chdr_now\6504\6604image.left,\0E09top,\8116\3507_screenx,gif_\0C06y, V\D209\2504TRUE,FALSE\0606); X\A30AAdd_CHDR_To_Action(act,\9F0C\3009GIF_Add_Frame(gif_anim_time,act\2807`7D X\0604else\0905`7B X\3D06\6E05Setup_Mapped(act,`20 X\A103pic_ptr,`20g\760B\E008image.left,gif\0E06top,gif_image\FA06imagey,\3507_s Vcreenx,gif_\0C06y,0,TRUE,FALSE\0606\DA09ACT_Add_CHDR_To_Action(act,\940C\3009G VIF_Add_Frame(gif_anim_time,act\2807`7D X\0705/***`20read`20until`20","`20";"`20or`20feof`20*/`20 X\2804do\0705`7B X\6406i=fgetc(fp\7709if`20(`20(i<0)`20`7C`7C`20(i`20==`20';'))`20exit_flag`20= V`201;\2F07else\3405\2906!')`20GIF_Read_Extension(fp);\A504`20ex\1307`20*/ V\C006`20while\7304`20!=`20',')`20`26`26`20(!e\6E08)`20); X\2C03`7D`20\E505end`20of`20while`20images`20\4C05fclose\CB06\0F03anim_hdr-> V\2505x`20=`20gif_max_\1106\C204\250Fy`20\250Fy;\2512c`20\250Fc;\2512d`20\250Fd V;\2503*frame_cnt\1F07\1009\1E04return(g\1809start); X`7D X Xvoid`20GIF_Decompress(fp,pic) XFILE`20*fp; Xchar`20*pic; X`7B +-+-+-+-+-+-+-+- END OF PART 4 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 11 Archive-name: xanim/part05 -+-+-+-+-+-+-+-+ START OF PART 5 -+-+-+-+-+-+-+-+ X\5104gister`20ULONG`20code,old; X\1C03gif_bits\89030;\1003num_bits=0\0E04gif_block_size=\1405`20`20`20/*`20 V\9405ing`20code`20size`20of`20LZW`20*/\7304oot_code\3906(fgetc(fp)`20`26`200xf Vf);`20 X`20`20DEBUG_LEVEL3`20fprintf(stderr,"`20\4505\600B=`20%ld`5Cn",r\5D0D);\4A03GI VF_Clear_Table();`20\A604clear`20decod\AC04symbol`20table\A804\3903code=GIF_Get V_Code(fp); X\1A03if`20(code==CLEAR)`20\1403`7B X\FF04\6D13\1805\4C17`20`20`7D X\8E05write`20code(or`20what`20it`20currently`20stands`20for)`20to`20fi\A606 V\7106Send_Data(code,pic\E404\7904old=code\6A04\8319do\BF09\D904table`5Bcode V`5D.valid`20==`201)`20\1F03/*`20if`20known`20code\8306\3D08\2106send`20it's V`20associated`20string\BA0E\3004\BE18\1F0BGet_Next_Entry(fp);\6D0Aget`20next V`20table`20entry`20(nextab)`20\670DAdd_To_Table(old,code,\2B07\5303/*`20add V`20old+c\DB04to`20\5506\4609old=code\9E06`7D X\0604else\8E09\3805doesn't`20exist`20\3D07`7B X\891B\8D08\D905\870Bold\8613GIF_Send_Data(code,pic)\9506\A516code=GIF_Get_Code V(fp)\2106if`20(code==CLEAR) X\AE05`20 X\6C0AClear_\AE06\6609\521B\A22F\4C1D\BF04`7D`20while(code!=EOI); X`7D X Xvoid`20\3608Next_Entry(fp) XFILE`20*fp; X`7B\4705/*`20table`20walk`20to`20empty`20spot`20*/\2303\6206`20(table`5Bnextab V`5D.valid==1)`20`26`26`20(\1606= V\5508\AC03\1A03`7B`20\B605fprintf(stderr,"Error:`20GetNext\7F07=%ld`5Cn", V\0E06);\3A06close(fp\1007TheEnd()\0E04`7D X\7B0C`20==`20INCSIZE)\2903/*`20go`20to`20next`20table`20size`20(and`20LZW`20co Vd\1307)`20\C705`7B X\6204DEBUG_LEVEL4\B911\B208\6907`20was`20%ld`20"\B60Ecode_size++;`20\2C07=( V\0907*2)+1;\2805\BE04\2C09>=12)`20\0F09=12\2506\911D<%ld>",I\F907\3204`7D X`7D X X X/*`20`20body`20is`20associated`20string X`20*`20`20next\1E04code`20to`20add`20to`20that\2707\0F04form\4112\1704\4505ind Vex X`20*/`20\AB04 Xvoid`20GIF_Add_To_Table(body,next,index) Xregister`20ULONG\A805\200B; X`7B X\5A03f`20(index>MAXVAL)\1403`7B`20\0503`20`20fprintf(stderr,"Error\8B06=%ld V`5Cn",\6906; X`20`20`7D X`20`20else\3F04\3E05table`5Bindex`5D.valid=1;\1A12data=t\1205next`5D.first; V\2912first\2A07body\2A1Alast=body\9806`7D X Xvoid`20GIF_Send_Data\F406,pic) Xregister`20LONG`20index; Xchar`20*pic; X\D004\240F,j\5C04i=0;\0703do\8304\0404`20/*`20table`20walk`20to`20retrieve`20s Vtring`20associated`20with\6E06`20*/ X`20`20`7B`20\CB05gif_buff`5Bi`5D`20=`20\D90Ddata;`20\2605i++;\0906\4105\290Fla Vst\1F07f`20(i>MAXVAL)\1205\6707`20`20fprintf(stderr,"Error:`20Send\AA04i=%ld V`20index=%ld`5Cn",i,index);\4207TheEnd()\1006`7D X\0403`20while(i\9605>=`200); X\1803/*`20now`20invert`20that`20string`20since`20we`20retreived`20it`20backwar Vds`20*/\3F03i--;\0703for(j=i;j>=0;j--)`20\1503`7B X\E808pic_i`20<`20pic_size)`20pic`5Bpic_i++`5D`20=`20gif_buff`5Bj`5D;\3605else V`20fprintf(stderr,"GIF_Send:`20data`20beyond`20image`20size`20-`20ignored`5Cn" V)\4906\7F04gif_lace_flag)\1705\9C06\1F06\9F07%`20gif_imagex)`20==`200`20\2C06 V\2E03\CF04\0B06switch\5314\570C\0404case`201:\F505i`20+=\5F0B`20*`207;`20break V;`20/*`20fill`20every`208th`20row`20*/ X\4B0F2:\4B493:\4B173;\4B164t\4B184:\4B15\1F03\4B17other`20\4D0F`7D X\0808\0806if`20(\5706>=\6005size) X\1D06`7B X\3708gif_lace_flag++;\1909switch(g\200C\3F08\410C\C5072:\C507\C40D<<`202\C509 V\C604start`20at`204th\C210\4A073:\4A171;\4A152nd`20\4A164:\4A13\3E03\2104 V\4A141st`20\4A11default:\4305lace_flag`20=`200;\5E090;`20\5006\3809`7D X\0808\0605`20/***`20end`20of`20if`20\4C0E\7005\240Ecode`20expansion\2204`7D X X X/*`20 X`20*`20initialize`20string`20table\1C04/ Xvoid`20GIF_Init_Table()\9607 X`7B\6903register`20LONG`20maxi,i; X\1903DEBUG_LEVEL3`20fprintf(stderr,"`20`20Initing`20Table...");\3503maxi=gif_p Vtwo`5Broot_code_size`5D;\2103for(i=0;`20i=`200`20)`20g\450E(ULONG)(tmp\3209else`20TheEnd1("EOF`20in`20data`20stre Vam`5Cn")\2C08DEBUG_LEVEL3`20fprintf(stderr,"New`20Bl\C604size=%ld`5Cn",g\820D V\4A07`7D X\0705\C410\1303\2F0E--\3006\D60C) X\1204`7B X\9206gif_bits`20`7C=`20(`20(\E10C`20`26`20(\0F070xff))`20<<`20num_\3005\D416 V\1407\DC11tmp=%lx`20bits\0905\4808\E708tmp\EB06its,n\1D07); X\5107\1208+=8;\1305`7D X\0604else`20TheEnd1("EOF`20in`20data`20stream`5Cn"\A805`7D X\0503code`20=\F20A`26`20gif_mask`5Bcode_size`5D\2E04\2209>>=`20\1B09;`20\DE04 V\8908`20-\1B0C\1903DEBUG_LEVEL3\FF11code\F705\EB04code\DA06if`20(code>MAXVAL) V\1303`7B X\D804\4010`5CnError!\DF04\DA06\4E10\3614CLEAR=\2904INCSIZE=\0C04EOI=\0804 V\BE09\4B09\4505\0404\0808\1010\0B0BCLEAR,I\5806,EOI,code_size\8E07code=EOI V\0E04`7D X\EE0B==\3707\F00ADEBUG_LEVEL3\C711\4B07\3507(%ld)`5Cn",\4508\6E06\5D08_size<12 V)\1605\5E06\4106_size++;`20\3907=(\0907*2)+1;\2A05`7D X\0604else\9320<13?>`5Cn"\7F07\2E1Fnew`20size`20=`20%ld\BE04\9209\4105\7804retu Vrn(code); X`7D X X X/*`20 X`20*`20read`20GIF`20header\1404/ Xvoid\1504_Screen_Header(fp,anim_hdr) XFILE`20*fp; XXA_ANIM_HDR`20*a\2107; X`7B X`20LONG`20temp,i; X X`20for(i=0;i<6;i++)`20fgetc(fp);`09/\8B07and`20toss\7F0487a`20or\0A059?\9804 X`20gif_screenx`20=`20gif_imagex\0D06scrn.width`20\1103UTIL_Get_LSB_Short(fp); V\450Cy`20\450B\0D07scrn.height\451B X`20temp=f\C209\5705scrn.m`20`20`20\0303\3D03\2405`20`26`200x80;\210Acres`20 V\2105(t\210870)`20>>`204\270Bpixbits`20\480C07\210Bbc\4404\830C\9414\DD06d`20 V\DD0A\5908+`201;\230Bc`20\2305_ptwo`5B\390A`5D; X X`20if`20(\1309x`20>`20gif_max_\1106)`20\100E\4A07\0D06; X`20\3F0Dy`20\3F0Fy)\100F\3F0Cy;\3F0Fc`20\3F0Fc)\100F\3F0Cc;\3F0Fd`20\3F0Fd) V\100F\3F0Cd;\FD07xa_verbose`20==`20TRUE) X`20`20fprintf(stderr,"`20`20Screen:`20%ldx%ldx%ld`20m=%ld`20cres=\0904bkgnd= V\0A04pix=%ld`5Cn",\4D03`20`20gifscrn.width,g\0E07height,gif\D307\1A09m,\0A08cr Ves\440Ebc\1D09pixbits);\CC07\2603(g\4E09`20>`20x11_cmap_size)`20`26`26`20(x V\1308flag\F30C\3D03\2008display_type`20`26`20XA_X11_CMAP)`20) X`20`7B X`20`20fprintf(stderr,"ERROR:`20Image`20has`20%ld`20colors,`20d\5006`20can V\1C03ndle\1F04`5Cn", X`09`09`09`09`09\B40A,x\B20D; X`20`20TheEnd(); X`20`7D X\1003\E904gifscrn.m\B904\8F04\BD03for(i=0;`20i`20<`20g\5209;`20i++\E007\2A07 V`20`20gif_cmap`5Bi`5D.red`20`20`20=`20fgetc(fp\7505\2611green`20\2620blue V\4C14\B905\2C08hdr_now`20=`20ACT_Get_CMAP(gif_cmap,g\BC09,0\0D0D,8,8,8\5405 V`7D X`7D`20/*`20end`20of`20function`20*/ X X/* X`20* X`20*/ Xvoid`20GIF_Image_Header(fp,anim_hdr) XFILE`20*fp; XXA_ANIM_HDR`20*a\2107; X`7B X`20LONG`20temp,i; X X`20gifimage.left`20\EE04UTIL_Get_LSB_Short(\FB06\2B09top`20\2B27width`20\2B25h Veight\2B1Ctemp=fgetc\3C10m`20\9104\9405temp`20`26`200x80;\220Bi`20\221240; X`20if`20(\260A)`20gif_lace_flag\2E031; X`20else\1911\5F0Dpixbits`20\5F0C07\2206_imaged`20=`20\2F11+`20\5F04\2409x`20 V\240Bwidth;\1E0By`20\1E0Bheight\1F0Cc`20\1F05_ptwo`5B\770A`5D; X X\E508\6608>`20gif_max_\1106\F606\100A\4A07\0D06; X`20\3F0Dy`20\3F0Fy)\100F\3F0Cy;\3F0Fc`20\3F0Fc)\100F\3F0Cc;\3F0Fd`20\3F0Fd) V\100F\3F0Cd; X X`20DEBUG_LEVEL1 X`20`7B X`20`20fprintf(stderr,"`20`20Image:`20%ldx%ldx%ld`20m=%ld`20i=\0604pix=\0804res Vvd=%lx", X`20`20`20`20\6909x,\F20A\0B0Ac,gifimage.m\0B0Ai,\0B09pixbits\4D09\1606reserved V`20);\AD13Pos:\A908`20`5Cn"\4E0Aleft\0E0Atop); X`20`7D X`20 X\5D03/*`20Read`20in`20Image`20CMAP`20if\0E07has`20one`20*/\2D03if`20(g\B909) X`20`20`7B X\A104for(i=0;`20i`20<\FB0Ac;`20i++\2604\2808\CB05_cmap`5Bi`5D.red`20`20`20= V`20fgetc(fp\D505\2510green`20\251Fblue\4A13\E203\2908hdr_now`20=`20ACT_Get_CMA VP(gif_cmap,g\B509,0\0D0D,8,8,8\5105`7D X`7D X X/* X`20* X`20*/ XLONG`20Is_GIF_File(filename) Xchar`20*\1008; X\FE03FILE`20*fp; X`20UL\3A04firstword; X X`20if`20(`20(fp=fopen\4A09,"r"))`20==`200) X`20`7B`20\8503fprintf(stderr,"can't`20open`20%s`5Cn",f\8608;`20\2F03TheEnd(); X`20`7D X`20/*`20by`20reading`20bytes`20we`20can`20ignore`20big/little`20endian`20probl Vems\F304\B50A`20`20=`20(ULONG)(fgetc(fp)`20`26`200xff)`20<<`2024;\2F0C`7C= V\2F1E16\2F2D`208\2F29; X X`20fclose(fp)\0E04if`20(\3C0A==`200x47494638)`20return((LONG)TRUE); X\150EFALSE); X`7D X Xvoid XGIF_Read_Extension(fp) XFILE`20*fp; X`7B X`20`20LONG`20block_size,code,tmp,i\9204`20code`20=`20f\BD08; X`20`20DEBUG_LEVEL2`20fprintf(stderr,"`20`20GIF`20E\7208:`20Co\4205%lx`5Cn" V\5F05\4505\EC04`20(\5F06\E904fe)`20`26`26`20(xa_verbose==TRUE)`20) X`09\6516COMMENT`20EXTENSION`20BLOCK`5Cn"\6205\D50A\C10E\7D149)\7D05\330C=`204) V) X`20`20`7B X`20`20`20`20gif_anim_typ\500F\1F04i`20=`20UTIL_Get_LSB_Short(fp);\6D05i`20< V`200)\27051;\510Fim\5104XA_GET_TIME(i`20*`2010\5B07\2909mask\7A12\E618`20`20 V`7D X\0503while(\250B>`200)\D609for(i=0;`20i V\2506\D807\170Aact\1603act; X\150Anext\16030;\6208iff_act_start\A707\140F\3D07\4704else\1F09cur-\5108\2308 V\5605\1F09\3C0D\1809\C008return(iframe); X`7D X Xvoid XIFF_Free_Stuff() X`7B\2D03IFF_ACT_LST`20*itmp;\C20Dnsq)`20free\0F0A;`20\210Bdlta_acts)\260A V\140A\2B0Dham_map)\290A\1208\7305whil\6607ct_start`20!=`200) X`20`20\A904\4903tmp\FA05\230B\F004\6304\360C\230F->next\2906\7B06tmp); X`20`20`7D X\3B07nsq\36030;\1007\C109\150C\600C0; X`7D X X X/* X`20* X`20*/ Xvoid`20IFF_Read_File(fname,anim_hdr) XBYTE`20*fname; XXA_ANIM_HDR`20*a\2407; X\E804FILE`20*fin\7904LONG`20camg_flag,cmap_\0A06hdr\0A06re\DC05\2A06rn\2A07for Vmtype\1B09ansq_flag\1209bmhd\2D07ile_size,file_read\2604Bit_Map_Header\3005 V\1704Chunk_\1507`20chunk\5409prop\660Eexit_\1207\1403iff_allow_cycling`20=`20( Vanim_hdr->anim_flags`20`26`20ANIM_CYCLE)?(TRUE):(FALSE)\5E04iff_act_start`09= V`200\150Ccur`09\1310nt\130Cdlta_compression\88030xffff\3409\8B0A=`20\A217`7E(A VNIM_LACE`20`7C`20ANIM_HAM`20\0B07CYCLE); X`20`20file_size`09=`200;\1108read\1108iff_imagex`20=\0D05max_\1109\230Ey`20 V\230F\1104\230Ec`20\230F\1104\230Ed`20\230F\1104\2305prop_flag`09\1107bmhd V\110Dcrng\110Eam\110Fma\4409FALSE;\1504hdr_\1510ansq\3B0Diff_ansq\1010_cnt V\140Cdlta_acts`09\1510\290Fchdr\100C332_\1410gray\1511cmap_bits`20=`204\1509ur V_hmap`20`20\2A05\1605`20(`20(fin=fopen(fname,"r"))`20==`200) X`20`20`7B`20\0503`20`20fprintf(stderr,"can't`20open`20%s`5Cn",fname);\2E06TheE Vnd()\7B04`7D X\0503exit_flag`20\7C04\2504while(`20!feof(fin)`20`26`26`20!\2809\7B05\4C05/* V`20read`20Chunk_Header\6606*/\0705chunk.id`20\D904UTIL_Get_MSB_Long(fin)\8804 V\2908size\291B\2A05if`20(`20f\9A09)`20break;\1B04\2009\4E0C=`20-1)`20ret`20 V\0A04\6E06else\13070;\5706DEBUG_LEVEL1\1105\E206`20`20fprintf(stderr,"Chunk.ID V\3C03")\4F06`20`20IFF_Print_ID(\2A07\FC08\2509\4A10\F607size=%lx`5Cn",\B90A V\3607`7D X\D413`26`201)`20\100A+=1;`20/*`20halfword`20pad`20it`20*/\3D09ret==0)\D90Dswit Vch\5807id)\1707\1F08\9E03ase`20PROP:`20\1409\0808prop_flag=1;\310ELIST\310B V\1405FORM\4513formtype`20=`20UTIL_Get_MSB_Long(fin); X`09`09file_\F705=`20\F40A\1A09read`20=`20-1\870A\0808DEBUG_LEVEL2\1D11\E70A V\900Bprintf(stderr,"`20`20IFF`20"); X\2C12IFF_Print_ID(\3107\9F06id\3115\5D11=`20\5A2Aformtype\5A25`5Cn\5914`7D X\1210break;\1709case`20BMHD: X`09`09IFF_Read_BMHD(fin,`26bmhd\5813if`20(xa_verbose) X\2010`7B X\B121\1505Size`20%ldx%ldx%ld`20comp=\0904masking=%ld`5Cn", X\5011\D810mhd.width,bmhd.height\0C06depth,\4326compression,bmhd.\8907);\4011 V`7D X\1210iff_imagex`20=\920B\3B12\2909y`20\2907\B006\2A1Bd`20\2A07depth; X`09`09if`20(\1F0C=`208)\3005cmap_bits`20=`208\2A04else\1A114;\6D13\520Bx`20> V`20iff_max_\1106\5E06\100A\4503\2E0A\4E1Fy`20\4E0Fy)\100F\4E0Cy;\4E1Ed`20 V\4E0Fd)\100F\4E0Cd; X`09`09/*`20or_mask`20is`20used`20to`20move`20pixels\0F04upper`20reaches`20of V`20cmap X`09`09`20*/ X`09`09iff_\4408=`20CMAP_Get_Or_Mask(1`20<<`20\750A);\C411bmhd_flag=1;\1D12reak V; X X\1008case`20CAMG:\2B11`7B X\1210`20`20DEBUG_LEVEL2`20fprintf(stderr,"IFF\4B05`5Cn")\7A12`20`20if`20(chunk V.size`20!=`204)`20 X\2812\7914`20`20ret`20=`20IFF_Read_Garb(fin,c\5209\7515\F309\1912`7D X\1513camg_flag`20=`20UTIL_Get_MSB_Long(fin)`20`7C`20IFF_CAMG_NOP; X\EB17(c\4B09`26`20\3209EHB)`20`26`26`20(cmap_\6906=`20TRUE))`20`20\4B13`7B X\D514IFF_Adjust_For_EHB(iff_cmap,i\0907_bits); X`09`09\9306f_chdr`20=`20\1203`09ACT_Get_CMAP\3B0Eimagec,iff_or_mask, X\3103`09i\1C1C\730C\810E\8F17chdr\FF07\FE05; X\E714break;\1B13`7D X\1412if`20(camg\5706`26`20IFF_CAMG_LACE)`20iff_anim_flags`20`7C=`20ANIM_LACE; X\4F17\5016HAM)`20`26`26`20(cmap_\C506\C606))`20 X\4A12`7B X\DC14XA_ACTION`20*act\8315\0606/*`20CREATE`20ACT_IFF_HMAP`20chunk`20*/ X\3414\BD04iff_cmap_bits\A2048)\2C15\9F16`20`20act`20=\7405Get_Action(anim_hdr, V\8C0C8); X\4416iff_anim_flags`20`7C=`20ANIM_HAM8\3316`7D X\1614else\BC576)\BC326;\BC2BIFF_Setup_HMAP(act,iff_hmap,iff_cm\0909ap_bits) V\5F16iff_cur_hmap\DD03(ColorReg`20*)act->data; X\3B1Ahdr\37030;`20/*flag*/\2B17`20(cmap_true_to_332`20==`20TRUE)\3215`7B X\1614`20`20CMAP_Create_332(i\ED08`26iff_imagec, X\3C16\0A0A\2D05r_shift,\0E06g_\0E0Cb_\0E06\4A28mask\4909\0D0Bb_mask);\4817if V`20(iff_332_chdr)`20iff_chdr`20=\0B05\1908\4116`7D X\1614else\5A05cmap_true_to_gray`20==`20TRUE)\3815`7B X\A516CMAP_Create_Gray(iff_cmap,`26iff_imagec, X\3D16\0A0A\2D05gray_bits,\100Bshift)\E316`20`20\CA04\2B09chdr)`20iff_chdr`20= V\0B05\1A09\4316`7D X\5716f_or_mask`20=`20CMAP_Get_Or_Mask(iff_\DA06\9917\9704!i\8907) X\2314`7B X\D218\BF09ACT_Get_CMAP(iff_cmap,i\7D09, X\4316\C815\380C\170C16,16,16\CA17\CC05`20(cmap_true_to_332`20==`20TRUE\DC16 V\8310332\D408\DF08\6E18else\7304\720Egray\732Egray\7426`7D X\1614chdr_flag`20\7606\3C14\3A12\1212break; X X\5809ase`20CMAP: X\2B10`7B X`09`09`20`20ULONG`20tmp;\7213DEBUG_LEVEL2`20fprintf(stderr,"IFF\5A05`5Cn") V\720B\3E0Aif`20(chunk.size`20==`200x40)`20\7805\7E06\2504f_imagec\FA03\2E0B/ V`202;`20/*`20xR+GB`20*/\2F07IFF_Read_CMAP_1(iff_cmap,i\4809,fin); X\3004`7D X\9612else\82273;`20`20/*`20Rx+Gx+Bx`201`20byte`20each\92180(\9220\9313/*`20Typ Vically`20\3709d`20matches`20\A20Bbut`20not`20always`20 X\4D12`20*`20HAM`20and`20EHB`20are`20frequent`20examples\BB06*/ X\3E12if`20(bmhd_flag)\2905`7B X\EA06tmp`20=`200x01`20<<`20\A80A\DA06\3B06\2404\1C0Bc)\BD0C=`20tmp\2E06`7D X\7C17camg_flag`20`26`20IFF_CAMG_HAM)`20\3113`7B X\1412`20`20XA_ACTION`20*act; X\2414\6B04iff_cmap_bits`20==`208\F006\5818`20`20act\C503ACT_Get_Action(anim_hd Vr,ACT_IFF_HMAP8)\E806\6C06f_anim_flags`20`7C=`20ANIM_HAM8;\2507`7D X\6F14else\92496); X\4416\A01A6;\A01DIFF_Setup_HMAP(act,iff_hmap,iff_cm\0909ap_bits)\8416iff_cur V\3A05\CF03(ColorReg`20*)act->data; X\8C07iff_chdr\29030;`20/*flag*/\1D09`20(cmap_true_to_332`20==`20TRUE)\2407`7B X\0806`20`20CMAP_Create_332(i\B508`26iff_imagec, X`09`09`09`09\1105r_shift,`20`26iff_g_\0E0Cb_\0E06\2E0Cmask\2D09\0D0Bb_mask); V\8809\B604iff_332_chdr)`20\E50B\190C\3308`7D X\0806else\F412gray\F526Gray\F620gray_bits,\CB07ray_shift\C213gray_\C315\1A09 V\C410iff_or_mask`20=`20CMAP_Get_Or_Mask(iff_\9406\6F09\6D04!i\5F07\E10A\8A06 V\0606\0A0A\870BACT_Get_CMAP\F60A\F510\900B\1C0C\170C16,16,16\9209\9405`20(cmap V_true_to_332`20==`20TRUE)`20\5A09332\8F08\9A08\450Aelse\DE05\490Dgray\4A13gray V\4B18`7D X\0806chdr_flag`20\3F06; X\6906\0606\0606\2C06\7B0Aamg_\3305`26`20IFF_CAMG_EHB) X\2704`7B X\4112`20`20IFF_Adjust_For_EHB(iff_cmap,i\0907_bits)\8114`20`20\BF08`20=\1F15 V`20`20ACT_Get_CMAP\5B0Eimagec,iff_or_mask, X`09`09`09`09\1C1C\930D\A10E\AF11\F504`20`20chdr_flag`20=`20TRUE\1806`7D X\0604else`20if`20(camg_flag)`20/*`20NOT`20HAM6,HAM8`20or`20EHB`20*/ X\3304`7B X\5706\3604\710D`20==`204)`20 X\A503IFF_Shif\F51A); X\4504\0404\0808\5506f_chdr\AB03ACT_Ge\421A,iff_or_mask,\7504`09i\1C1C\AA0C V\1F05\0E0E\0E09); X\E006chdr_flag`20=`20TRUE\1806`7D X\B512cmap_\2A0D\2210\3612break; X X\4409ase`20BODY: X`09`09`7B X\6B04XA_ACTION`20*act; X X\1504DEBUG_LEVEL2`20fprintf(stderr,"IFF\4405`5Cn")\AF06if`20(\C90B=`20FALSE) V\1C05\6606\2407\C308==TRUE\2106\2303\0403\0B07\2806iff_cmap_bits\50044)\2104 V`09`09IFF_Shift_CMAP(\2808,iff_imagec); X\FF0A\0A0A\5804f_chdr`20=`20ACT_Get\4419,iff_or_mask,\7805\1C1C\AD0D,iff_ V\0E0E\0E09); X\E508chdr_flag`20=`20TRUE\1A0AIFF_Register_CRNGs(anim_hdr\4E06hdr\490Camg_ V\4907IFF_CAMG_NOP;`20/*`20so`20future`20CMAPs`20okay`20*/ X\3D06`7D`20`20`20\0B07else\3F05TheEnd1("IFF_Read_BODY:`20no`20cmap`5Cn")\7C06 V`7D X\0705act`20=`20ACT_Get_Action\B00AACT_IFF_BODY\3807ACT_Add_CHDR_To_\3308ct V\DE10act->h_cmap\6303iff_cur_hmap; X\2105IFF_Add_Frame(1,act\3B0Cdata\3903(UBYTE`20*)`20malloc(`20iff_imagex`20* V\0D0Ay`20\3D07if`20(\410B=`200)\6B05TheEnd1("IFF_Read_BODY:`20\5706`20err") V\9A0B\2209(fin,act\5106,chunk.size,\6F07\8E08,`20\8D0A\0C0Bd,\2805(int)(bmhd.c Vompression),\180Bmasking)\590Aor_mask\DA05`7D X`20`20`20`20\0404\0808break; X X\1008case`20ANHD:\2F03`7B X\4504Anim_Header\2103anhd\4B04`20`20DEBUG_LEVEL2`20fprintf(stderr,"IFF\4705 V`5Cn")\2F06if`20(\F90A`20>=`20\590B_SIZE)\2805\7506`20`20IFF_Read_ANHD(fin, V`26anhd,c\4409\5907\E706dlta_compression`20=\AB05.op;\2605`7D X\0604else`20\6716Garb(fin,\610C\2C06\62190xffffffff\8B08fprintf(stderr,"ANHD V`20chunk\F605mismatch`20%ld`5Cn",\CD11\A704\0404break; X X\5404\0404case`20DLTA: X\1308\0808\CA05XA_ACTION`20*act; X\2510`20DEBUG_LEVEL2`20\A610IFF`20DLTA:`20"\8806act\DF03ACT_Get_Action(anim_hd Vr,ACT_NOP)\2B05ACT_Add_CHDR_To_\2D08ct,iff_chdr\5409->h_cmap\5C03iff_cur_hmap V\AF04\2103IFF_Add_Frame(1,act); X\CA11act->data\4603(UBYTE`20*)`20malloc(chunk.size)\3B13if`20(\3F0B=`200) V\7605TheEnd1("IFF_Read_DLTA:\5507`20err")\4F13ret=fread\550A,c\8109,1,fin); X\3912switch(iff_dlta_compression)\2E12`7B X\1311`20case`205:\1A13\0606DEBUG_LEVEL2`20fprintf(stderr,"type`205`5Cn\D515 V\0707act->\2905=`20ACT_IFF_DLTA5;\3319break;\AD18`20`203:\AF3B3`5C\AF353; V\AF37'J':\AF3BJ`5C\AF35J;\AF37`20108\B03Cl`5C\B035l;\B038`200\AF14\1C071: V\1C1A2:\1C1A4:\1C13default:`20`20\DF29NOP;\2D19fprintf(stderr,"Unimplemented V`20Delta`20%ld`5Cn", X`09`09`09`09\0303iff_dlta_compression);\6219break;\1F12`7D X\1212\3C17\1809case`20ANSQ: X`09`7B X`09`20`20DEBUG_LEVEL2`20\CC10IFF`20ANSQ`5Cn"); X\2E03ansq_flag`20=`201;`20`20/*`20we`20found`20an\1F05`20chunk`20*/ X\3003IFF_Read_ANSQ(fin,chunk.size); X`09`7D X`09b\A214CRNG:`20\CE11\AD21CRNG\AD07`09I\7C08CRNG(anim_hdr,\850E,`26crng_flag) V; X\7010\9C15DPI`20:`20/*`20ignore\EA04\200DIMRT\201CGRAB\201CDPPS\201FV:\201DAN V\201DRNG:\201BVHDR\2005sound`20\2607should`20kill`20next`20body`20until`20bmhd V\4610ANNO\4612\2610CH\AC07\2618\0808ret`20=`20IFF_Read_Garb(fin,chunk.size); V\3511break;\1705default: X`09if`20(`20feof(fin)`20)`20exit_flag`20=`201;\2C03/*`20end`20of`20fil\8E05 V`09else X`09`7B X`09`20`20fprintf(stderr,"unknown\9C04`20type=");`20IFF_Print_ID(\2A07\AB06id); V X\4703\8705`20`20(file_read`20<\6F05_size)`09/*`20there`20should`20be`20mo V\0F03\8E05\DE06`26`26`20(\FF0A\3F03\4C06\0D05-`20\5809\E304/*`20`20s\1804n`202 V`20big`20\4609) X\0803\D805\DA12`20`20Will`20Continue.`5Cn");\2B06ret`20=`20IFF_Read_Garb(fin, V\900A\2A06`7D X\0503else\6722Abort.\640Bexit_flag`20=`201;\4E07\0303break; X`20\1003\D904end`20chunk`20switch`20*/ X\1C03/*\0604`20*`20keep`20track`20of`20number`20of`20bytes`20read.`20This`20al Vlows`20us`20to`20distinguish X\4806valid`20unknown\7206s`20from`20garbage`20tacked\3E04the`20\9804of`20a`20f Vile. X\4505\9A05if`20(!e\DD08) X\1303`7B X\1F04\1A05file_read`20==`20-1)`20\110B`204;`20/*`20assuming`20FORM`20\FC06or V`20similar\6607`20`20else\3E0B+=\2B06.size`20+`208;\4C05dd`20ID`20and`20SIZE V\B204other`20\E107\4D06`7D X\0603`7D`20/*`20\D604if`20ret==0\1E05\1709of`20while`20not`20e\4904r`20\E709 V\2B05DEBUG_LEVEL2`20fprintf(stderr,"Bytes`20R\E906%lx`5Cn",f\BE08); X`20fclose(fin); X X`20/*`20\9503*`20Set`20up`20a`20map\8404delta's`20to`20their`20action`20number Vs.\3504/ X`20`7B X\D803ULONG`20i;\0C0Bnter_dlta_i,d\0706act_i\7304`20`20iff_dlta_acts`20=`20 X`09(IFF_DLTA_TABLE`20*)malloc(`20(i\2D08cnt`20+`201)\AE03sizeof\350F))\8205if V\340B\6106=`200)`20IFF_TheEnd1("IFF_Read_File:`20d\6007s`20\7706`20err")\4F05f Vor(i=0;`20i`20<\B90Acnt;`20i++)`20\2404`7B X\0503\D70F`5Bi`5D.\B204`20`20=`200\4A05\2113frame`20\211Bstart`20\211Bend`20 V\630A`7D X\0503dlta_i`20\1408act\0E0Binter_\230C\1605ff_act_cur`20=`20\0E08start\3606 V\770D\3E06\9D0A\3E0B\2E1B\EC08act_i\2805while(\7C0C!=`200) X\1B03`7B X\EF06\AE0B++\3505\D107\0E09switch\460C->act->type\4C05\4E09`20`20case`20ACT_IF VF_BODY:\1A15DLTA1:\1B192:\1B193:\1B194:\1B195:\1B19J:\1B19l: X`09`09iff_dlta_acts`5Bdlta_i`5D.cnt`20=`20inter\1E06i;\2C19end`20=`20iff_act_c Vur\2B05\3B0B\1E030;\3F07\2307\310E->next\2304\3106++;`20\3005`20(\4207>`20 V\7C09cnt) X`09`09`7B X`20`20`09`09`20`20fprintf(stderr,"IFF_Read:`20dlta`20setup`20err`20`20<%ld V\4903%ld>`20`5Cn",\4503`09`09\7308,i\600C; X\5D06IFF_TheEnd()\9F04`7D X\960D<`20\9612\3704\1609acts`5B\2D06`5D.start`20\F90D\5404\2F18frame`20=`20act V_i;\7D07break;\9E03`20`20\0303default:\9605\5509\630E->next\4004\3C0C`7D X\0504`20/*`20end`20of`20while`20*/ X\1803DEBUG_LEVEL1`20fprintf(stderr,"%ld`20dltas`20found`5Cn",dlta_i); X X\3D03iff_ti\BA05XA_GET_TIME(IFF_SPEED_DEFAULT`20*`20MS_PER_60HZ)\3D08`20(ansq_ Vflag)\1204`7B X\B005LONG`20i\BD07UL\0E05ff_frame_cnt,\0A06i; X\2306\1D0D\8B03iff_dlta_acts`5B0`5D.cnt;`20`20/*`20start`20with`20body`20 V\3004*/\4606for(i=0;`20i`20<\4305ansq_\3B05i++)\3F04count`20frames`20\3808 V\B507\D006\3808`5Bi`5D.time`20!=`200xffff\4105if`20not`20loop\4706\4604`09`20 V\C20F+=\C30F\8F09\5704dnum`20+`201`20`5D.cnt;\7E06`7D X\0705anim_hdr->\4E06lst`20=`20 X`09(XA_FRAME`20*)malloc(sizeof(\1908)`20*`20(iff_\870B`201))\6007\DC04\5D15= V`20NULL)`20 X`09IFF_TheEnd1("IFF`20ANSQ:\E706\2C05\7906`20err")\5704\5A06`20`20/*`20For`20m Vovies`20default`20loop\3D06`20is`200`20*/\E310loop\AF06\E4030; X X\4E08take`20care`20of\4307up`20to`20BODY\4909\9906i`20\3C05\E507f_act_cur`20= V`20iff_dlta_acts`5B0`5D.start\2B07while(\310C!=`200) X\1D05`7B X\DA07\AC0A\6D06lst`5B\7707`5D.act\6607\4307->act\6007\8D04`20(\910D\9213end) V\3008`7B X`09`20\701Dtime\7107time; X`09`20\1C07++\0D04break;\4F08`7D X\0907else\59251;\3308\570A`20`20\CF0A\CB0B\F60Enext\F70D`20(\4207`20>\2A05 V\0E06cnt)`20`26`26`20(i\4B0B!=`200)`20) X\3E07`7B X\0907\8503printf(stderr,"IFF_ansq:\9F06`20err`20%ld\0404`5Cn",\7207,i\700D V\9709`20`20IFF_TheEnd()\1709`7D X\0707\7306or(i=0;`20i`20<`20iff_ansq_cnt;`20i++\A507\A30A\EB04\2608`5Bi`5D.ti V\9703==`200xffff)`20/*`20loop\B007*/\3909\E60B`20anim_hdr->loop\BB06`20=\7E09 V`5B`20\620Cdnum`20`5D.frame\DB0A\BE07\0303else\660B`09`20`20ULONG`20dlta_j; X X\1203\500C\6E08frame_i;`20/*`20for`20looping`20info\B90C`20`20\4A06\A10C\9708+ V`201;\290Biff_ti\5E05XA_GET_TIME(\370C\1F05*`20MS_PER_60HZ); X\A208ct_cur\6907dlta_acts`5B\8006`5D.start;\2E04while(\340C!=`200) X\1B03`7B X\0503`20`20anim_hdr->\E806lst`5B\F207`5D.act\CE08\3F06->act\CA0C\9104`20( V\950D\9618end)`20 X\7505\7C07\7E1Ftime\7F07time\D105\3504\2107++;`20\5007`20`20break;\0E06`7D X\0705else\61251;\3106\580D\E30E\DF0B\0E0C->next\3F07if`20(`20(\4507`20>\2805 V\0E06cnt)`20`26`26`20(i\490B!=`200)`20) X\3C05`7B X\DC08printf(stderr,"IFF_ansq:\9E06`20err`20%ld\0404`5Cn", X`09`09`09\0303\7507,i\730D\9807`20`20IFF_TheEnd()\1507`7D X\0703`7D X\E208\0A08`7D`20/*`20end`20of`20for`20*/\1907anim_hdr->\6006lst`5B\7607`5D.ti V\9A03=`200; X\2D23act`20\2D16last\BF06\2003\3007`20-`201\2A06\A306else\0703/*`20no`20ansq V`20chunk\A908`7B X\5506LONG\4308; X\971A\6903 X`09`20`20(XA_FRAME`20*)malloc(sizeof(\1908)`20*`20(iff_act_cnt`20+`201))\C408i Vf`20(\5E15=`20NULL) X`09`09IFF_TheEnd1("IFF_Read:`20\EF06\7406`20err")\540A\6D07ur\A603\0E08start; V\2307\E107\1F030;\1307while(\3C0C!=`200) X\1E06`7B X\0806`20`20\AE13`5Bf\4F06`5D.act`20`20\740Acur->act; X`09if`20(\170Dtype\E7041) X`09`7B X`09`20`20if`20(\6003(iff_dlta_cnt\2106`20`26`26`20(crng_flag\0F06xa_jiffy_flag V\27040) X\4503\A204\1F04\8210\700AACT_IFF_BODY)`20\3505\DD0A\E121time\E103DEFAULT_CYCLI VNG_TIME; X`09`20`20`7D X\490Aelse\4F26iff_time; X`09`7D X`09e\38291;\6F09\F10B\5107\FF09next\290A\4407++\3C0C`20(\1707`20>\3C0Ant) X\2308`7B X\D80Afprintf(stderr,"IFF_Read:`20frame`20inconsistency`20%ld\0404`5Cn",\440B V\8C0D,i\730B\970A`20`20IFF_TheEnd()\180A`7D X\0808\0806anim_hdr->\5006lst`5B\5A07`5D.time`20=`200;\2D24act`20`20\2D0Bif`20( V(i\9D0A`20<=`202)`20`7C`7C`20\1606nim_flags`20`26`20ANIM_NOLOP)) X`09`09a\6809loop_frame\5B0Celse\2518iff_dlta_acts`5B2`5D.frame\950C\B207`20> V`200`20)\D40Blast\4709\2508-`201;\760B\2F18\F60Dxa_verbose)`20fprintf(stderr," V\2505dlta_cnt=%ld`20comp=%ld`5Cn",\FC03`09`09\C209cnt,i\0D09ompression)\6D06 V`7D X\0404`20`20\930Aimagex\8F03iff_max_\1106\2F04\250Fy`20\250Fy;\2512c`20\2506 V\0D06\2113d`20\460Fd; X X`20`20/*`20Some`20older`20IFF`20files`20don't`20include`20a`20CAMG`20chunk`20t Vo`20indicate`20they X\E003*`20are`20interlaced.`20They`20just`20assum\2B05`20viewer`20will`20figu V\3404t`20out.\4506Below`20is`20an`20arbitrary`20ruleset`20that'll`20hopefully V`20work`20for`20most`20cases.\4A05/ X\0603if`20((i\F40Cx`20>=`20400)`20`26`26`20(\1B10`20if\110By)) X`09iff_anim_flags`20`7C=`20ANIM_LACE; X X`20`20/*`20NOTE:`20A`20lot`20of`20IFF`20animations`20have`20active`20color`20c Vycle`20chunks,`20yet\FB06\0503\0303they`20were`20never`20intended`20to`20 V\3905.`20AAARRRRGH!!!\EC09\EB04iff_dlta_cnt`20==`201)\A005single`20image\9E05f Viles`20\3705`7B X\7504\3D04`20(crng_flag)`20`26`26\4E06allow_cycling\5304TRUE)`20) X`09`09`09`09`09iff_anim_flags`20`7C=`20ANIM_CYCLE;\5905else`20if\270D`26=`20 V`7EANIM_CYCLE; X`20`20`7D X`20`20else`20/*`20animation`20IFF`20files`20*/\2103`7B X`20`20`20`20if`20(`20(crng_flag)`20`26`26`20(iff_allow_cycling`20==`20TRUE) V`20\3505\0404\2804xa_anim\2612)`20\5A04f_anim_flags`20`7C=`20A\A50D\A307\270F V`26=`20`7EANIM_CYCLE; X`20`20`7D X`20`20anim_hdr->anim_flags`20=`20iff_\110A\2D04IFF_Free_Stuff(); X`7D X X/* X`20* X`20*/ Xvoid\2405Adjust_For_EHB(colormap,cmap_bits) XColorReg`20\1D08`5B`5D; XULONG`20\2609; X`7B X`20`20\1405i,cmap_num; X X`20`20DEBUG_LEVEL1`20 X`09fprintf(stderr,"Adjusting`20CMAP`20for`20Amiga`20Extra`20Half-Brite`20Mode V`5Cn")\DE04if`20(\7C09`20==`208)\8C06num`20=`20128\2604else`20 X`20`20`7B`20/*`204`20b\2C04per`20rgb,`20shift`20down`20from`208\2006to\2A08*/ V\3B03`20`20\570B32\5604`20`20IFF_Shift_CMAP(colormap\F809\A305`7D X\2C04/*`20make`20upper`20half`20a`20darkened`20version`20of`20the`20low\2508 V\7D05for(i=0;i<\5A08;i++) X\D203\9B06\7907`5Bi`20+\A809`5D.red`20`20`20=`20\1F0A\1408>>`202\C306\3B17gree Vn`20\3B0E\1406\3B21blue\7610\1406\3B08`7D X`20`20iff_imagec\2B032`20*`20\DA09\1D07or_mask`20=`20CMAP_Get_Or_Mask(i\3C09); V X`7D X X X/* X`20* X`20*/ Xvoid`20IFF_Read_BODY(fin,image_out,bodysize,xsize,\0C06depth, X`09`09`09compression,masking,\8A07) XFILE`20*fin; XUBYTE`20*\5809; XULONG`20x\5610; X\1805\7709\6113\3C08\6807; X`7B X`20L\1104i,ret,x,y,d,dmask,tmp,rowsize; X\2507magex_pad; X`20\9607nbuff,*row\0906sptr\1E09sbuff,*dbuff; X X`20if`20(`20`20`20(\9A0B`20!=`20BMHD_COMP_NONE)`20 X`20\2503`20`26`26`20\291ABYTERUN)\2C06)`20IFF_TheEnd1("IFF_Read_Body:`20unsupp Vorted`20c\510A")\930Cmasking`20\6608MSK_NONE)\8D0A\2314HAS)\221ETRAN\2407 V\A72A\4907\A307nbuff`20=`20(BYTE`20*)malloc(bodysize); X\C705\2808=`200)\6A1D\4006`20failed"\3F04ret=fread\4507,b\5C07,1,fin\6208ret!= V1)\5D1Dread`20of`20BODY`20chunk\690Csb\CB06\6706; X X X`20/*`20width`20is`20rounded`20to`20multiples\4D0416`20in`20the\5706form`20*/ X\3C04extra`20bits`20are`20ignored`20upon\8C05ing`20\2B04imagex_pad`20=`20xsize V`20/`2016\DA07\1106%`2016)`20\2A0A++\1F04\390A*=\3205 X`20rowb\C906(BYTE`20*)malloc(`20\2E0B\F004\5C04\2D09=`200)`20IFF_TheEnd1("IFF_ VRead_Body:`20malloc`20failed"); X X`20memset(image_out,or_mask,(\B306*`20ysize)`20\2E05\6F04compression==BMHD_COM VP_NONE)`20sptr`20=`20inbuff\3204for(y=0;`20y=`208\5F07\6104`09`20\8D07`09`20sptr\2F0B\CB07\0707\3D05magex_pad V`20>=`20(xsize+8))`20\3A08\2B06dmask`20<<=`201\4D05`7D`20/*`20end`20of`20depth V`20loop`20*/ X\1E04\DB08ing`20==`20BMHD_MSK_HAS)\2004`7B X\5505/*`20read`20the`20\6005row`20an\1105n`20th\0F04out`20for`20now`20*/ X\B809compression`20\6308COMP_BYTERUN\6805\6A09`20`20rowsize`20=`20i\F20A/`208; V\2108dbuff`20=`20rowbuff\1809ret=UnPackRow(`26sbuff,`26dbuff,`26bodysize,`26 V\6007);\3808\A504ret)`20`7B`20fprintf(stderr,"error`20%ld`20in`20unpack`5Cn",r Vet);`20IFF_TheEnd();`7D\4E06\0707else`20sptr`20+=`20xsize/8\7005\2003`7D`20/* V`20end`20of`20y`20loop`20*/ X`20free(inbuff\9B04free(\E207); X`7D X X X/* X`20* X`20*/ XLONG\7F05Read_Garb(fp,size) XFILE`20*fp;\2606size; X`7B X`20BYTE`20*garb; X X`20garb`20=`20(\1606)malloc(size); X`20if`20(garb==0) X`20`7B`20fprintf(stderr,"read\4205\3806`20err\6905=%ld",\4606`20return(-1); V\F603fread(garb,size,1,fp)\E808garb\0D04\33070)\F105void\E605Print_ID(fout,id) V\E508out\E707id\E505\A908fout,"%c",`20`20`20`20`20((id`20>>`2024)`20`26`200xff V)\1603\7F05\311E16\312F`208\3120(%lx)",`20\3104\3B05`20`20\3107,id)\F905 X/*`20 X`20* X`20*/ Xvoid`20IFF_Delta5(fptr,deltaptr,imagex\0706y,imaged,xs,ys,xe,ye) XUBYTE`20*fptr;`09`09`09/*`20ptr`20to`20image`20out\6604\2607\5808\2A03\290A V\1505\2505LONG\3806\730F;`09/*`20\5106size`20and`20depth`20\3709*xs,*ys,*xe,*y Ve;\6205\2D05of`20affected`20area\3404`7B X`20register`20\3F05col,depth,dmask; X\200Frowsize,width; X`20\7506poff\2B0C\E707imageptr;\1B12dptr,opcnt,op,cnt; X`20\4B05miny,minx,maxy,maxx; X X`20/*`20set`20to`20opposites`20for`20min/max`20testing\D404`20*xs`20=`20imagex V; X`20*ys\0F08y;\1E04e`20=`200;\1904\0A07 X`20\AA08\1003fp\B105width\470C\FA07\1303\1B06>>`203; X`20dmask`20=`201; X`20for(depth=0;`20depth=0)`20`26`26`20(miny`20<`20*ys)) V\0604\5503miny\310Eaxy\310A\7A04>`20*ye)\3104e`20=`20maxy\3106\B70Ccolumn`20lo Vop`20\B706\1E0Cvalid`20pointer`20for`20this`20plane\2F07dmask`20<<=`201;\1004 V\BE09x>\BE0Bx`20<`20*xs\8D04xs\BE06x;\2F0Bax\2F0Baxx\BC04xe\2F05\BC07\2F05 V\9C0C\8E04depth`20*/ X\1C03\4A04xa_optimize_flag`20==`20TRUE) X`20`20`7B X\FC04\2604\8304>=`20imagex)\92070;\200Ays\2009y)`20*ys`20\200Exe`20<=`200)`20 V\1204\A307\4E06\450C\250Eye`20\5308\CA05\0403else\9909\8608\2F08\740B\610D V\4A14 X`7D`20/*`20end`20of`20routine`20*/ X X/* X`20*`20 X\0C04void`20IFF_Delta3(fptr,deltaptr,imaged) XUBYTE`20*fptr; X\0D07\2508; XULONG\7B06d; X`7B X`20register`20L\1905,depth,dmask; X`20\2F06poff; X`20\2B09SHORT`20`20offset\190CUS\1A05s,data\190D\8805`20*imageptr,*dptr; X X`20\1208`20=`20fptr; X`20dmask\0F031; X`20for(depth=0;depth=`200\4C05\4E09`20data`20\4D10\1505\4B13`20i Vmage\EB04+=`2016`20*`20\E608\6106\2809IFF_Short_Mod(\3608,data,dmask,0\2C08 V`7D`20/*`20end`20of`20pos`20*/ X\1805else\AB0E\7D19-(\7F06+2))\8208s`20\D510s`20\D20D\7704size\7804next\7909 V`20for(i=0;`20i`20<`20\6407s;`20i++)\2207\9208`20data\6911\1505\6C0D\2F08 V\C20E\1709IFF_Short_Mod(\2508,data,dmask,0\4409`7D X\0605`20`20/*`20end`20\BE05g`20\BD06`7D`20\160Adelta`20for`20this`20plane`20 V\2705\2605\1006has`20changed`20\B705\2105dmask`20<<=`201; X`20\550D\2104`7D X X/*`20 X`20* X\0E04LONG`20Is_IFF_File(filename) XBYTE`20*\1008; X`7B X`20FIL\1304p; X`20UL\3A04firstword; X X`20if`20(`20(fp=fopen(\3A08,"r"))`20==`200) X`20`7B`20\A303fprintf(stderr,"can't`20open`20%s`5Cn",f\8608;`20\2F03TheEnd() V\CF04\0F03/*`20by`20reading`20bytes`20we`20can`20ignore`20big/little\FB04ian V`20problems\F404\B60A`20`20=`20(fgetc(fp)`20`26`200xff)`20<<`2024;\280C`7C= V\281716\2826`208\2822; X X`20fclose(fp)\0E04if`20(f\3509==`20FORM)`20return(TRUE); X`20\2611LIST\2622PROP\2611\0F07FALSE); X`7D X X X/*`20 X`20* X`20*/ Xvoid`20IFF_Buffer_Action(anim_hdr) XXA_ANIM_HDR`20*\1708; X`7B X`20`20LONG`20image_size;\1303UBYTE`20*buff0,*buff1,*tmp\1C04XA_ACTION`20*act V\1207FRAME`20*frame_ls\1705UL\5904\1306i; X X`20`20\650A`20=`20iff_imagex`20*`20\0D09y;\2803buff0\2303(U\8806)`20malloc( V`20\420B);\5204f`20(b\2E06=`200)`20TheEnd1("IFF`20Buffer`20Action:\4407`20fail Ved`200"); X\6C071`20\6C2C1`20=\6C05\1303`7B X`20`20`20`20free\8606\2805`20`20\862A1"\3305`7D X\0503frame_lst`20=`20anim_hdr->\1609;`20\2409i`20=`200\3804while(f\2308`5Bf V\1F06`5D.act`20!=`200)\A509\1204=`20\2B16\B606switch(act->type\3C04\3E04`09cas Ve`20ACT_IFF_DLTA5: X\1512J:\3005\3406\0A08`20`20LONG`20minx,miny,maxx,maxy;\CF04\250Dpic_size,pic_ Vx,pic_y;\250BUBYTE`20*t_pic,*w_pic; X\200B\C016\9212`20`20\D114\200C\0404IFF_Delta5(buff0,`20act->data,`20iff_image Vx,i\0B08y, X`09`09`09`09i\1008d,`26minx,`20`26miny,\0703axx,\0705y)\D80C\0606break;\A71EJ: V\A71AJ(\A738\A105\A83A`7D X\0C0Afree(a\8108);\1606/*\1905`20delta`20chunk`20*/ X\C50EUpdate_DLTA_HDR(`26minx,\9406\9306\9208\390Bpic_x`20=`20maxx`20-`20minx; V`20pic_y`20\1505y`20\1505y;\340Fsize\2203\3F06*`20pic_y\240Ct_pic\2103(UBYTE V`20*)`20malloc(`20XA_PIC_SIZE(\4A08)`20); X\3D0Aif`20(\4107=`200)`20TheEnd1("Buff\EC04`20DLTA5:\5407`20failed"\DA0EIFF_Im Vage_To_Bufferable(`26w_pic,`20t_pic,`20buff0,\380B\0606act->chdr,\0B06h_cmap, V`20pic_x\0706y,\3611minx,`20miny,`20iff_imagex,`20\0C09\1807anim_flags\F811 V\9E05\F804buff0)`20memcpy((char`20*)t_pic,\0E08\BD06pic_size); X X/*POD`20TEMP`20redo`20this`20\FE0A`20stuff`20*/ X`09`20`20ACT_Setup_Mapped(act,`20\6206\F606chdr,`20 X`09`09m\D90Bpic_x,`20pic_\E71B0,\3703TRUE,`20FALSE,`20TRUE); X X\F00Atmp`20\E907;`20buff0\0F071;\0706\0F03tmp; X\3108`7D X\0A08break; X X`09case`20ACT_IFF_BODY: X\140EDLTA3:\1513l:\4E09`7B X\950AUBYTE`20*t_pic,*w_pic\810A`20`20switch(act->type) X\1C0A\470C`20`20\9A13\1F0C\0404memcpy((char`20*)buff0,`20(\0F07act->data,`20im Vage_size);\46241,\4631IFF_Init_DLTA_HDR(iff_imagex,\0B09y)\3A12break; X X\FD19DLTA3:\7215Delta3(b\FA06\AC0C\7208d)\7219\711Dl:\711Al(\7106\700A\EC15 V\0B0Ad,1)\8723`7D X\0D0Bfree(a\6208);\1909/*\1C05`20delta`20chunk`20*/ X\3A0At_pic`20=`20(UBYTE`20*)`20malloc(`20XA_PIC_SIZE(image_size)`20); X\400BIFF_Image_To_Bufferable(`26w_pic,`20t_pic,`20buff0,\D611act->chdr,`20 V\0B05h_cmap,`20iff_imagex,\0C0Ay,`200,`200, X`09`09\2018iff_anim_flags); X\6B0Aif`20(w_pic`20==`20buff0)`20memcpy((char`20*)\AC06\0E08\B306\FA0B; X X/*POD`20TEMP`20redo`20this`20B\F609`20stuff`20*/ X`09`20`20ACT_Setup_Mapped(act,`20\6406\F90C\CF03\D705\F519\18180,\3B03TRUE, V`20FALSE,`20TRUE); X X\F60Atmp`20\EF07;`20buff0\0F071;\0706\0F03tmp; X\3108`7D X\0A08break;\4D06`7D`20/*`20end`20of`20switch\E504\1A04frame_i++;\2304move`20to V`20next\E404ion`20in`20list`20\3105\490Cwhile`20\1705if`20(buff0)`20free\0C07 V\9604\1A081)\1A0A1); X`7D X XLONG`20IFF_DeltaJ(fptr,deltaptr,imagex\0706y,imaged,tminx,tminy,tmaxx,tmaxy) XUBYTE`20*fptr; Xregister`20U\1606\5408; XUL\7404\5B14; X\1B05*tminx,*tminy,*tmaxx,*tmaxy; X`7B X`20\5B09\2E05rowsize,width;\1E0B\7907imageptr; X\390Fexitflag\340D\1A05`20type,r_flag,b_cnt,g_cnt,r_cnt;`20\3111b,g,\610D V\1706offset,dmask,dept\A013data; X`20\3005changed;\0F07tmp,minx,miny,maxx,maxy;\1F07kludge_j; X`20/*`20this`20\1306`20is`20because`20animations`20with`20width`20less`20than V`20320`20are`20considered X`20`20*`20centered`20in`20the`20middle`20of`20a\3305screen.`20Does\7B06happen V\6505\4205\790Bgrea\F104\7105lores`20overscan(374)`20and`20\930Ahi-res(640)??? V? X\4E03/ X X`20if`20(imagex`20>=\8504)`20\EF06_j`20=`200; X`20else`20\140B(320-imagex)/2; X X`20maxx=0; X`20maxy=\0905inx=\2406\0E06y=imagey; X X`20changed=\2904width`20=`20\2C09rowsize`20=`20\1B06/`208; X`20exitflag=\3405hile(!\1408) X`20`7B\CE03/*`20read`20compression`20type`20and`20reversible_flag(xor`20data V`20not`20just`20set)`20\4703`20*/ X`20`20\3905`20`20=`20(*deltaptr++)`20<<`208;\1D08`7C=\1E0E; X`20`20r_flag\3817\1D07\3812\BE06switch`20on`20\C311\9405\2006(type) X`20\F405`20case`200:`20exitf\7A061;`20break;`20/*`20end`20of`20list`20\4505 V\32061:\0B04\0303/*`20Get`20byte`20count`20and`20group`20\1006\2907\3E07\0303b V_cnt`20\E216\1C06\E112\3A06g_\3A1A\1C06\3A18\AE0ALoop`20thru`20groups X\9F10for(g=0;`20gmax\3504axx\3512\6A08/i\6A12y)\6A04y=\6A14b_cnt; V\6A13\3504axy\350D\3D09/*`20Loop`20thru`20byte`20count`20\2109`20*/ X\0B08for(b=0;`20b`20<\7008b++)\2109`7B X\EC0Admask`20=`201;\150Bfor(depth=0;depthmax\3904axx\3912\7208/i\7216y)\7204y=\7214r_cnt\6E09\720F V\3904axy\390D\4109/*`20Loop`20thru`20rows`20of`20group\2309`20*/ X\0B08for(r=0;`20r`20<\7608r++)\2109`7B X\840Admask`20=`201;\150Bfor(depth=0;depth=`20imagex)\590A0;\250Dy`20\2508y)\6F0A\250D\7004<=`200)`20 V\1403\820B\5B06\2A0Ey`20\2A10\4F04\6006\2A05DEBUG_LEVEL2`20fprintf(stderr,"xyp Vos=<%ld,%ld>`20xysize=<%ld`20%ld>`5Cn", X`09`09*tminx,*tminy,*tmaxx\0706y`20); X`20`7D X`20else X`20`7B\7204\FA0B\E110\CB10\B213`7D X X`20/*\E104changed`20is`20zero`20then`20this`20Delta`20didn't\2707\1E04\4506 V`20at`20all`20*/`20 X`20return(\4B07); X`7D`20/*`20end`20of`20IFF_DeltaJ`20routine`20*/ X X/*`20 X`20*`20`20Decode\2604`20type`20l`20anims X\2504void\400Al(fptr,deltaptr,\DE06\0706y,imaged,vertflag) XUBYTE`20*fptr; X\0D07\3C08; XULONG\CB06\430F; X\1B05\4908; X`7B X`20register`20L\3605,depth,dmask,width; X`20\5206poff0,poff1;\380B\8007imageptr; X\1B11optr,*d\1D0FSHORT`20cnt;\320C\1606offset,data; X X`20\5C08`20=`20f\4606if`20(\C708)`20width\1D03\F406; X`20else\160916; X`20dmask\0D04; X`20for(depth\10030;`20depthdata\1503(UBYTE`20*)`20malloc(s\4404* V`20sizeof(C\B507)`20);\9B07\3E0B=`200)`20IFF_TheEnd1("IFF_Setup_HMAP:`20\5506 V`20failed`5Cn"\4605hptr\7B04\5D08\7E04\5609\2104for(i=0;`20i`20<\8A05;`20i++) V`20\1B03`7B X`20`20\4206`5Bi`5D.red`20`20`20=`20hmap\100Ccm\100C>>`20shift\5B04\3C0Agreen V`20\3C0A\1008\3C08\1006\3C16blue\780C\1008\3C08\1006\3C0C`7D X`7D X X`20 XIFF_DLTA_HDR`20iff_dlta`5B2`5D; X Xvoid XIFF_Init\2509(max_x,max_y) XULONG`20m\130A; X`7B X`20`20\49090`5D.minx`20=`20\13091`5D\13080;\2B12y`20\2B11\1304\2B12ax\5611 V\1306max_x\2F13\5A11\1306\B607`7D X\F00AUpdate\F20Bin_x,min_y,\FE0D\FD05*min_x,*min_y,*max_x,*max_y; X`7B X`20`20\2605tmin_x,tmin_y,tmax_x,tmax_y; X X`20/*`20This`20mess`20keeps`20track`20of`20the`20largest`20rectangle`20needed V`20to X`20`20*`20display`20all`20changes.`20Since`20things`20are`20double`20buffered, V`20the\3F05min/maxes\7008corner\0F0Aurrent`20and`20previous`20two\3D05imag V\3A03\6104taken.`20I\3606animation`20is`20in`20single`20step`20mod\7B06it's V`20b\DC04to\C709\3E04entire`20image. X\2B03/ X\0603tmin_x`20=`20*min_x; X\1307y`20\1307y;\1305ax\2607ax_x\1309\2606ax_y\1304iff_dlta`5B0`5D.min\3004MIN V(\1710,`20\7506);\3412\5104\3413y,\9607\3412ax\6805AX\340Eaxx\3404ax_x\3414 +-+-+-+-+-+-+-+- END OF PART 5 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 12 Archive-name: xanim/part06 -+-+-+-+-+-+-+-+ START OF PART 6 -+-+-+-+-+-+-+-+ V\6805\3412\6805ax_y\3405*min_x\2A03\26091`5D\D915\1707,`20\EB10\470A\7104 V\300F\EC11\1707\4711\8E08ax_x\4710\FF13\1707\470Faxx\470A\8E11axy\4716\8E10axy V); X X/*`20Throw`20out`20oldest`20rectangle`20and`20store`20current. X`20*/ X`20`20\EB0F\CE0D\EC06x;\2712\AE0D\2706y;\2710axx\2710axx\2713\4E11axy\270D V\8907\2703tmin_x\1D13\4404tmin_\3A12\8806tmax\3A13\7E06tmax_y; X`7D X\2003 Xvoid XIFF_Image_To_Bufferable(i_ptr,out,in,chdr,h_cmap, X`20`20`20`20\0404\0808\0808xosize,y\0706xip,yip,xi\1606\0706flags) XUBYTE`20**i_ptr,*out,*in; XXA_CHDR`20*chdr; XColorReg`20*\7C06; XULONG`20\6A29; X`7B X`20`20\3506map_size; X\1303\0D08`20=`20chdr->csize; X`20`20if`20(x11_display_type`20==`20XA_MONOCHROME) X`20`20\5A04`20`20register\6507line\660A`20`20\E206\6603out\5E04`20`20\2209 V\1503X11_Get_Line_Size(xisize);\3E06/*`20NOTE:`20this`20code`20currently`20ass Vumes`20no`20optimization`20under`20\AF0D`20*/ X\5004\DC04flags`20`26`20ANIM_HAM\CB04\CD08\22166)\1D07`20`20IFF_Buffer_HAM6(ou Vt,in,chdr,h_cmap,\C206,y\07060,0,\1207FALSE); X\4A06else\57178(\573AUTIL_Mapped_To_Bitmap(out,out,chdr,0,0, X`09`09x\510D\0E0Eline_size\5807`7D X\B308\611B\B108\6033return\0C04`7D X\0503if`20(flags`20`26`20ANIM_HAM) X`20`20`7B X\2D04*i_ptr`20=`20out\3F06\30146)\1B05`20`20IFF_Buffer_HAM6\AB0Dh_cmap,xos V\9D05\0706xip,yip,x\AC06FALSE)\6906else\57158(\573C\FF13x11_display_type\DA03X VA_X11_TRUE\DC04`7B X\3B04*i_ptr`20=`20out\4D06UTIL_Mapped_To\0A07(out,`20in,`20chdr,`20xip,`20y V\0504\A507`20y\0806\DE07\0606\0C0C\0808\BF07yisize\C005`7D X`20`20else\9409/*`20Optimize\CC04xip==yip==0`20and`20\7206==iff_imagex\1705 V\8106\170By`20*/\E41CSub_Image\DD0A\CD0F\E70C\B706`201\B307`7D X Xvoid XIFF_Read_BMHD(fin,bmhd) XFILE`20*fin; XBit_Map_Header`20*bmhd; X\EB04/*`20read`20B\220Einto`20bmhd\C106\2608so`20as`20to`20avoid`20endian`20pr Voblems\2C06bmhd->width`20\E904\0505\0404=`20UTIL_Get_MSB_Short(fin\CF05\3606he Vight\3630x`20\690E\3626y`20\3634dept\D811fgetc(\290Emasking`20\2921compression V`20\291Dpad1\B111\2914transparentColor\DA26xAspect`20\5F21yA\2927pageWidth`20 V\290B\8821pageHeight\3624`7D`20 X Xvoid XIFF_Read_ANHD(fin,anhd,chunk_size) XFILE`20*fin; XAnim_Header`20*anhd; XULONG`20\300A; X`7B X`20`20\1606i;\0B03anhd->op`09`09\EF10\1A06mask\1C18w`09\1903\FB1B\2606h`09 V\2624x`09\2624y`09\2624abstime`09\2C10Long\2B0Frelt\2B27interleave\2D03fgetc( V\210Epad0\4904\1C14bits\651Efread((BYTE`20*)(a\5308),1,16,fin);`20/*`20read V`20pad`20*/\3603i`20=`20Anim_Header_SIZE;\1803while(i`20<`20chunk_size)`20`7Bf V\9B0A`20i++;`7D X`7D X Xvoid XIFF_Read_ANSQ(fin,c\390A XFILE`20*fin; XULONG`20\1D0A; X`7B X`20`20\1606i;\0B04\C306p;`20`20/*`20data`20is`20actually`20big`20endian`20USHO VRT\C906\3506garb; X\D804ff_ansq_cnt`20=`20\6F0A`20/`204\6604\210C++;\6B04adding`20dlta`200`20up V`20front`20\5F05DEBUG_LEVEL2`20fprintf(stderr,"`20`20`20`20a\4C07=%ld\4305 V\0D08`5Cn", X`09`09`09\0303\740C,iff_\2808);\6303\8204llocate`20space`20for`20ansq`20variab Vles\2703\8F05\4A08\DB03(IFF_ANSQ`20*)malloc(`20\FE0D*`20sizeof\2909))\6F04if V`20(\470A=`20NULL)`20IFF_TheEnd1("IFF_Read_ANSQ:`20\5E06`20err")\4208xa_verbos Ve)`20fprintf(stderr,"`20`20`20`20`20frames=%ld`20dlts=%d`20comp=%ld`5Cn", X`09`09`09\AE0C,iff_dlta_\0D0Dcompression)\7B04garb\FC04BYTE\F80Achunk_size V\A009garb==0)\0F03`7B X\9005\A50F\FF05\DA07not`20enough`5Cn"\4305`20`20IFF_TheEnd()\1204`7D X\D404ead(garb,c\7309,1,fin\2405p`20=`20(UB\9C06(garb\1705/*`20first`20delta V`20is`20only`20used`20once`20and`20doesn't`20appear`20in\3903*`20the`20ANSQ V\0D04/ X\DB04f_ansq`5B0`5D.dnum`20`20=`200;\190Ftime\19041;\B404or(i=1;`20i<\2408_cnt V\1003++) X`20`20`7B X\EE04/*`20this`20is`20\A506to\8A04ly`20\7705\600Bi`5D\7909(ULONG)(*p++)<<8; V\2A16`7C=\2A0E\2706\720Bjiffy`20count`20or`20if`200xffff`20then`20a`20goto`20 V\8813\E808\8822\2A05\8816\270Cframe`20=`200;\1B05DEBUG_LEVEL2\1105fprintf(stde Vrr,"<%ld`20%ld>`20",\F710,`20\8110\7105`7D X\4703ree(garb); X`7D X X/* X`20*`20Function`20to`20register`20any`20CRNGs`20that`20occur`20before`20CMAP V`20in`20IFF`20file X`20*/ Xvoid XIFF_R\4307_CRNGs(anim_hdr,chdr) XXA_ANIM_HDR`20*a\1C07; XXA_CH\1304chdr; X`7B X`20`20XA_ACTION`20*act; X\1303act`20=`20(\1A0B)a\4307->acts;\2604while(act) X`20`20\4A04`20`20if`20(`20(act->type`20==`20ACT_CYCLE)`20`26`26\1C07chdr\1C040 V)`20)\3805\0404\0505ACT_Add_CHDR_To_Action(act\D806; X\2604\A006act->next\1504`7D X`7D X X Xvoid XIFF_Read_CRNG(\B908,fin,chunk_size,crng_flag) XXA_ANIM_HDR`20*\3008; XFILE`20*fin; XULONG`20\3E0A\1208*c\4608; X`7B X/*`20CRNG_HDR X`20*`20word`20pad1,rate,active; X`20*`20byte`20low,high; X`20*/ X\C303/*`20is`20the\6906\0A06orrect`20size`20?\2503*/ X`20`20if`20(\8D0A`20==`20IFF_\7C08_SIZE)\2703`7B X`20`20`20`20XA_ACTION`20*act; X`20\1403\BE06\970B,l\8E07,c\E006\2604ACT_CYCLE_HDR\3E05_cycle; X\1F05/*`20read\F405\B307\9E05`20`20rate\0703=`20UTIL_Get_MSB_UShort(fin);`20 V\3E04throw`20away`20pad1`20\3E29\2705\B906\2721low\0704=`20fgetc(\190Ahigh V\1915/*`20make`20it`20an\6705on`20only`20if`20its`20valid X\2B04\B207if`20(`20`20`20(a\9306`26`20IFF_CRNG_ACTIVE)`20`26`26`20(low`20<`20h Vigh)`20 X`09\1204\EA05>`20\2E09DPII_KLUDG\3307iff_allow_cycling`20==`20TRUE)`20) X\7A04`7B X\0604`20`20ULONG`20i,*i_ptr; X\1707csize`20=`20\EC05-`20\8204+`201;\1E07act_cycl\2204(ACT_CYCLE_HDR`20*) X`09malloc(`20sizeof\210E)`20+`20(c\5E05*`20\2107ULONG))`20)\6008if`20(\640B= V`200)\EC05TheEnd1("IFF_Read_CRNG:`20\7106`20failed"); X\A810->\D007csize\C711->curpos\21030;\1D12rate`20`20=`20(\A906(IFF_CRNG_INTERV VAL/rate\BE09\3A0Bflag\5604ACT_CYCLE_ACTIVE;\E90Eive`20`26`20\5709REVERSE) V\4A12`7C=\4B0B\2707\EE09i_ptr`20\A708`20*)a\3F0Adata\7508for(i=0;`20imap; X`20`20coff\1409\2D06`20`20if`20(\1206new_chdr`20==`200)`20`7B\4705\1106\3405; V`20\A00D\16030;`20`7D\4303else\2F12\510A\39121;\3905\BA08\1203\3D08->m\990Bx11 V_display_type`20`26`20XA_X11_TRUE)`20d_\5107TRUE\3508\1506==\2306psize`20=`20x V11_bytes_pixel;\B808\20081; X X`20`20DEBUG_LEVEL1`20fprintf(stderr,"ham_cmap:`20=`20%lx`5Cn",(ULONG)h_cmap); V\8207\CD08`20!=`20iff_ham_chdr)`20\2103`7B X`20`20`20`20register`20ULONG`20i\3B04\7F1F\4A08\8205old`20\8605`20new\900A X`09`09`09`09`09\9607\7B0C\AA08\9B08\AC05\AE06\580B`20==`200)\1A05\A706\2305 V\1F09_size`20=`20IFF_HAM6_CACHE_SIZE;\2F13\2A03\7606`20*)malloc(\4E12*`20sizeo Vf\A007`20)\4A0B\9C13\7C05TheEnd1("IFF_Buffer_HAM6:`20h_\2A04\6D06`20err") V\4F06`7D X\0604for(i=0;`20i=`20xip)`20`26`26\0E04<`20xend)`20) X\2606`7B X\9908register`20ULONG`20t_color\BB0A\200ASHORT`20indx\E703(pred`20<<`208)`20 V`7C`20(p\FD04<<`204)\0E03pblu; X\4209\9206\5907\3B03iff_ham_map`5Bindx`5D)`20==`20IFF_HAM_MAP_INVALID)`20 V\4409\B00A\5006x11_display_type`20`26`20XA_X11_TRUE)`20 X`09`20\2A03\740AX11_Get_True_Color(pred,pgrn,pblu,4);\3504else\0804\710C\7306c Vmap_true_to_332\B504TRUE)\6C06`7B X\0705\750A\7603(((ULONG)pred`20*`20CMAP_SCALE4)`20`26`20iff_r_mask\B104`09`09 V`09>>`20\1406shift;\5210`7C=\520Bgrn\5216g_\5212g_\5223blu`20\5215b_\5212b_ V\5207\5106\0606`20`20if`20(new_cmap_flag)\6C09=`20the_map`5Bt\1207-`20coff`5D V`20+`20the_moff\A107`7D X\0705else\0A06`7B X\670E\540A\BF0Ared`20*`2011)`20+`20\1509grn`20*`2016)\BC04\180B\EC065));\6106 V\530D\0B08*`20CMAP_SCALE9)`20>\FA06gray\FD61`7D X\570Cf_ham_\3E04indx`5D`20=`20t\4606; X`09`7D X X`09\7904d_flag) X`09`7B X\920Ex11_bytes_pixel`20==`204) X\B90D`7B`20ULONG`20*ulp\5D03(U\0E06)o_ptr;`20\1707\7408`20o_ptr`20+=`204;`20 V\A90Celse\73182)\6604SHORT`20*usp\6705\0F07\6807 X`09`09`09\1C0F)(\7507);\760A2;\7612*o_ptr++\3B05BYTE)t\AE07 X`09`7D`20\2320\4906`7D`20/*`20end`20of`20output`20*/ X\1A10x`20\1505\130Cy`20*/ X`7D X X Xvoid`20IFF_Buffer_HAM8(out,in,chdr,h_cmap,xosize,y\0706xip,yip,xisize,d_flag) XUBYTE`20*out,*in; XXA_CHDR`20*chdr; XColorReg`20*h_cmap; XULONG`20\5C1C\2408\6306; X`7B X`20`20\5709the_\5B06`20`20\2706new_cmap_flag,*the_map,psize; X`20`20register\2F07y,xend,the_moff,coff; X\2803\3907`20=`20chdr->map; X`20`20coff\1409\2D06`20`20if`20(\1206new_chdr`20==`200)`20`7B\4705\1106\3405; V`20\A00D\16030;`20`7D\4303else\2F12\510A\39121;\3905\BA08\A90A\950Bx11_display V_type`20`26`20XA_X11_TRUE)`20d_\4D07TRUE\3508\1506==\2306psize`20=`20x11_bytes V_pixel;\B408\20081; X X\4006\C409!=`20iff_ham_chdr)`20\2103`7B X`20`20`20`20register`20ULONG`20i\4E04`20`20DEBUG_LEVEL1`20fprintf(stderr,"i V\4A068_map:`20old\7403%lx`20new`20\0A05`5Cn", X`09`09`09`09`09(ULONG)i\7C0B,(\1406\9C08);\7205\AF04\2708map`20==`200)\1A05 V\A806\2305\1F09_s\EB06IFF_HAM8_CACHE_SIZE;\2F13\2A03\7606`20*)malloc(\4E12* V`20sizeof\A007`20)\4A0B\9C13\7C05TheEnd1("IFF_Buffer_HAM8:`20h_\2A04\6D06`20er Vr")\4F06`7D X\0604else\5710\8606!=\D514) X\3604`7B X\9006\CB07tmp;\1207\4711\4615\2E08tmp\2103\E806`20*)`20realloc\8D0C,I\8513 V\6E0A`20(\4405=`200)\6905TheEnd1("IFF_Buffer_HAM8:`20h_map`20malloc`20err") V\B413\8E03\CD09`7D X\0604for(i=0;`20i=`20xip)`20`26`26\0E04<`20xend)`20) X\2606`7B X\9908register`20ULONG`20t_color\BB0A\200Findx\E603(pred`20<<`2012)`20`7C`20(p V\FD04<<`206)\0E03pblu; X\4209\9206\5907\3C03iff_ham_map`5Bindx`5D)`20==`20IFF_HAM_MAP_INVALID)`20 V\4409\B00A\5006x11_display_type`20`26`20XA_X11_TRUE)`20 X`09`20\2A03\740AX11_Get_True_Color(pred,pgrn,pblu,6);\3504else\0804\710C\7306c Vmap_true_to_332\B504TRUE)\6C06`7B X\0705\750A\7603(((ULONG)pred`20*`20CMAP_SCALE6)`20`26`20iff_r_mask\B104`09`09 V`09>>`20\1406shift;\5210`7C=\520Bgrn\5216g_\5212g_\5223blu`20\5215b_\5212b_ V\5207\5106\0606`20`20if`20(new_cmap_flag)\6C09=`20the_map`5Bt\1207-`20coff`5D V`20+`20the_moff\A107`7D X\0705else\0A06`7B X\670E\540A\BF0Ared`20*`2011)`20+`20\1509grn`20*`2016)\BC04\180B\EC065));\6106 V\530D\0B08*`20CMAP_SCALE\5804\FB07gray\FE57\FF0B`7D X\580Cf_ham_\3F04indx`5D`20=`20t\4706; X`09\2F03\7904d_flag) X`09`7B X\920Ex11_bytes_pixel`20==`204) X\B90D`7B`20ULONG`20*ulp\5C03(U\0E06)o_ptr;`20\1707\7308`20o_ptr`20+=`204;`20 V\A80Celse\73182)\6604SHORT`20*usp\6705\0F07\6807\940E\0C0C\310E)(\8A07);\8B0A2 V;\8B12*o_ptr++\3B05BYTE)t\C307 X`09`7D`20\2320\4906`7D`20/*`20end`20of`20output`20*/ X\1A10x`20\1505\130Cy`20*/ X`7D X Xvoid XIFF_Shift_CMAP(cmap,csize) XColorReg`20*cmap; XULONG`20csize; X`7B X`20`20\1106i;\0B03for(i=0;i<\2006i++)\1703\2604`20`20cmap`5Bi`5D.red`20`20`20> V>=`204;\190Dgreen`20\1913blue\320B`7D X`7D X $ call unpack XANIM_IFF.C;1 - 2101524544 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_iff.h X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X Xtypedef`20struct`20 X`7B X`20LONG`20id;\0A07size; X`7D`20Chunk_Header; X X/*`20Graphic`20Stuff`20*/ X#define`20ANHD`200x414e4844 X\180AIM\180894d X\180ASQ\18075351\1809BM\480624d4\480CBODY\1806f4459 X\1808CAMG\18043414d47 X\1809MAP`200x434d4150 X\1809RN\3006524e4\300ADLTA\180444c544\900ADPAN\180550414e\180BPS\18075053 V\180CV`20\18096 X\1809\780745\780EFORM\180464f524d\1809GRAB\18047524142 X\1808ILBM\180494c4\300CIMRT\1806d5254 X\900AI`20\C008920 X X/*`20Grouping`20Stuff`20*/ X\2E08LIST\2E04c49535\460APROP`200x50524f50 X\BE09ACE`200x46414345 X\5E04Sound`20st\5B0FVHDR\4304648445\D10AANNO\430414e4e4f X\1808CHAN\1804348414e X X Xtypedef`20struct X`7B X`20UWORD`20width,`20height; X`20\1505x,`20y; X`20UBYTE`20depth;\0E08masking\1009compression;\1408pad1\0D04\4C05transparentCo Vlor\2609xAspect,`20y\0906\7D08pageWi\9605pageHe\9A06`7D`20Bit_Map_Header; X\EE09BMHD_COMP_NONE`200L X\1A12BYTERUN`201L\380FMSK_\3715MSK_HAS`201L X\1811TRANS`202L\1A12LASSO`203L\660AmskNone`20`20`20\0303\0606\05050 X\220BHasMask`20\220D1 X\220ETransparentColor`20`202 X\220BLasso`20\660F3 X\2309cmpN\8909\7E0AcmpByteRun1\7304 X/*`20Aspect`20ratios:`20The`20proper`20fraction`20xAspect/y\2C08epresents`20th Ve`20pixel X`20*`20as\4B0A\1606_width/pixel_height. X`20*\2D04For`20\3E044`20Amiga`20display`20modes:\2204\D10320`20x`20200:`2010/1 V\B403(these\5D06s`20are`20taller`20than\5004y`20\1504wide)\440C400:`2020/11 V\160664\5A09`205\160F\2C05\7007\1503`20*/ X#define`20x320x200As\EA0510\1A09y3\1A0E1 X\340D400\1A0720\340E\1A0A\340C640\4E0B`205\340A\1A0E\3410\4E0B\680B\1A0F1 X X/*`20CRNG`20Stuff\E20CIFF_CRNG_ACTIVE`20`20`20\620A\1C09REVERS\1D032 X/*`2016384`20\0804.6667`20ms\5115INTERVAL`20(273065) X\2311HDR_SIZE`208\1C12DPII_KLUDGE`2036\C206AM\C218AMG_NOP\BF030x0000000\C80FAM VG_EHB`20\220A80\2212HAM`20\220980\2213LACE\22084000 X\230DHAM6_CACHE_\D905`20`204096\23108_\230B262144 X Xtypedef`20struct X`7B X`20UWORD`20width,height; X`20\1405x,`20y\0C09off,`20yoff; X`7D`20Face_Header;\5410`20 X\5503LONG`20id;\0A07size\0C09ubid; X`7D`20Group_\463E`20UBYTE`20grpData`5B`201`20`5D;\5B09Chunk;\F415\3605op\4109m Vask\0D04\EC05w,h;\0C08x,y; X`20U\7405abstim\8304\1006relt\1007\4505interleave\1309pad0\3009bits\1A0C`5B16 V`5D\AE04Anim_Header; X#define`20\150B_SIZE`2040\CA14\5905minx; X`20\0C08\B204\0C06ax\180Aaxy; X`7D`20IFF_DLTA_HDR; X\5213\AD07dnum; X`20\0E07\E807\0E07frame; X\4D06ANSQ\4911\1A06CT_LST_STRUCT X\5C0Atype\4E04XA_ACTION`20*act\1204\3E19`20*next\7409\1C06\C01Ccn\5105\B10D V`20`20\3D0B`20*star\2505\160Dend;\6707DLTA_TABLE; X Xextern`20void\1D05Read_File();\1D11Delta5\1A193(\1A18l(\1A0A\BB05\1A09J(\1A10s V_IFF_\830F\1B05UnPackRow(); X X#define\4B05Byte_Mod(ptr,data,dmask,xorflag)`20`7B`20UBYTE`20*_iptr`20=`20ptr; V`20`5C Xif`20(\250B`5C X`20`20\13040x80`20`26`20data)`20_iptr`5B0`5D`20`5E=`20dmask\3904\280840\280F1 V`5D\281520\280F2`5D\281510\280F3`5D\281508\280F4`5D\28164`20\280E5`5D\28162 V`20\280E6`5D\28161`20\280E7`5D\280D`7D`20else`20`7B\3305register`20UBYTE\2506o Vff`20=`20`7Edmask;`20`5C X`20`20if`20(0x80`20`26`20data)`20_iptr`5B0`5D`20`7C=`20\2807else\180A`26= V\1806off;\430B40\430F1`5D\4316\1803\431720\430F2`5D\4316\1803\431710\430F3`5D V\4316\1803\431708\430F4`5D\4316\1803\43184`20\430E5`5D\4316\1803\43182`20 V\430E6`5D\4316\1803\43181`20\430E7`5D\4316\1803\430F`7D`20`7D X X X#define`20IFF_Short_Mod(ptr,data,dmask,xorflag)`20`7B`20UBYTE`20*_iptr`20=`20p Vtr\4C04\8D04\250B\A00A8000\A20F0`5D`20`5E\A209\2A0A40\2A111`5D\2A1520\2A112 V`5D\2A1510\2A113`5D\2A1508\2A114`5D\2A16400\2A0F5`5D\2A16200\2A0F6`5D\2A16100 V\2A0F7`5D\2A16080\2A0F8`5D\2A1740\2A0F9`5D\2A1720\2A0F10\2B1810\2B101`5D\2B170 V8\2B102`5D\2B184`20\2B0F3`5D\2B182`20\2B0F4`5D\2B181`20\2B0F5`5D\2B0D`7D`20els Ve`20`7B\3605register`20UBYTE\2506off`20=`20`7Edmask;`20`5C X`20`20if`20(0x8000`20`26`20data)`20_iptr`5B0`5D`20`7C=`20\2A07else\180A`26= V\1806off;\450B40\45111`5D\4516\1803\451720\45112`5D\4516\1803\451710\45113`5D V\4516\1803\451708\45114`5D\4516\1803\451840\45105`5D\4516\1803\451820\45106 V`5D\4516\1803\451810\45107`5D\4516\1803\451808\45108`5D\4516\1803\451940\450F9 V`5D\4516\1803\451920\450F10\4617\1904\471910\47101`5D\4717\1903\471908\47102 V`5D\4717\1903\471A4`20\470F3`5D\4717\1903\471A2`20\470F4`5D\4717\1903\471A1 V`20\470F5`5D\4717\1903\470F`7D`20`7D X X $ call unpack XANIM_IFF.H;1 - 2102992618 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_pfx.c X`20*\1204Copyright`20(C)`201992,1993`20by`20Mark`20Podlipec. X\2D03All`20rights`20reserved\1804\1B04This`20software`20may`20be`20freely`20co Vpied,`20modified`20and`20redistributed X\4203without`20fee`20provided`20that`20this`20cop\A907notice`20is`20pr\8607 V\4004intact`20on`20all`20copies`20\6A04\7709\1406\B20Aer\4605no`20warranty`20o Vr`20other`20guarantee`20of`20fitness\0B04\8C05\E808\4B04`20It`20\8B05\B207sole Vly`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B204liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20"xanim_pfx.h"\1711iff.h" X XLONG`20Is_PFX_File(); Xvoid`20PFX_Setup_CMAP\170DExtract_Images(); XUL\4704UTIL_Get_MSB_Long(\1B16UShort(); XXA_CHDR`20*ACT_Get_\6C08XA_ACTION`20\1B09Action\8909ACT_\A006Mapped\190DAdd_CH VDR_To_\380A X Xstatic\C505PLAY_H\7C04pfx_play_stack,*\100Crt\100Blcur; X X\4507\BC09pfx_chdr; X\1A07ColorReg`20pfx_cmap`5B256`5D; X X#define`20PFX_DEFAULT_TIME`2017 X\3C07LONG\3805time\5209PFX_RCHG\B10Aimages\8E0AUL\3908imagex,\0B09y,\0B09c, V\0B09d; X X/* X`20* X`20*/ XL\3D04Is_PFX_File(filename) Xchar`20*\1008; X`7B X`20`20FILE\1404n;\0D03\7A06data; X X`20`20if`20(`20(fin=fopen\4A09,"r"))`20==`200)\2703\4704`20fprintf(stderr,"PFX V:`20can't`20open`20%s`5Cn",f\8C08\6E04`20TheEnd(\0D05`7D X\0503data`20=`20UTIL_Get_MSB_Long(fin);`20`20/*`20read`20past`20size`20*/ X\3721\3608magic`20\3205fclose\2006\E907\4506=`20pfx_RCHG)`20return(TRUE)\2604 V\1007FALSE); X`7D X Xvoid`20PFX_PUSH_PLAY_HDR(p) XPFX_P\1007`20*p; X`7B\4103\150Etemp; X\1703temp\BF03(P\1F0D)`20malloc(sizeof\1E0D))\B608\3C06=`200)`20TheEnd1(" V\9111:`20\4B06`20failed`5Cn"\4005temp->type\7E03\0A07\180Adata\1806data\180Aco Vunt`20=`200\130Anext\120Eloop\1208\A704pfx_play_start\B107\1510\3C05\3204else V\1E0Alcur\6409\2308\1E0D\1809 X`20DEBUG_LEVEL2`20fprintf(stderr,"PUSHING`20%c%c%c%c",`20((p\F906`20>>`2024) V`20`26`200xff),\6403`20`20\1E0D16\1E0A\1A0E8)\1913\1409`20); X`20\981D`20data=%lx`20ptr=%lx`5Cn", X`09`09`09`09`09p->data,(ULONG)\F70D); X X`09/*`20stack`20knows`20where`20it's`20duplicate`20is`20on`20play`20list`20*/ V\DE03p->loop`20=`20p\550C;`20`20 X\1D05next\1D0Cstack; X`20\120F\2304; X`7D X XPFX_PLAY_HDR`20*PFX_POP\1209() X`7B\3C03\250Ep; X\4F03\6515if`20(p`20!=`200)`20\7112\110D\AB06\3504return(p);\9108RCHG\910AAllo Vc_RCHG\8F0B\230Atemp; X\1703temp\6703(P\1F0D)malloc(sizeof(\1D0C))\B408\3B06\B705TheEnd1("P\7B0D`20m V\4705`20error`5Cn")\3B04temp->orig\78030;\1209dest\120Elen`20\240Fata`20\120Dn Vext\1208return(temp); X`7D X XPFX_FRAM\D506\9C0AFRAM() X`7B\3403\230Etemp\5C08\5603(PFX_\1E0A)malloc(sizeof(\1D0C))\3704if`20(\3B06 V\9203)`20TheEnd1("P\7A0D`20malloc`20error`5Cn")\CE0Aframe`20\E10Dtime`20\F42B Xvoid`20PFX_Read_File(fname,anim_hdr) Xchar`20*fname; XXA_ANI\E307\2408; X`7B X`20`20FILE`20*fin\6A04PFX_RCHG_\2904\1604rst_rchg,*cur_rchg\2719parm\2706parm V\2708FRAM\7706\2606fram\2606fram\2604ULONG`20pfx_max_\6308\160Axflag,pfx_yf V\0A08cf\0A08rchg_flag\350Ad,chid,chle\D505\1606frame_count;\9C07PLAY\9C06pfx_p Vlay_temp; X X\2103\1309stack`20=`200;\160Frt\1611lcur`20`20\1605\1707chdr\270Ctime\1003PFX_ VDEFAULT_TIME\1F08images\310Cimagex`20\1210y`20\1210c`20\1210d`20\8A08first_rch Vg\1303cur\0B08\3005\1D06parm\1D07\0B07\4D09max_\310Cpfx_xfla\1104FALS\BE09yf V\1513cf\150D\1603if`20(`20(fin=fopen(fname,"r"))`20==`200) X`20`20`7B X`20`20\9B03printf(stderr,"Can't`20open`20PFX`20File`20%s`20for`20reading`5Cn", Vfname);\4205TheEnd()\0E04`7D X\0503d`20=`20UTIL_Get_MSB_Long(fin);\2F03/*`20probably`20version`20number`20*/ V X`20`20chid\411B/*`20get`20chunk`20id`20\3407len`20\3527length`20\3905while(c V\7305=`20pfx_RCHG) X`20`20`7B X\DC04LONG`20ret;\0E05UL\0F04orig,dest,garb\1A06PFX_RCHG_HDR`20`20*tmp_rchg; V\3706BYTE`20*data; X\1205orig\AF10UShort\B106\2505dest\2521garb\F91B\FA04\6D05ptr`20or`20id`20 V\0603??\FE06\3F25\8705\3F2B\A30C\4004always`200xffff`20\3907DEBUG_LEVEL1`20fpr Vintf(stderr,"RCHG`20%lx`20`20<%ld`20%ld>`5Cn",chlen,orig,dest);\4A05chlen`20-= V`2014; X\1205data\9503(UBYTE`20*)malloc(chlen\3507if`20(\2706=`200)`20TheEnd1("PFX: V`20rchg`20\1E05\3A06`20failed`5Cn"\3E07ret`20=`20fread((char`20*)(data),1, V\A606fin);\6B09\3104!=\AB06\6E1Aread\6C0D\4005tmp_\2405=`20PFX_Alloc_RCHG( V\6107\2108->orig\2703orig;`20\1A03\1F0Fdest\1F03dest\1F14len\1E03chlen\3E15 V\A304=`20data\9A07\DA04first_\A006=`200)`20f\110B`20cur\0B08\4908\B406else V\0905`7B X\0604`20`20\2A08->next\3011\210A\1B11`7D X\8C08\FF05>`20pfx_max_rchg)`20\0E0C\3C03orig\3806\3204dest\3220dest\F107chid V\1203UTIL_Get_MSB_Long(fin);`20/*`20get`20chunk`20id`20*/\3607len`20\3727lengt Vh`20\3B05`7D X\0503while(\7A06=`20pfx_PARM) X`20`20`7B X\5E04LONG`20ret\D506UL\0F04pnum,res1,res2;\1A05PFX_RCHG_HDR`20`20*tmp_parm; V\3706BYTE`20*data\EB07pnum\B410UShort\B607\B704parm`20number`20\ED07res1\3821? V??`20\300A2`20\301D\310Fchlen`20-=`206\AA07data\4203(U\C406)malloc(chlen); V\2305if`20(\2706=`200)`20TheEnd1("PFX:\C506\1E05\3A06`20failed`5Cn"\3E07ret V`20=`20fread((char`20*)(data),1,chlen,fin);\6B09\3104!=\AA06\6E1Aread\6C0D V\4005DEBUG_LEVEL1`20fprintf(stderr,"PARM`20%lx`5Cn"\7906\7507\350B2`20\3510 V\2104`20%s`5Cn",data)\3306`20 X\0504tmp_\9205=`20PFX_Alloc_RCHG(\2707\2108->orig\2703pnum\1B10dest\1B03res1 V\1B10len\1A03chlen\3611ata\1C03data\FC07if`20(first_\9406=`200)`20f\110B`20cur V\0B08\4908\5706else\0905`7B X\DE05\2A09->next\3011\210A\1B11`7D X\0705chid\1C03UTIL_Get_MSB_Long(fin);`20/*`20get`20chunk`20id`20*/\3607\F206 V\3725length`20\3B05\7605if`20(\7805!=`20pfx_STMT)\1803`7B`20\5D05TheEnd1("PFX: V`20confused`5Cn")\BA04`7D X X\0603first_fram\8603cur_\0B070;\1D04rame_count`20\1305\1403pfx_rchg_flag`20= V`20FALSE;\1903while(\D106`26`26`20!feof(fin)`20)\9304\EF07id`20\EE1A`20chlen-= V4;\F908script`20id`20*/ X\4305\F409==\8C05A_B)\1905\6206`20`20PFX_PLAY_HDR`20*p\9B04\1704p`20=`20PFX_PO VP\1F09()\1E08\5604p`20==`200)`20TheEnd1("PFX`20Play`20List:`20stack`20empty V`20err1`5Cn")\400Dfx_play_temp\4C2E2`5C\4C0BDEBUG_LEVEL1`20fprintf(stderr,"POP V`20%c%c%c%c`5Cn",`20 X`09((p->type`20>>`2024)`20`26`200xff),`20\1A0D16\1A0B\360F8)\3513\1409`20) V\E70D\3707==`20pfx_REPE)`20/*`20point`20b\D804to`20just`20after`20REPE`20*/ X\4306`7B X\0806\4D09loop->next`20!=`200)\5605play_tem\2007`20=`20p\2A0C\9008`20`20else V`20TheEnd1("PFX_Loop:`20hosed`5Cn"\BB09`20`20DEBUG_LEVEL1`20fprintf(stderr," V\2003\6905to`20%c%c%c%c",`20 X`09`20((\7A0D\FD07>>`2024)`20`26`200xff), X\281B16\280A\511D8)\5021\2209`20)\D82Acount=%lx`5Cn",p\550Edata\4B09`7D X\0806free(p\1707\1506else\0905`7B X\2406pfx_play_temp`20=`20(PFX_PLAY_HDR`20*)malloc(sizeof(\1D0C))\7008if`20( V\480F=`200)`20TheEnd1("PFX:`20\4A06`20P\600Cerror`5Cn"\4B09\470D->type\9503chi Vd\2217data\22030;\1F16loop\1F1Bnext\1F0Cswitch(chid) X\1306`7B X`09case`20pfx_INIT: X\100AGLOC\100FV:\100BREPE: X`09`09PFX_PUSH_\F908(p\880C); X`09`09break;\3D0BBITP\4D0CXDIM\100CYD\100EDURA\100CHIGH\100CFLAC\100CCOUN V\100CINTE\100CAUST\100CSPDU\100DLWD:\B903\CB0D->data`20=`20UTIL_Get_MSB_Long(f Vin);`20chlen-=4;\3A03PFX_PUSH_PLAY_HDR(\4C0D);\2403break;\770BPALL\D70DRAM: V\100CIL\C704\9724UShort\990E2;\992Fdefault:\1303fprintf(stdout,"PFX`20read: V`20Unknown`20STMT`20chid`20%lx`5Cn",chid\4F05TheEnd()\5B0B`20`20`20`20`20`20 V`7D X\0606\0403`20/*`20end`20of`20while`20for\6105ing`20play`20list`20*/ X X`20`20fclose\DD06\0F03/*`20free`20up`20Play`20List`20stack`20just`20in`20case V`20it's`20not`20already`20freed`20up`20*/ X`20`20`7B X\8E04PFX_PLAY_HDR`20*p\AB06do\0705\2206`20`20p`20=`20PFX_POP\2C09(); X\1E06if`20(p`20!=`200)`20\1307\3908\BB03ree(p\2C09\1103printf(stderr,"PFX`20Wa Vrning:`20\F90Adifferent`20than`20expected`5Cn"\4C09`7D X\0605`20while\8208\1D04`7D X X X/*`20loop`20through`20\5A0Ato`20create`20frame`20\1505*/\3803pfx_play_lcur`20= V`20\1009start;\2203\6B07\280D\7705\1C03\F405ULONG`20garb; X\9F05chid\4B0Clcur->type\C706switch(chid\4504\4707\3904ase`20pfx_INIT: X\150FGLOC\1514V:\1510REPE:`20/*`20REPEAT:`20for`20now`20must`20be`20followed V`20by`20COUN`20*/ X\440FFILE\4405NOTE:`20this`20is`20comment`20only\3604`09`09break;\3F10BITP V\3F06um`20of`20Bitplanes`20\3505pfx_imaged`20=`20pfx_play_lcur->data; X\5918XDIM\5905X`20size\4F0Fx`20\4F19pfx_xflag`20=`20TRUE\631AYD\6307Y`20\6313y V`20\631Dyf\6324HIGH\6305???`20*/ X\1F0FFLAC\1F1BINTE\1F05Interlace`20\7605\2A12AUST\2A05don't`20know\CF06\9716DU VRA\7806Duration`20between`20frames`20\3D05garb\E303pfx_play_lcur->data;`20if V`20(g\2005=`200)`20g\2B061;\3703pfx_time\1003\1705*`20PFX_DEFAULT_TIME\2604 V\9A16SPDU\9A05speed`20up`20by`20this`20much`20\9720\7E0C+=\7F33LWD:\7F05low V`20down\803A-=\801Cif`20(\2B09<=`200)`20\0F09=`201;\A319PALL\A305CMAP`20parm V`20id\9924PFX_Setup_CMAP(garb,first_parm);\BC07cflag`20=`20TRUE\861ACOUN: X\7320\3304/*`200x3b9ac9ff`20for`20example`20is`20mouse`20button\C406if`20( V\5505>=`200x100)`20g\64061;\A207\690Bcount`20=`20garb\AD1AFRAM\AD22\7A04first_ Vfram`20==`200) X\C404\150C`20cur\0B08PFX_Alloc_FRAM()\4504else\0703`7B X\3904\2C08->next\3217\270A\5E0B\3206\1F04`7D X`09`09\160Aframe`20\F00A\1A0Atime`20\1A03XA_GET_TIME(pfx_time\6805frame_count+ V+\1104break; X`20`20`20\0303default:`20 X\2A03printf(stdout,"PFX`20f\7905lst:`20Unknown`20STMT`20chid`20%lx`5Cn",chid V\6B05TheEnd\DF06\660C`7D`20/*`20end`20switch`20*/\1806if`20(\0703(pfx_xflag==T VRUE)`20`26`26`20(pfx_yf\150B\B207\0303\1F08cf\3413rchg_flag==FALSE)) X\3505`7B X\3E07\250D`20=`20TRUE\A907`20`20PFX_Extract_Images(anim_hdr,first_rchg,pfx_ma V\4806); X\E606\D50Apfx_play_lcur->loop`20!=`200\C508`7B`20\700CPLAY_HDR`20*p;\A509 V\9903\4613\2009DEBUG_LEVEL2`20fprintf(stderr,"PFX`20frame`20l\7A04cnt=%lx`5Cn" V,p->count)\690A\1207--\1309\C205\1707`20>\B604\8A0D\9A04;`20/*`20goto`20COUN V`20*/ X\3A05`7D`20 X X\5606\3110\CB0Enext\6F05`7D`20/*`20end`20of`20while`20STMT`20*/ X\1E04/*`20Free`20up`20play`20list`20\6C06`7B`20\6906PFX_PLAY_HDR`20*p\C407 V\4B05(p\7508start)\3207`7B X\FA08\980Cstart\3E07\BF0Bstart\2811\C10B\2E04free(p);\1006`7D X\0505 X`20\6905PFX_FRAM\A007tr_fram,*tmp_fram\3505ULONG`20i;\F505anim_hdr->frame_ls V\8104 X`09(XA_FRAME`20*)malloc(sizeof(\1908)`20*`20(frame_count`20+`201)\9706if`20( V\5915=`20NULL) X\CB07`20TheEnd1("PFX_ANIM:`20couldn't`20\7606`20for`20fr\4207`5C0")\B806DEBUG_ VLEVEL3`20fprintf(stderr,"PFX\3406`20List(%ld):`20",\AD0B\A806ptr_fram\F203firs Vt_fram\1A05for(i=0;`20i<\360B;`20i++\BE05`7B`20`20/*`20frames`20start`20at`201 V,`20nothing`20is\11040`20*/\ED06anim_hdr->\CD09`5Bi`5D.act`20\7E03pfx_images V`5Bp\9407\2907\2305\9305\4419time`20=`20p\3909time; X\3406DEBUG_LEVEL3`20fprintf(stderr,"<%ld>",\730F);\3B06tmp_fram\5C0B\1A07 V\0F08\760Dnext\2007free(t\3F07\4F06`7D X\0503if`20(\3C09!=`200)`20\3107\990F`20FRAME`20stuff:`20\3309%lx`20non_zero V`5Cn",(ULONG)p\2007\6A06\F21D`5Cn"\2606anim_hdr\F407_lst`5Bframe_count`5D.time V`20=`200\2E26act`20\2E13loop_fram\4B14last\1D09\4E0B`20-`201\2B0Fimagex\2703pf Vx_\0D06\2214y`20\220By;\2213c`20\220Bc;\2213d`20\220Bd; X`20`7D X X`20`7B`20/*`20FREE`20PARM`20STRUCTURES`20*/\4404PFX_RCHG_HDR`20*tmp,*tmp1; X\1D04if`20(\5209s`20!=`200)`20free\160B);\6204free`20up`20image`20structures V`20\6606tmp\9D03first_parm\BF05while(tmp)`20\0F04`7B`20\0604\2C051`20=`20tmp; V`20\1209\1106->next\3D05`20`20free(tmp1->data);\170F\1106`7D X\0303`7D X X`20 Xvoid`20PFX_Extract_Images(anim_hdr,\9F06rchg,pfx_max_rchg) XXA_ANIM_HDR`20*a\2F07; XPFX_RCHG\1806\3E0A; XULONG`20\450C; X`7B X`20`20\1807size,i\9F04UBYTE`20*data,*pic;\1403\570Etmp\4107\1B03psize`20= V\5A05imagex`20*`20\0D09y;\2405\760B++;`20`20/*`20add`200`20up`20front`20*/ X\2806images`20=`20(P\750D)malloc(\4C0C\6A03sizeof\2C0D))\B304if`20(\500C=`200) V`20TheEnd1("PFX:`20\5206`20failed`201`5Cn"\3A05for(i=0;`20iorig\3906dest\1B0Ddest\1B06len`20`20\1B0C\9409d Vata\350Eata\1B06DEBUG_LEVEL2`20fprintf(stderr,"PFX`20Extracting`20%ld`20%ld V`5Cn",\F909); X X X`09/*`20new`20image`20*/ X\5A04if`20(`20(pfx_images`5Borig`5D.\DC06=`200)`20`7C`7C`20\200Cdest\200B`20) V`20)\4905`7B X\0604`20`20pic`20=`20(UBYTE`20*)malloc(`20XA_PIC_SIZE(psize)`20)\DC06\8406 V\3705\7005TheEnd1("PFX:`20\4006`20failed`202`5Cn"); X X\380A\A90Bmemset((char`20*)(pic),0x00,psize)\6F08else\0B07\B508\8407\E60Aorig V\E60B)`20\2909`7B`20\0B09\3603\EB03orig;`20\2B06`20dest;\0605\0D03i;\2B09`7D X`09i\621E\610C`09`20`20fprintf(stderr,"PFX\6406doesn't`20exist`20yet.`20faking V`20it.`5Cn"); X\3F03memset((char`20*)(pic),0x00,psize)\9A0Delse\3204cpy(\320E\0E0A\B910data), V\4D0E`7D`20 X X\0A06dmask`20=`200x01;\1407while(len)\1107`7B X\8408UBYTE`20*ptr\980Ab_cnt`20=`20(ULONG)(*data++)`20<<`208;`20\2108`7C=\2211 V\1D03len-=2;\4D09DEBUG_LEVEL3`20fprintf(stderr,"b\6A07%ld`5Cn",b_cnt\D409 V\B80B`20`26`26`20\1D06\1C09\C30A`20`20offset\B21A\2007\B126`20`20a_\9606\4E17 V\2007\4E28DEBUG_LEVEL4`20fprintf(stderr,"<%lx`20%lx>`20",\A606,a_cnt)\420Cptr V`20\6D04BYTE`20*)(\7708pic)`20+`20(\DF07*`208)); X`09`20`20for(i\33030;`20i`20<=`20a_cnt;`20i++)\1F04`7B X\5C0A`20`20d`20\EA1Ad`20\E61E\4D03`20`20IFF_Short_Mod(ptr,d,dmask,1\C70D\C906+ V=`20pfx_imagex;\1F0B`7D X\0C0Ab_cnt--\1F0A\1D0ADEBUG_LEVEL4`20fprintf(stderr,"`5Cn`5Cn"\750Bdmask`20<<= V`201;`20`20/*`20move`20to`20next`20bitplane`20*/ X\670Eif`20(b_cnt`20!=`200)\6811\1C06nonzero`5Cn"); X\3A07\DC09s`5Bdest`5D.orig`20=`20dest\9808\2411data\2403pic;\2307\E60B2`20 V\7E10New`20Image\4A0Fet`5D`20=`20%ld`5Cn",dest); X\D605\FA04new`20image\EE04\1705tmp1_rch\9F04tmp_rchg\3106\0E08\190B->next;`20 V\4A03move`20to`20next\530A\3804free(t\5708->data);\3404free`20up`20\5605chunks V\3516); X\1603\B205end`20of`20while\3905_hdr's\C007for(i=1;`20iorig`20==`20\DB07)`20\7E0DTRUE\7D04`20`20else\840C\420Anext V\2404`7D X\0503\5D04\420C\C107)`20TheEnd1(stderr,"PFX`20CMAP:`20not`20found`5Cn")\D105pf Vx_imagec\690Dlen--;\200E/=`203\1305tr\2C0Ddata\1804for(i=0;i<\350A;i++) X`20`20`7B X\D904ULONG`20d;\0D05d`20=`20(*ptr++)`20-`2048;\D205d`20>`209)\1E03-=`207;`20 V`20`20/*`20ascii`20to`20integer`20*/\4305pfx_cmap`5Bi`5D.re\5104\3803`26`200x0 Vf\6455green`20\6660blue\6512DEBUG_LEVEL2`20fprintf(stderr,"`20%ld)`20%lx`20 V\0404%lx`5Cn", X`09i,\580Cred,\CE11\120Dblue);\6F03`7D X\9307hdr`20=`20ACT_Get_CMAP(p\3107,pfx_imagec,0\0D0D,4,4,4); X\4704`20 $ call unpack XANIM_PFX.C;1 - 1950211486 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_pfx.h X`20*\1204Copyright`20(C)`201992,1993`20by`20Mark`20Podlipec.`20\2E04All`20 V\2E05s`20reserved. X\4906This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\AA07notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X X#define`20pfx_INIT`200x494e4954\1C0DGLOC\1C0474c4f43 X\1C0CBITP\1C042495450\1C0DXDIM`200x5844494d X\1C0CYD\1C0694\1C12GLOV`20\700856\1C0DDURA\1C044555241 X\1C0CHIGH\1C048494748 X\1C0CFLAC\1C0464c414\C40EPALL\8C040414c4c X\1C0CREPE\1C042455045 X\1C0CCOUN\540434f554e X\700DRA\E004465241\E00FFILE\8C0694c4\540EA_B`20`200x29000a00\1C0DINTE\380494e5 V44\380FUST`200x41555354 X\1C0CSPDU\C4043504455\1C0ELWD`200x534c5744 X X\FD0DCHG`200x52434847 X\1C0CPARM\1C04041524\E10ESTMT\710644d54 X Xtypedef`20struct`20STRUCT_PFX_RCHG_HDR X`7B X`20ULONG`20orig,dest,len; X`20UBYTE`20*data; X`20XA_ACTION`20*act; X`20\531A`20*next; X`7D`20\160C; X\8E1BFRAM\8E0Eframe;\0E08ti\0D05\391A\740E\1608\741DPLAY\740Etype,d\F006\1105c Voun\EC16\3D08`20*loop\231F\9B0C\1608; X X $ call unpack XANIM_PFX.H;1 - 1093948765 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_set.c X`20*\1204Copyright`20(C)`201992,1993`20by`20Mark`20Podlipec. X\2D03All`20rights`20reserved\1804\1B04This`20software`20may`20be`20freely`20co Vpied,`20modified`20and`20redistributed X\4203without`20fee`20provided`20that`20this`20cop\A907notice`20is`20pr\8607 V\4004intact`20on`20all`20copies`20\6A04\7709\1406\B20Aer\4605no`20warranty`20o Vr`20other`20guarantee`20of`20fitness\0B04\8C05\E808\4B04`20It`20\8B05\B207sole Vly`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B204liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20"xanim.h"\1310_set\1714iff.\170C X XLONG`20Is_SET_File(); XSET_FRAM_HDR`20*SET_Init\1309S(); XUBYTE`20*SET_Read_BACK(\1813FACE\5408SSET_\5409Alloc_\1408\2416Get_SSET\1E08BA VCK\4210\1408\2416Get_\9C08\4213dd_Black(); Xvoid`20SET_TheEnd\13131(\140CExtract_Directory(\1E0CRead_\BC08\1609Add_SETTE V\AF05\170D\A608\150DTIME\5713ound_IFF\3011CHDR\150DFree_Stuff(); X XULONG`20UTIL_Get_MSB_Long(); X\1A12Short(); X\3613US\1D08XA_ACTION`20*ACT_Get_Action\8809ACT_Setup_Mapped\1909IFF\D106BMHD V\1613ODY(\1611CMAP_0\18171(\180CShift_CMAP\170DPrint_ID(); X XXA_CHDR\BD0A\2F08\F506CMAP_Get_Or_Mask\D50DAdd_CHDR_To_\F40FUTIL_Create_Clip V\6C05 Xstatic`20ColorReg`20set_cmap`5B256`5D;\1F08\9309set_chdr;\1A08SET_BACK_H\1F08b Vack_start,*\1009cu\330A\C706\1B09num,set_sset_num\5B0DFRAM\5B0Aframes\4913fram V\3C11SSET_\3C09sset_\970Bsset_\970CXA_ACTION`20*work_act\1C14back_\1C0C\860Ati Vme\1709\1609xscroll_flag,set_\1108len,set_ys\210F\1108len\4F12back_xpos,set_ V\0E05ypos\8F13back_\5C08ram;\4C11sset_cur_num,\1109xoff\0E0Ayoff\5D13multi_fla Vg\1D13or_mask; X X\1B07char\9406uff`5B512`5D\3609\1B0D1`5B64\1B0ABit_Map_Header`20bmhd;\5309 V\6E0Aimagex,set_imagey,\0B09c,\0B09d; X X Xvoid`20SET_Print_CHID(chid) XU\4F05chid; X`7B X`20`20\1006d; X`20`20d`20=`20(chid`20>>`2024)`20`26`200xff;`20fputc(d,stderr)\2C1116\2C2A`208 V\2C21\2B05\2509`09`20`20`20\2913\1306'`20',\1509`7D X XSET_BACK_HDR`20*SET_Get_BACK(back_num) XU\F305\1008; X`7B X`20`20\390Etmp; X X`20`20tmp\9003set_back_start;\1803while(tmp) X`20`20\3F04`20`20if`20(tmp->num`20==`20\6F09`20return(tmp)\3C04\5608\2D06ex V\5105`7D X\D204rintf(\D006,"\BE0C:`20invalid`20\5808`20%lx`5Cn",\6809\4704SET_TheEnd() V\1004\7B070); X`7D X XS\E40DSET_Add_Black(anim_hdr) XXA_ANIM\2506\1708; X\E604UBYTE`20*pic\6D08\4F0Atmp\1504XA_ACTION`20*act\1204ULONG`20psize; X X\FF03`20/*`20if`20black`20already`20exists`20*/\2203if`20(set_back_start`20!= V`200) X`09i\1A11->num`20==`200xffff)\F308\260E);\7A04psize`20=`20set_imagex`20*\0D0Ay V;\7B07work_act\5605) X`20`20\FB04\FD09t_\FF07`20`20t_pic\5003(U\1B06)malloc(`20XA_PIC_SIZE(psize) V`20); X\3304\6004\3707\5D04`20SET_TheEnd1("SET`20a:`20\4606`20failed`5Cn"\3B07memset V\3E06,`200x00,`20\D206\2107\B305`20ACT_Get_Action(anim_hdr)\2406ACT_Setup_Mapp Ved(act,t_pic,set_chdr,0,0,set_imagex\0B0Ay, X`09\18160,TRUE,FALSE\0606\6F07work_a\9805act\1404`7D X\0503tmp`20=`20(SET_BACK_HDR`20*)malloc(`20sizeof\1E0D)`20\5105if`20(\3C05= V`200)`20SET_TheEnd1("SET:`20back`20malloc`20fail`5Cn"); X\7106->num`20=`200xffff;\1508xsize\1703\0D07creen`20=`20\E80A\2A09ys\2A0Bys V\2A11y;\5409pos`20\2908\0C060;\1D08back_act\150Dcs\5C06\120Bhdr`20\120Dnext V\7007back_start;\1E03\120E\7906\F605pic`20=`20(UBYTE`20*)malloc(`20XA_PIC_SIZE V(psize)`20);\2F03if`20(\3305=`200)`20SET_TheEnd1("SET_Add_Black:`20\4A06`20fai Vled`5Cn"); X\4003memset(`20pic,`20set_or_mask,`20p\DF05\6505\FA06ACT_Get_Action(anim_hdr V\2205tmp->back_\2C06act;`20\1803ACT_Setup_Mapped(act,pic,set_chdr,0,0,set_imag Vex\0B0Ay, X`09\18160,TRUE,FALSE\0606\8305return(set_back_start); X`7D X`20`20 X XSET_BACK_HDR`20*SET_Alloc_\1408() X`7B\2903\270Etmp; X\3F04\E105\D703(S\200D)malloc(`20sizeof\1E0D)`20\9605if`20(\3C05=`200)\5F05The VEnd1("SET:`20back`20malloc`20fail`5Cn"); X\7106->num`20=`20\D309num\5404\100C++\1204tmp->xsize\2F030;`20`20\1206ys\1208 V\240Acreen`20\2605\2407\120A\2609pos`20\4907\2607\1208\2308back_act`20\150Ccs V\7010chdr\110Dnext\1106\1203if`20(\CD09start`20==`200)`20\1510\3C04\4304else V\1D0Acur-\5108\2107\1C0C\160Areturn\6B0Acur); X`7D X XSET_SSET_HDR`20*SET_Get_SSET(sset_num) XULONG`20s\1007; X`7B X`20`20\390Etmp; X\E206\7503set_sset_start\8004while(tmp) X`20`20\3F04\FB06tmp->num\F504\6F09\AD08tmp)\3C04\5608\2D06ext\1504`7D X`20`20fprintf(stderr,"\BE0C:`20invalid`20\5808`20%lx`5Cn",\6809\4704SET_TheEnd V()\1004\7B070); X`7D X XS\E40DSET_Alloc_\1408() X`7B\4507\270Atmp; X\1603\B506(S\1D0D)malloc(`20sizeof\1E0D)`20\8305if`20(\3C05=`200)\A10B1("SET: V`20set`20malloc`20fail`5Cn"); X\7006->\E804=`20set_\E708\5304\100C++\1204tmp->faces`20=`200\1209next\110Dface V_num\1506\9E07\4F09start`20=\A905\1510\4004\4704else\1D0Acur-\6608\2107\1C0C V\160Areturn\6B0Acur); X`7D X X/* X`20* X`20*/ XLONG`20Is_SET_File(filename) Xchar`20*\1008; X`7B X`20`20FILE\1404n;\0D03UL\3D04d1,d2;\D708`20(fin=fopen\4B09,"r"))\E306\2703 V\4804`20fprintf(stderr,"SET:`20can't`20open`20%s`5Cn",f\8D08\6F04`20TheEnd( V\0D05`7D X X`20`20d1\EC03UTIL_Get_MSB_Long(fin);`20`20/*`20read`20past`20size`20*/ X\35032`20\351A\3408magic`20\3005fclose\2006\0F03/*`20check`20for`20"xSceneEd"i Vtor`20\3005if`20(`20(\9B04=`200x78536365)`20`26`26`20(d2`20=\16046e654564)`20) Vreturn(TRUE\6014MovieSe"tter\60164d6f76\600F9655\7605\6011\1007FALSE); X`7D X Xvoid`20SET_Read_File(fname,anim_hdr) Xchar`20*fname; XXA_ANIM_HDR`20*a\2407; X`7B X`20`20FILE`20*fin\6A04ULONG`20op;`20\0D09cur_fram_num\230A\1609cnt;\1609exit_f Vlag; X X`20`20set_multi_flag`20=`20TRUE\2D04\530C`20`20\19030;\160Ccnt\160Awork_act V\1203\1308back\130Fset_\5212\1608es\2B04\1603(SET_FRAM_HDR`20*)\2609back_start V`20\3C0Bback_cur\520Eback_\6811sset_s\4210sset_\4211sset_\4211xscroll_flag V\1814len`20\170Bys\2F16\1808\2F0Fback_xpos\1511yp\1513\5D08ram`20=`201;\1C03/* V`20default`20stuff`20if`20no`20background`20*/ X\4306imagex\3903352;\140Cy`20=`2024\6B09imaged`20=`205;\1203bmhd.compression V\1803BMHD_COMP_BYTERUN;\2808maskin\FA04BMHD_MSK_NONE; X\5B07or_mask\2003CMAP_Get_Or_Mask(1`20<<`20\7F0A);\3404if`20(`20(fin=fopen(fna Vme,"r"))`20==`200)\2403`7B X`20`20`20`20fprintf(stderr,"Can't`20open`20SET`20File`20%s`20for`20reading`5Cn V",fname); X\4204TheEnd()\0E04`7D X`20 X`20`20DEBUG_LEVEL1\6111Reading\5E05fi\5E05:`5C\530Dexit_flag`20=`200\1104while V(!feof(fin)`20`26`26`20!\2609\CC09XA_ACTION`20*act; X\9E05op\4603fgetc(fin)\1607switch(op)\0F05\3F05`20`20case`20'a':`20`20/*`20256 V`20ascii`2032\0907IFF`20stuff`20`20Background`20Image`20*/ X`09`7B X`09`20\D904_BACK_HDR`20*tmp_back_hdr; X\1F03UBYTE`20*pic\0F05fread((char`20*)set_buff,1,256,fin);`20s\1507`5B256`5D V`20=`200;\3904DEBUG_LEVEL1`20fprintf(stderr,"`20a)`20%s`20\D403",\3F08); X\70191,1,32\700F1`5B32\7028`20`20%s`5Cn\6D0A1)\3505\FE0C\4A03SET_Alloc_BACK_HD VR()\2805if`20(set_multi_flag`20==`20FALSE) X`09\2103pic`20\4006Read_BACK(fin,t\610B\4B06else\0804`7B X\0503`20`20FILE`20*fnew\1E05`20`20SET_Extract_Directory(\B808\C110\9B06`20(fne Vw=fopen\2B0A"r"))`20==`200)\2B06\7307`20`20fprintf(stderr,"Can't`20open\7F04 V`20File`20%s`20for`20reading`5Cn"\7B09\7A08\AC06TheEnd()\1507`7D X\0705pic`20=`20SET_Read_BACK(fnew,tmp_back_hdr)\3407fclose(fnew\1306\4505 V\D904\4705\C104\6B0B1("SET`20read`20a)`20failed"\3906\3404work_act\FA0A\F807UB VYTE`20*t_pic\7A07t_pic\A903(U\1C06)`20malloc(`20 X`09`09XA_PIC_SIZE(t\B70B->xsize`20*`20\160Eysize)`20\D608\8C04\6007\C216a: V\6E07\C407`5Cn\C607`20`20memset\3F06,`200x00,`20\842E\C103\4904act`20=`20ACT_G Vet_Action(anim_hdr\6E08ACT_Setup_Mapped(act,t_pic,set_chdr, X`09`090,0,\8413\140Fysize, X`09\5904\0404set_imagex,set_imagey,0,TRUE,FALSE\0606); X\3308\9408Add_CHDR_To_\BB08ct,t\700Dchdr\C908work_a\F305act\1505`7D X\0503\1306ACT_Get_\4B08nim_\3D09\550Eback_\490EACT_Setup_Mapped(act,pic,set_ch Vdr, X`09`090,0,\4A0Exsize,\140Eysize,\B306\0404set_imagex,set_imagey,0,TRUE,FALSE V\0606); X\3308\9006Add_CHDR_To_\D608ct,\9208\DA04`7D X`09break\3B07case`20'b':`20`20/*`20256`20ascii`2032\0907IFF`20stuff`20`20Faces V`20*/ X`09`7B\AC04SET_SSET_HDR`20*tmp_sset_hdr; X`09`20`20\110C`20=\2E05Alloc_\3408(set_buff\9704`20`20fread((char`20*)\1C08,1, V256,fin);\A204disk:directory`20name`20\9204`20`20\3208`5B256`5D`20=`200;\1604D VEBUG_LEVEL1`20fprintf(stderr,"`20b)`20%s`20`20`20`20",s\8D231,1,32\8D0Afile V\83141`5B32\8328`20`20%s`5Cn\800A1); X\9204\0404`20`20if`20(set_multi_flag`20==`20FALSE)`20SET_Read_SSET(anim_hdr,fi Vn,tmp_sset_hdr\510Delse\0F0B`7B X\0D0B`20`20FILE`20*fnew\340C`20`20SET_Extract_Directory(\B308\BC17\BE06`20(fne Vw=fopen\320A"r"))`20==`200)\320D`7B X\0E0C`20`20fprintf(stderr,"Can't`20open\9404`20File`20%s`20for`20reading`5Cn", V\6708\8F0F\C806TheEnd()\1C0E`7D X`09`20\2107Read_SSET(anim_hdr,fnew,tmp_sset_hdr\3E0Ffclose(fnew); X\4A03\4F03\0303break;\2A06case`20'c':`20/*`2010`20bytes`20set`20current`20fram Ve`20*/ X`09`7B\4304ULONG`20i;\0C04i`20=`208;`20while(i--)`20fgetc(fin)\2105cur_fram_nu Vm`20`20=`20UTIL_Get_MSB_UShort\2D13cnt`20=`20\3C0C\2005DEBUG_LEVEL2`20fprintf( Vstderr,"`20c)`20%lx`5Cn",\390C\5A04\F215d'\F205new`20SSET`20header`2032`20asci Vi`20+`2010`20bytes\FB16fread((char`20*)set_buff,1,32,\D209\1708`5B32`5D\D2030; V\C70F1`20\C711d)`20sset`20hdr`20%s`20`20",s\4507\530Asset_cur_num\5703UTIL_Get V_MSB_UShort(f\830Csset_xoff\2D10\2C18yo\2C21i`20\2020\201A`20/*`20last`20fram V`20in`20series`20*/ X\E20F\4503SET_Get_SSET(s\FE0F\6C06DEBUG_LEVEL2`20fprintf(stderr,"`20`20%lx V\0404`5Cn", X`09`09s\430F,s\110B->\5509cur_fram_cnt\8703\0F09num; X`09`7D X`09break; X`20`20`20`20`20case`20'e':\DB04position`20face`2012`20byt\DE07`7B X\5A03SET_FACE_HDR`20*face_hdr\7505ULONG`20face_num,depth,garb,f\7C0A`20`20 V\2605xpos,ypos,xoff,yoff\1D0Aback_x,back_y; X X\1803\5608\CD03UTIL_Get_MSB_UShort(fin\F906xoff\D505\280F\270Fyoff\2723depth V\2713\7610garb\4F14\2810fram\C620`20/*`20not`20correct`20*/\3A04DEBUG_LEVEL2 V`20fprintf(stderr,"`20e)`20%lx`20(\0504%x\0D06\0C05lx`5Cn",\4104\7D03ace_num,x Voff,yoff,depth,garb,f\9B07\A906if`20(\3008`20>`20set_sset_cur->f\1907) X\2A03`7B X\5D06\930FSET_Read:`20e)`20\4A09invalid`20\AD08)", X`09`09f\9908\6818\9305`20`20SET_TheEnd()\1305`7D X\0503face_hdr`20=`20`26(\4112s`5B\4708`5D); X\3104xpos`20`20=`20\3908->xoff`20+\7E0Axoff\6105\2B05+=`20x\1108yp\3C10yo V\3C0Eyoff\2B0A+=`20\1106DEBUG_LEVEL2`20fprintf(stderr,"`20\DE04`20e`20FACE`20 V\5004<%ld,%ld>`20fin`20\0E09`5Cn", X`09`09xoff,yoff,xpos,ypos); X X\7504/*`20Back`20ground`20Scrolling`20calculations`20-`20see`20g)`20*/ X\3503if`20(set_xscroll_flag`20==`201) X\1E03`7B X\0503`20`20back_x\FB03-s\2B0Blen`20*`20(cur_fram_cnt`20\5E04t_back_\5108ram); X\4805while(\4E07<`200)\5A08+=\380Acur->xsize;\3606\A304\2807>=\2814\4709%= V\4719`7D`20else\CA0A0; X X\FF0Bys\FF20y`20\FF07\2B08\FF3Dy`20\FF0Ay`20\FF11ys\FF13y`20\FF11ysize\4709 V\FF11\470A\FF0C\CA04\FF07SET_Add_SETTER(anim_hdr,c\D50B,back_x,\3C06, X`09`09xpos,ypos,face_hdr->face_act,depth)\7505\460C++; X`09`7D X`09break; X\D904`20case`20'f':`20/*`20backgrnd`20display`20info`20`204`20bytes`20*/ X`09`7B\5504ULONG`20back,effect;\1604back\D703UTIL_Get_MSB_UShort(fin)\2405 V\2F06\2620DEBUG_LEVEL2`20 X\1103\A903fprintf(stderr,"`20f)`20\B009\A805%lx`20\0404`20",b\9B0A\5206if`20( V\A006=`200xffff)`20set_back_cur\9203SET_Add_Black(anim_hdr)\B706lse`20\3013Get V_BACK(back\BC13\B511\A104`5Cn",\4C0C->num)\3D05\8409ACK(cur_fram_num\310F V\0A05act,\170Ech\B106`7D X`09break; X`20`20`20`20`20case`20'g':`20/*`20backgrnd`20scrolling`20info(?)`20`208`20byte Vs`20*/ X`09`7B X\9003LONG`20tmp1,tmp2,tmp3,tmp4; X X\1E03tmp1`20=`20UTIL_Get_MSB_Short(fin)\D105tmp2\23223`20\23214`20\231B\2404if V`20(\2806=`200)\1204`7B`20/*`20\E606`20only`20in`20x`20direction\E605`20`20 V`20`20set_xscroll_flag`20=`201;\1B0Ays\1B0D0;\1B12len`20\1A0A\8A073`20=\8A04 V\5F0D\2906tmp\6108else\22162;\4E0A\2111\5911\9D0D`7D X\0503else\0804`7B`20/*`20scroll`20only`20in`20y`20direction`20*/ X\EB18\A508\6919\1B0E\BB06\1A08\B804tmp3`20\AD0A\5F08\E409\6108else\22162;`20 X\2305/*`20PODNOTE:`20I`20haven't`20seen`20\6608tmp4`20==`201`20so`20this`20 V\0303a`20guess`20\E708\9704\6A11\A211\E60D`7D X\0503set_back_s\2207ram`20=`20cur_fram_num\2D05DEBUG_LEVEL2`20fprintf(stderr," V`20g)`20%ld\0404\0808`5Cn",\9A06\6305xs\810A,s\110Blen,set_\A20C\110Dlen); X`09\AD03break; X`20\5404case`20'h':`20/*`20sound`20info`20`2010`20bytes`20*/ X`09`7B X\8203ULONG`20i;\C622h)\4B0C-`20not`20supporte\D104\8804`20`20i`20=`2010;`20whi Vle(i--)`20fgetc(fin\AA19i'\AA05timing\AB072`20bytes\A904set_time`20=`20UTIL_Ge Vt_MSB_UShort\5A06`20if`20(s\2909=`200)`20s\380A1; X`09\DF1Ei)`20%lx`5Cn",s\3707\AF04\430B\0B09*`2016\BF07\0303SET_Add_TIME(cur_fr Vam_num,\480C\F412j':`20\F504256`20ascii`2032\0907IFF`20stuff`20`20Sounds`20Inf Vo`20*/ X`09fread((char`20*)set_buff,1,256,fin);\A805buff`5B256`5D`20=`200;\FB0D1`20 V\FB11j)`20%s`20\9A03\FC06buff\B404\6C161,1,32\6C0F1`5B32\6C26`20`20%s`5Cn V\690A1); X\7B04\0404if`20(set_multi_flag`20==`20FALSE)`20SET_Read_Sound_IFF(fin); X`09/*`20else`20ignore`20*/ X`09break;\5906case`20'k':`20/*`20?`20header`20of`20some`20sort`2040`20bytes V`20\3C04`7B X`09`20`20ULONG`20i; X`09`20`20\D10B2`20\D111k)`20???`5Cn"\8B04\C403`20=`2040;`20while(i--)`20fgetc V\AD08`7D X\9D13l'\9D05cmap`20info`2064\910B\801El)\3805\8107set_imagec\880332; X`09IFF_Read_CMAP_1(set_cmap,s\2B09,f\9C06IFF_Shift_CMAP\2A14\6308chdr\6103ACT_ VGe\2F1A,set_or_mask, X`09`09`09\A00B\1C0D4,4,4); X`09SET_Add_CHDR(\6A08,cur_fram_num); X`09break; +-+-+-+-+-+-+-+- END OF PART 6 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 13 Archive-name: xanim/part07 -+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+ X`20`20`20`20`20case`20'v':`20/*`20?`20header`20of`20some`20sort`2026`20bytes V`20*/ X`09`7B X`09`20`20ULONG`20i; X`09`20`20DEBUG_LEVEL2`20fprintf(stderr,"`20v)`20?\5406?`5Cn"\7D04`20`20i`20= V`2026;`20while(i--)`20fgetc(fin\2204`7D X\A213w'\A205frame`20count`20\8F04set_\DB08\5703UTIL_Get_MSB_UShort(fin)+1 V\4D07\0303\3308es`20=`20SET_Init_FRAM_HDRS(s\530B\8F04\E10B1`20\E111w)`20%ld V\9806s`5Cn",s\3F0F\CB12x'\CB05title`20and`20version`2032`20ascii\D904fread((ch Var`20*)set_buff1,1,32,fin);`20\1509`5B32`5D\CC030;\AD20x)`20%\A509buff1\A216y' V\A205`208`20bytes`20`20if`20present`20indicates`20IFF`20chunks`20included`20 V`20\BC04\850B2`20\8511y)`5Cn"\7804set_multi_flag\C103FALSE;\9114z'\9105EOF`20m Varker\6805exit\3C081;\3809 X X\3904default:`20\8110Unknown`20opcode\3B03%lx`5Cn",op)\7407\0303fclose(fin V\AA04SET_TheEnd()\2405`7D`20/*`20end`20of`20switch`20*/ X\170Dwhile`20\1604\4C0D X`20`7B X\4103ULONG`20frame_cnt,i,j;\1804XA_ACTION`20*back_act;\300E_time;\E405\0F09 V\C5031;\1208e_cnt\12030;\1204\4608\1109for(i=0;`20icm\5B06=`200)`20\1712`20set_chdr\5807else\1409\1F03\3210 V\B408/*`20spread`20out`20timing`20info\8717time`20\8504xffffffff) X\2705\FF0A\2508\1106time\940B\2D0D\280C\3909\9A16backgrounds`20\9A16back_act V`20!=`200)`20\0F09\600C\1508\910B`20 X\9207\4E04\440F\5D13=`20\440F\460F`7B`20\0A08`20`20set_back_cur`20=`20SET_Add_ VBlack(anim_hdr);\310A\660B\3C0C\B811\0404\9C26`7D X\0A06\DD0C->chdr`20=\E305AC\9506CHDR_To_Action\2C09,set_chdr); X X`09/*`20add\9C05\4305to\0C04ter`20action\6704it`20doesn't`20have`20one`20*/ V\860A\B80Apms_act)`20\1D06`7B X\B407\2615\B50C X`09`09A\B716\3711\C00C\5D05`7D X\0705pms_\5005`20f\330Dhdr\2907while(\1407) X\A30EACT_MAPPED_HDR`20*back_map\400B`20`20\150C\6903(A\350F)back_act->data V\3809\7407->back\3903\2708\2112xb\220B\6A07->xsize\2D12yb\2D14ysize; X`09/*`20add`20set_chdr`20to`20face`20action`20if`20it`20doesn't`20have`20one V`20*/ X\6707if`20(p\6B08face) X\1A07`7B X`09`20\1E11->\6605==`200) X`09`09ACT_Add_CHDR_To_Action\330E,s\9C07);\5B08`7D X\E50E\DE03\3309next\2907\2705`7D`20/*`20end`20of`20frame`20list`20loop\C707 V\1605_cnt++;`20/*`20last`20\2B06*/`20 X\2203anim\9107rame_lst`20=`20(XA_FRAME`20*)malloc(sizeof(\1908)`20*`20\5E09 V\BF06if`20(\4F15=`20NULL) X\DA07TheEnd1("SET_ANIM:\4A07\2D04\6E06`20err")\5605\5213`5Bf\7908-1`5D.ti V\CE03=`200;\2E25act`20\2E06\2F04j`20\3908for(i=0;`20ixs\F506\740B\1F0Cys\1F0B\6907\3F0Ecreen`20\B50E\B40C`20*/ X`09\510C\310D\BC15\3305DEBUG_LEVEL1`20fprintf(stderr,"`20`20`20`20%ldx%ldx%ld V\0C08`20cmp=%ld`20msk=%ld`5Cn", X`09\EE10,b\DF0E, X`09\5004\0404set_imaged,\E411\370D\1206\5C04mhd.compression,\D806masking); X`09break; X\6106case`20CMAP: X`09\6D09c`20=`20size/3\2F04\6609csize\1B04\2809; X`09IFF_Read_CMAP_0(set_cmap,s\2609,fin\7904IFF_Shift_CMAP\2A14\2604set_chdr V\6903ACT_Ge\2F1A,set_or_mask\FC04`09`09\1C174,4,4)\CD0E\6306\6E08\1C04reak; X`20`20`20`20`20`20case`20CAMG:`20/*`20ignore`20for`20now`20*/ X\260CRN\2623DPPS\2625V:\2616`09`7B X`09`20`20ULONG`20d;\3507\0404while(`20(size--)`20`26`26`20!feof(fin)`20)`20d V`20=`20fgetc(fin); X`09`7D X\3B08\F312BODY: X\6C0Cxsize,ysize; X`09`20`20xsize\5303bmhd.width\1705ysize\1708height\1805pic`20=`20(UBYTE`20*) V`20malloc(`20XA_PIC_SIZE(\5306*`20ysize)`20)\3905if`20(\3D05=`200)`20SET_TheEn Vd1("SET_Read_BODY:\5307`20failed`5Cn"\4006IFF_\2509(fin,pic,size,\D407\7006, V`20(ULONG)(bmhd.depth), X`09`09(int\1507compression),`20(\190Amasking),set_or_mask\7F06form_s\D804 V\C003;`20/*`20body`20is`20always`20last`20*/ X\2C03break; X`09`7D X`20`20`20`20`20`20default:`20 X`09SET_Print_CHID(chid);`20SET_TheEnd1("`5CnUnknown`20in`20Back`20chunk`5Cn") V\5403\5C07\5704`7D`20/*`20end`20of`20switch`20*/ X\180Ewhile`20\1705return(pic); X`7D X X Xvoid\7B05Read_SSET(anim_hdr,fin,set_hdr) XXA_ANIM_HDR`20*a\2307; XFILE`20*fin; XSET_SSET\2306\3907; X`7B X`20`20ULONG`20chid,data;\1303\1205list_num,type,i; X X`20`20chid`20=`20UTIL_Get_MSB_Long(fin); X`20`20\3508\2519`20+`201\2904data\4A1D\A407->face\5307\5E08\2004DEBUG_LEVEL1 V`20 X`20`20\CB04`20`20fprintf(stderr,"\1404")\3004`20`20SET_Print_CHID(chid\1A07 V\3610%lx`20",\6E08\3F16data\3F17`5Cn\7306`7D X`20`20if`20(chid`20!=`20LIST)`20SET_TheEnd1("SET:`20LIST`20not`201st`20in`20SS VET\4406\4103set_hdr->faces`20=`20(SET_FACE_HDR`20*)malloc(\AE08`20*`20sizeof( V\280C)`20\9205\8E04\5110=`200)\9513\1E06\5D06`20failed\9409/*`20Read`20PROP V`20*/ X`20`20\E305=`20UTIL_Get_MSB_Long(fin);\3205\2D0ADEBUG_LEVEL1`20fprintf(stderr, V"`20`20`20`20"\AD05\270DSET_Print_CHID(chid\D209\7D05!=\6205\CB141st`20not`20 V\8205in\2204\CB06`20`20data\B81Fprop`20size`20\BD05type\3224\2805\EF22%lx`20", Vdata\F421type); X\2603/*`20Read`20CMAP`20\6405chid\961F\2D0A\651Cchid\8A05if`20(\5605!=\3B05) V`20SET_TheEnd1("SET:`202st`20not`20\5B05in\2204`5Cn")\3F04set_imagec\9724size V\9C06\380B/=`202\4B04\AF0Dfprintf(stderr,"`20%lx`5Cn",s\3809\7F05IFF_Read_CMAP V_1(set_cmap\280B,fin);\2C07Shift_CMAP\2B14\D209chdr\D003ACT_Get_\3018,set_or_m Vask, X`09`09`09`09s\1C164,4,4)\5E04\0303for(i`20=`201;`20i`20<`20list_num;`20i++) X`20`20`7B X`20`20`20`20SET_FACE_HDR`20*face\3F04`20`20UBYTE`20*pic\1006XA_ACTION`20*act V\240Dclip_ptr\1507LONG`20t_x,xclip; X\1605face\8C03`26set_hdr->faces`5Bi`5D\3506pic\1E03SET_Read_FACE(fin,face V\D005`20`20if`20(pic==0)\2905TheEnd1("S\3608SSET:`20read\6F06failed`5Cn") V\8507/*`20make`20clips`20*/\1505t_x\7B03xclip\0803X11_Get_Bitmap_Width(face->x Vsiz\8D08\3504/=`208;`20\5504how`20many`20bytes\5904\2505clip_ptr\5703(UBYTE V`20*)`20malloc(`20\5406ysize`20*\5005\E80B\3A08\ED05\E912Face:`20\B205\4F06 V\EB05\E90BUTIL_Create_Clip\5109,pic,set_or_mask,\DB0B\0C07ysize, X`09`091,xclip,X11_LSB\9F07act`20=`20ACT_Get_Action(anim_hdr)\2406ACT_Setup_Map Vped(act\7A09chdr, X`09\7907\7508\891Bset_imagex,set_imagey,\D209TRUE,FALSE\0606\840BAdd_CHDR_To_ V\AA08ct,\8608\2A07\6E06face_a\DD05act\1A04`7D X`7D X X XUBYTE`20*SET_Read_FACE(fin,face_hdr) XFILE`20*fin; XSET_FACE_HDR`20*f\2307; X`7B X`20`20ULONG`20chid,data;\1303\1205\F306orm_size\1704\7407pic; X X`20`20pic\96030;\0B03\5208->xsize\1712ys\170Bchid\0C03UTIL_Get_MSB_Long(fin V\FD05\7609\261Ddata\211A\450B-=`204\3104DEBUG_LEVEL2`20fprintf(stderr,"`20`20 V`20`20"\5805\270DSET_Print_CHID(chid\2512\4C10%lx`20",\8109\5621data\2505if V`20(chid`20!=`20FORM)`20SET_TheEnd1("SET:`20face`20is`20not`20FORM`5Cn\B706whi Vle(\750A\1303`7B X\D604\5105=`20UTIL_Get_MSB_Long(fin);`20\3209`20-=`204;\3305\0F05\332E\E01Cchi Vd\A405\270Ffprintf(stderr,"%lx`20",size)\2E06\690Dsize\1706if`20(\1B0A<`200) V\2A0B=`200; X X\C605witch(chid)\1105`7B X\0604`20`20case`20FACE: X`09face_hdr->xs\F613UShort\F806\2D0Cys\2D2Bx`20\7604\2D0F\5918\2C2Bxoff\5829 V\2C21DEBUG_LEVEL2`20 X`09`7B X`20`20fprintf(stderr,"`20\9D05FACE`20size`20<%ld,%ld>`20p`20\0C0A\6A04\0E09 V`5Cn", X`09`20`20(LONG)\BC0Bsize,(\160Fysize,\3015,`20\7B03\3011\2C16off,`20\2C11 V\9804\E904`7D X`09break; X\D006case`20BODY:\F604\5003pic`20=`20(UBYTE`20*)`20 X`09`09malloc(`20XA_PIC_SIZE(f\CD0E`20*`20f\C90E)`20\6F04`20`20if`20(\5405=`200 V)`20SET_TheEnd1("SET_Read_BODY:`20malloc`20failed`5Cn")\A408\0404DEBUG_LEVEL2 V`20fprintf(stderr,"`20`20`20%ldx%ldx%ld`20comp=\0904msk=%ld",\490B\0606\BF0F,f V\BD0E,set_imaged,bmhd.compression, X`09`09bmhd.masking); X\E804IFF_\CD09(fin,pic,size,\3103\7010\810B\7106`205\2704(ULONG)(\7410),`20( V\1B0C\7B08,set_or_mask); X\8703form_size`20=`200;`20/*`20body`20is`20always`20last`20*/ X\2C03break; X`09`7D X`20`20`20`20`20`20default:`20 X`09SET_TheEnd1("`5CnUnknown`20in`20Back`20chunk`5Cn"\7404\4607\4104`7D`20 V\7003end`20of`20switch`20*/ X\180Ewhile`20\1704DEBUG_LEVEL2`20fprintf(stderr,"`5Cn"); X`20return(pic); X`7D X X Xvoid`20SET_Free_Stuff() X`7B\6503while(set_back_cur`20!=`200)\1B03\1F04`20`20SET_BACK_HDR`20*tmp;\1705t Vmp`20=`20s\380B\1806\4A0D\210E->next\2706free(tmp\AE04`20`7D\880Dsset_\8816SSE VT_\880EULONG`20num;\0F05num\7607\4708->face_n\2208if`20(\2012s`20\6E05\9806 V\1F13\A805\F60C\2008\F60A\B809\8010\F619`7D X Xvoid`20SET_TheEnd1(mess) XUBYTE`20*mess; X`7B X\FE06Free_Stuff()\4104\330D; X\4E12()\3C1F(); X\370CRead_Sound_IFF(fin) XFILE`20*fin\8906ULONG`20chid,data;\1303\1205size,form_size; X\1803chid`20=`20UTIL_Get_MSB_Long(fin)\3904\2F09\261DDEBUG_LEVEL2`20fprintf(st Vderr,"`20`20`20`20FORM`20%lx`20",\5209\3A05data\5B1A\7F0B-=`204\6B11SET_Print_ VCHID(data\5605if`20(\DB05!=\7B05)`20SET_TheEnd1("SET:`20sound`20is`20not\2505 V`5Cn")\3D04while(\A70A\1303`7B X\C504ULONG`20d;\0D05\5F05\B92C`20`20\0F05\332E\EE25\270Ffprintf(stderr,"`20%lx V`20",size)\2F06\6A0Dsize\1706if`20(\1B0A<`200)\2A0B=`200;\C606witch(chid) X\1104`7B X\0604`20`20case`20BODY: X`09\380E`20/*`20last`20chunk`20*/ X\320BVHDR: X\110BANNO\110DCHAN: X`09while(`20(size--)`20`26`26`20!feof(fin)`20)`20d`20=`20fgetc(fin); X`09break\B506`20`20default:`20 X`09SET_Print_CHID(chid);`20SET_TheEnd1("`5CnUnknown`20in`20SOUND`20chunk`5Cn") V\5A0E`7D`20/*`20end`20of`20switch`20\E005\180Cwhile\1705DEBUG_LEVEL2`20fprintf V(stderr,"\5D06`7D X XSET_FRAM_HDR`20*SET_Init\1309S(num) XULONG`20num; X`7B X`20`20\350Etmp_fram\A504\2906i; X X`20`20\1808`20=`20(\320E)malloc(num`20*`20sizeof(\230C)`20); X`20`20if`20(\460A=`200)\7B05TheEnd1("S\AF09ram_HDR:`20\5A06`20failed"); X\4703for(i=0;`20i`20set_fram\5B06`20`20\3E04`20`20fprintf(stderr,"\8F0C: V`20invalid`20frame`20%lx`5Cn",`20\4609\FF06\DF06\ED08\8308`20=`20`26\7308es V`5Bf\3407`5D;\9A0Chdr->cm\3005!=`200\980ADEBUG_LEVEL2\A51Fduplicate`20cmap`20w Varning`5Cn"\A005\940C\6C09=`20chdr; X`7D X Xvoid`20\5108BACK\9A06num,back_act,chdr) XULONG`20\1E08; XXA_ACTION`20*b\2A07; XXA_CHDR`20*\6106\CD04SET_FRAM_H\1804\8C08; X\1B03if`20(\5108`20>`20set_f\0F07) X`20`20\3E04\BE03\FE17BACK:`20invalid`20frame`20%lx`5Cn",`20\4609; X\4304return\0C04`7D X\5103\8307`20=`20`26\7308es`5Bf\3407`5D;\9A0Chdr->\E008`20!=`200)\9623duplicat Ve`20back`20err`5Cn"\8D05\5513=`20\0B08; X\5C05`20`20/*\8204no`20CMAP`20for`20this\E507add`20th\5B06's`20*/ X\B010cm\E006\AE04`20S\9A07CHDR(chdr,f\EA07); X X`7D X Xvoid\2609TIME\4A06num\2A06time) XULONG`20\1A12; X`7B X`20`20SET_FRAM_HDR`20*\8A08\F104\9A09num`20>`20set_f\8008`20 X`20`20\3E04`20`20fprintf(stderr,"\8F0C:`20invalid`20\4809%lx`5Cn"\C90C\4504ret Vurn\0C04`7D X\5303\8507`20=`20`26\7608es`5Bf\3407`5D;\7E04\2508->time\2B03set_\D706`7D X X X/* X`20* X`20*/ Xvoid`20\9608SETTER(anim_hdr\8809,xpback,ypback, X`09`09xpface,ypface,face_act,depth) XXA_ANIM_HDR`20*a\4E07; XULONG`20\5508\1008\5C0D\150A\600B; XXA_ACTION`20*f\6C07\2A08depth; X`7B X`20`20ACT_MAPPED_\7A05face_map_hdr; X`20`20SET_FRAM\1E07ram_\1A07ACT_\FD06\1C06tmp_pms,*cur_pms\2404\840Bact; X\1303if`20(\CF08`20>`20set_f\0F07)`20\2003\9504`20`20fprintf(stderr,"SET_Add_ V\7106:`20invalid`20\4A09%lx`5Cn",f\4B08\7E04`20`20return\0C04`7D X\5503\BE07`20=`20`26\7808es`5Bf\3407`5D;\8004face_map\2907(ACT_MAPPED\E706) V`20face_act->data\D505act\2C03ACT_Get_Action(anim_hdr); X\2404tmp_pms`20\5407\CA06\5407malloc(sizeof(\1F0E))\C004if`20(\4209=`200)`20SE VT_TheEnd1("SET_Add_\3706:`20\5106`20failed")\A508->type\AB07\2C06\5D04\CD09 V\9D04UBYTE`20*)\6E07\3B05\0C07->work\2503work_act\3D04\1C09xpback\1E03\0906 V\1C0Dyp\1C07\0906\380Eface\1B03face_map_hdr->xsize\440E\2815ys\2810xp\2907 V\0906\880F\1C07\0906\1C0Ddepth`20=`20depth\1A0D\790C\F610\D8070;\830D\1615yb V\1609\1703`20/*`20if`20this`20is`20the`201st`20one.`20*/ X`20`20if`20(fram_hdr->pms_hdr`20==`200)`20\3D04\2E07\2D06`7B X\5203`20f\2F12\7F08\8A04\8C0Bnext\A108\3810act\1B03\E907`20`20return\0C04`7D X\B608\7C08is`20of`20less`20or`20equal`20depth`20\C31A->\2206<=\2B06) X\BF08\9E10\3B11\AE14\E613\CF18\BE05keep\0E04`20current\AA06\E70E\0503cur_pms V\8618while(\2508!=`200\C70A/*`20`20there`20isn't`20a`20n\D004one`20\6C07if`20( V\3C07\ED08\4207\4408\4203\D206\2008`200\DC06\9A09\1909\FB0D\C80C\CA04\1305 V\9103if`20the\8909's`20depth`20is`20<=`20then`20put`20\B605\A518->\3406<=`20 V\0905\B01E\3B0D\BC39\3107\5014`7D X X`7D X Xvoid`20SET_Extract_Directory(dname,cname) XUBYTE`20*dname,*cname; X\BC03ULONG`20i,j; X X`20i\68030; X`20while(`20(dname`5Bi`5D`20!=`20':')`20`26`26`20(i`20<`20256)\0D05\220C0)`20) V`20i++; X`20if`20(\1C09==0)`20`7C`7C\3A04>=\3B05)`20SET_TheEnd1("S\BF0A:`20error`201 V`5Cn");\9304++;`20/*`20skip`20over`20:`20*/ X`20j`20\AB1A0)`20\A90D) X`20`7B X`20`20`20\2406j`5D\3B03\2F08;`20\6105j+\B604`7D X\B905\A709\A6212`5Cn"); X\590C'/';\4F06 X`20i\A40Fcn\A412<32)`20)`20 X\A211\2D08\A219\3904\A1203`5C\A1110; X X`7D X $ call unpack XANIM_SET.C;1 - 593785357 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_set.h X`20*\1204Copyright`20(C)`201992,1993`20by`20Mark`20Podlipec.`20\2E04All`20 V\2E05s`20reserved. X\4906This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\AA07notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X/******\0606\0C0C\0B0B`20X11`20stuff\3204extern`20Display`20`20`20\0303`20*the VDisp; X\1F07Colormap\1F06theCmap\1E09Window\3C07`20mainW\1C09GC\1808\3A07GC\1C09XImag Ve\1C08*theImage\200AColor\3D09defs`5B256`5D; X X Xtypedef`20struct`20STRUCT_SET_FACE_HDR X`7B X`20`20ULONG`20xsize,ysize; X`20`20\1406,y\0C0Aoff,yoff\1204XA_ACTION`20*face_act; X`7D`20S\5B0B; X X\801ABACK\800Fnum;\8D18\1508creen,yscreen\190Bpos,ypos\9B0Fback\9B06\2A08cs V\5207XA_CHDR`20*chdr\1104\A41A`20*next\DF08\1608\DF1DSSET_\DF1Bface_n\1206SET_ VFACE\6B06face\C705\551A\900E\1608\901DFRAM\900Ftime\6804XA_ACTION`20*cm_act; X\150Dpms_\1612back\170BCH\9704cm_hdr;\1303ACT_SETTER_\1A05pms_hdr; X\B406\8F08; $ call unpack XANIM_SET.H;1 - 543239380 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_txt.c X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim_gif.h" X X XLONG`20Is_TXT_File(); Xvoid`20TXT_Read\160EGIF_Free_Frame_List(); XGIF_FRAME`20*GIF_\380D XU\6405UTIL_Get_MSB_Long(); X Xtypedef`20struct X`7B X`20`20U\2F05frame_cnt;\1303\5F0Bgframes; X`7D\A205FRAME_LST; X Xstatic`20char`20gif_file_name`5B256`5D;\2008\6006txt_max_imagex,t\0F0Cy,\0F0Dc V,\0F0Dd; X X/* X`20*`20This`20file`20will`20open`20the\1305name`20passed`20to`20it`20and`20det Vermine`20if\4204it`20is`20a`20txt91\3805.`20If\1707it`20returns`20TRUE,`20else V`20FALSE.`20It X\4003closes\7509`20before`20\3706ing. X`20*/ X\F105Is_TXT_File(f\A107) Xchar`20*\1008; X`7B X`20`20FILE`20*fp;\0C03UL\3C04firstword; X X`20`20if`20(`20(fp=fopen\4D09,"r"))`20==`200)\2603\4A04`20`20fprintf(stderr,"c Van't`20open`20%s`5Cn",f\8B08\6E04`20`20TheEnd()\0E04`7D X\4003\7A08`20=`20UTIL_Get_MSB_Long(fp\2905fclose\0E08/*\4904\0404\0808\0303t V`20x`20t`209`20\0C04so`20we`20ignore`20the`201`20*/ X\D806\700B=`200x74787439)`20return(TRUE\6605\1007FALSE); X`7D X X/* X`20*`20This`20file`20parse\6005txt`20animation`20\1D05and`20converts`20it`20in Vto`20actions.`20 X`20* X`20*/ Xvoid`20TXT_Read_File(fname,anim_hdr) XXA_ANIM_HDR`20*a\1707; Xchar`20*fname; X`7B X`20`20FILE`20*fp;\0C03LONG\C104,i,f_cnt\1409num_of_files;\1508total_frame_cnt, Vtxt\0E0A\2609*t\1708s,txt\2106num\2104TXT_FRAME_LST`20\2A0A_lst; X\2103txt_max_imagex`20=`200\3704\160Dy`20\1614c`20\1614d`20\1605\1703if`20( V`20(fp=fopen(fname,"r"))==0)\2103`7B`20\0503`20`20fprintf(stderr,"Can't`20open V`20%s`20for`20reading.`5Cn",fname);\3B06TheEnd()\8604`7D X\0503/*\2D05`20and`20throw`20away`20txt91`20header`20*/ X\7503scanf(fp,"%*s"); X\3E06Read`20the`20number`20of`20files\3612ld",`26num_of_files\8605\F504\150C V`20<=`20\ED06\EC15\2B0B`20is`20invalid`20%ld\EC04\5E11\4103close(fp\1007TheEnd V()\0E04`7D X`20 X`20`20txt_frame_lst`20=`20(TXT_FRAME_LST`20*)`20 X`09`09malloc(`20sizeof\230E)`20*`20\D815\5A0F\D904\80071("TXT_Read_File:`20 V\6106`20err"); X\4103/*`20Read`20in`20the`20GIF`20files,`20use`20only\18051st`20one's`20colorm Vap\E704*/\0603for(i=0;`20iimagex`20>\3D05max_\1106)`20\100E\4103\3410\4E19y`20\4E0Fy)\100F\4E12y;\4E18c V`20\4E0Fc)\100F\4E12c;\4E18d`20\4E0Fd)\100F\4E12d;\4E03`7D X\0503/*`20Check`20for`20Frame`20list`20at`20end`20of`20images.\7F04*/\0603ret= Vfscanf(fp,"%ld",`26txtframe_num);\2603\A904`20(ret`20==`201)`20`26`26`20(t V\250B`20>=`200)) X`20`20`7B X\D904LONG`20tmp_t\2507;`20\9F04\A105read`20in`20txt`20f\A309,`20keep`20tra V\BE03of`20actual\2106s`20since`20each\4605`20*\3E04_f\3E05can`20have`20severa V\3408(cmaps`20and`20\F406\C905\F708`20`20\4109s`20=`20(L\B104*)`20malloc( V\DC0D*`20sizeof(LONG)`20\4807if`20(\440C=`200)`20TheEnd1("TXT_Read_File:\C708 V\5E06`20err")\4606total_\6C06cnt`20=`200\1907\5B08\1705`20`20\1905\1A05for(i=0 V;`20i`20<\2704\A909;`20i++) X\2404`7B X\EB05`20ret\3A03fscanf(fp,"%ld",`26tmp_t\3A07\8907\D106`20(ret==1)`20`26`26 V`20(t\270B`20>\E105\1711<`20num_of_files)`20)\4E07\8208\CA0Bs`5B\D50D`5D`20= V`20\4B0C\8808\3203otal\FE0B+=\450A_lst`5B`20\830D`5D.\2B09\440B\6B0C++\1908 V`7D X\0806else\2C09fprintf(stderr,"TXT_READ:`20bad`20\6506number`20(%ld)`20in\1607l Vist`5Cn", X`09`09`09\0303`09`20\9A0D);\6305\7404`7D`20/*`20end`20of`20\3B06included`20at V`20\1904*/\2703\9707`7B X\C30Ds`20=`20(LONG`20*)`20malloc(num_of_files`20*`20sizeof(LONG)`20\7807if`20( V\440C=`200)`20TheEnd1("TXT_Read_File:`20no\9806s`20\6106`20err"); X\8A0E_cnt\8D03\7D0C\6C06total_\240C0;\1905for(i=0;`20i V\2A0A X`09=`20(XA_FRAME`20*)malloc(sizeof\1909)`20*`20(t\AB10`201))\9104if`20(\5C14== V`20NULL)`20TheEnd1("TXT_ANIM:`20frame`20malloc`20err"); X\4B03f_\5A04=`200;\DE06loop`20through`20valid`20\3A06list,`20adding`20gif V\9806s`20\E905for(i`20\4604`20i`20<`20txt\B70A;`20i++) X`20`20`7B X`20`20`20`20ULONG`20k,\200A\1705GIF_FRAME`20*gtmp\9C05`20`20gtmp\0804`20`20= V`20\550Alst`5B`20\0F09s`5Bi`5D`20`5D.g\0D06\4E06\5D09\3822\880Fk`20\C604\0B05w Vhile(\8305!=`200\C304\C508`20`20if`20(k`20>=\6B0A\2006\220A\8603printf(stderr, V"TXT_Read_Anim:`20frame`20inconsistency`20%ld\0404`5Cn", X`09`09k,f\5E09\9406\0404break;\0F07`7D X\0806anim_hdr->\EC0Af_cnt`5D.time`20=`20gtmp->time\3C08\341Bact`20\3409act V\3308gtmp\1809next\1908k++;`20f_cnt++;\1405`7D`20/*`20end`20of`20while`20*/ V\1903\170Cfor`20\1505\8A0Aimagex\6303txt_max_\1106\5304\250Fy`20\250Fy;\2512c V`20\250Fc;\2512d`20\250Fd;\250Dframe_lst`5Bf_cnt`5D.time\34030;\271Eact`20 V\2712loop_frame\1C13ast_\1C08f_cnt`20-`201\2404free(txt_frames)\1405or(i=0; V`20i`20<`20num_of_files;`20i++) X`20`20`20`20GIF_Free_Frame_List\470A\AD05i`5D.g\550C\690D_lst\1706close(fp); X`7D X $ call unpack XANIM_TXT.C;1 - 1480190054 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_utils.c X`20*\1404Copyright`20(C)`201991,1992,1993`20by`20Mark`20Podlipec.`20\3304All V`20rights`20reserved. X\4E06This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\AF07notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X#include`20"xanim.h" X Xvoid`20UTIL_Sub_Image(); X\170ACreate_Clip(\190DMapped_To_\0A06\1E18Bitmap(); XUBYTE`20*UTIL_Scale\3A15Half\8906_Height(\1F0DPack\A80AULONG`20UTIL_Get_LSB_Lo Vng\1B17Short(); X\1C0FMS\3719MSB_US\3808\1C12\1B09\FB14Floyd(); X\3805CMAP_Find_Closes\370ACMAP_Cache_Init\1814Clear(\A009X11_Get_Line_Size(); X Xextern`20\2306*xa_scale_row_buff; X\210D\200Dsize\2009char\400B\3C1Cbuff\3D0E\2008dither_flag; X X/* X`20* X`20*/\DA06UTIL_Half_Image_Height(out,in,xpos,ypos,xsize,ysize,line_size) XUBYTE`20*out,*in; XU\7506pos,*y\380A*y\390E; X`7B X`20`20\2D06t_\1D06\0904pos,`20y_start,`20j;\2503register\2E07y,start\1A0E V\8506src; X X`20`20\4806`20`20=`20(*ypos);\1506size\1506size)\2C05if`20(\3007`26`200x01) V`20\7F07\2A031;`09/*`20\0E06on`202nd`20in`20line`20*/ X`20`20else\2F0B0;`09`09\310D1st`20\310B\3203\2B08(ULONG)in;\1503j=0;\0703for(y V`20=`20\5107;`20y`20<`20\B707;`20y+=2)\2603`7B X`20`20\4803rc\4605\F906)(\5806+`20y`20*`20line_s\E206\2C04memcpy(`20(char`20*) Vout,\0D09src,`20\3210out`20+=`20\1709\1606j++;\0903`7D X`20`20*ypos`20\8204t_y\0B04+`201)`20`20>>`201\2304*ysize\1F03j; X`7D X Xvoid XUTIL_Sub_Image(out,in,xosize,y\0706xipos,yipos,xisize,pix_size) XU\EC06out,*in; XULONG`20x\4128; X`7B X`20U\3405y,x; X`20U\5006in_ptr; X`20\4A06`20*=`20\330A`20xisize\1511\FE05\150Efor(y=yipos;`20y`20<`20(y\2705+ V`20\9C06);`20y++) X`20`7B X`20`20in_ptr`20=`20(\8607)(`20(ULONG)(in)`20+`20y`20*\7D08+`20xipos);\3903x V`20=`20\A906\0E04while(x--)`20*out++`20=`20\D107++; X`20`7D`20 X`7D X Xvoid XUTIL_Mapped_To_\0A06(out,in,chdr,xipos,yipos,\6306,y\0706\8806,yisize) XU\B306out,*in; XXA_CHDR`20*chdr; XULONG\B306\4E22; X`7B X`20`20\3306*map,moff;\1309y,x;\0D04\7206\DA06; X\1203map\EC03chdr->map\2504moff\140A\4707switch(x11_bytes_pixel) X`20`20\7804`20case`204:`20/*`20start`20from`20backside`20to`20allow`20for`20wh Ven`20out\6403in`20*/ X`09`7B X`09\BC09ulp; X\0F03for(y=yosize;`20y`20>`200;`20y--) X\1D03\3105`20`20\C806\4803(U\D906)((ULONG)(in)`20+`20(y\0503yipos`20-`201)`20* V`20xisize`20 X`09`09`09`09`09`09+`20xi\1D04+`20xosize\2604`20)\8005`20`20ulp\5B03\0903\5406 V\5E04\0B07)(out\60054`20*`20y`20*`20xosize)`20-`204`20\4008x`20=`20\1806\1107i Vf`20(moff)`20while(x--)\F105--\2B03map`5B(*\D306--)-moff`5D;\3A06else\3519 V\3409\2E06`7D X`09`7D X`09break; X`20`20`20case`202:`20/*`20start`20from`20backside`20to`20allow`20for`20when V`20out\5A03in`20*/ X`09`7B\5304USHORT`20*usp\6305for(y=y\DC06`20y`20>`200;`20y--)\1D04\3205\ED03 V\9505\4903(UBYTE`20*)((ULONG)(in)`20+`20(y\0503yipos`20-`201)`20*`20xisize`20 X`09`09`09`09`09`09+`20xi\1D04+`20xosize\2604`20)\8005`20`20usp\5B03\0903(U V\9C07)(`20(U\6006out\61054`20*`20y`20*`20xosize)`20-`204`20\4108x`20=`20\1806 V\1107if`20(moff)`20while(x--)\F205--\C505SHORT)map`5B(*in_ptr--)-moff`5D; V\4206else\3D21\3C09\3606`7D X`09`7D X`09break; X`20`20`20case`201: X`09`7B X\1E03for(y=yipos;\CA03<`20(yipos\DC03yosize);`20y++) X\2B03\3005\C603n_ptr\7405BYTE`20*)(`20(ULONG)(in)`20+`20y`20*`20xisize\0D03xip Vos);\3C06x`20=`20xosize\1107if`20(moff)`20\D60Cout++`20\6208)(\D604(*\7906++)- Vmoff`5D)\4307else`20\3E20\3D09\3707`7D X`09`7D X`09break; X`20`20`7D`20/*`20end`20switch`20*/`20 X`7D X Xvoid XUTIL_Create_Clip(out,in,pix_mask,xsize,ysize,pix_size,\E606,bit_order) XUBYTE\9E05,*in; XULONG`20\462E; X`7B X`20`20register`20U\4305data_in,bit_\4B06,y,mask_start\0B06end\E904\3B0A\8E05 V\3B05out; X\1C03if`20(\6A09`20==`20X11_MSB)`20`7B`20m\4F09`20=`200x80;\1306end\110501; V`20`7D X`20`20else\2F12\1E04\2F0D\4004`7D X\3003for(y=0;`20y V>\2009`7D`20/*`20end`20of`20for`20x`20*/\1905\E30D!=\A30B)`20\D515\4A10y`20*/ X`7D X Xvoid XUTIL_Mapped_To_Bitmap(out,in,chdr,xpos,ypos,xsize,ysize,width,height,line_size V) XUBYTE`20*out,*in; XXA_CHDR`20*chdr; XULONG`20\5309\1109size,`20y\0706\5C06`20h\5D06`20l\5E08; X`7B X`20`20\3206y,flag,c\1806`20`20ColorReg`20*cmap\1204register\3107mask,invert,x, Vmask_start,mask_end;\3403SHORT`20*imap,*c_ptr,*n\0706err_buff,err,threshold V\3504\F306data,*o_ptr\1504\0303csize`20=`20chdr->\AA09cmap\160A\AD06\1703 V\6008\1B03(S\8706)malloc(xs\4904*`202`20*`20sizeof(short))\5004imap`20`20`20 V`20\3913\8206\3512\3603`20/*`20shift`20gray`20down`20to`208`20bits`20*/ X`20`20for(x=0;`20x>`208\5A05 V\3705\1E03\3904`20<`20x\3B0B\E408\3F06(USHORT)i\4704`20*in++`20`5D\D204flag V\4105\4F04/*`20used\9D04invert\8104ge\A306if`20(x11_white`20`26`200x01)`20i V\2806=`200x00; X`20`20else\160A`7E0x00; X`20`20threshold`20=`20128; X X`20`20if`20(x11_bit_order`20==`20X11_MSB)`20`7B`20mask_start`20=`200x80;`20 V\1305en\46040x01;`20`7D\4803else\2F12\1E04\2F0D\4004`7D X\3003for(y`20=`200;`20y`20<`20ysize;`20y++) X`20`20`7B X`20`20`20`20o_ptr`20=`20(UBYTE`20*)(`20(ULONG)(out)`20+`20line_size`20*`20y); V\3605/*`20double`20buffer`20error`20arrays`20*/ X\2504\F604flag\ED040)`20 X\1404\7506`20`20c_\7706err_buff\5706`20`20n_\8F07SHORT`20\8F0C\2B08\9404xs V\9006sizeof(short)`20\9D07\F803\7605`201\1006`7D X\0604else\840E\6C08\8410\9C08\84450;\8407\0705data\1504x0\1807mask\1103mask_st Vart\1706if`20(y`20<`20(y\6505-`201)`20)\B207`5B0`5D`20=`20(USHORT)imap`5B`20*i Vn++`20`5D; X\3E05for(x=0;`20x=`20threshold)`20`7B`20err\6003\1D07-`20255;\B806`7C=\A805; V`20`7D`20\4607else\0603\310B\8207\6106\DD06\DE07end)`20 X`09`7B`20*o_ptr++`20=`20data`5Einvert;\6406=`200x00;`20\3B06\3A06start;`20`7D X\750B\5F08\1D06\65040x80)`20\3805>>=`201;\2F07\340A\1C05<<\1C0Bc_ptr++\B50Dxa_ Vdither_flag\5A04FALSE)\2307`7B X\5408\2D05`20<`20(xsize`20-`201)`20)`20*n\DE09imap`5B`20*in++`20`5D;\3807 V\C60C\5327`20*c_ptr`20+=`20(7`20*`20err)/16\E10A\3704y`20<`20(ys\370A\1E09 V\5F0A\6108>`200)\A90A\57043`20\5713\7903\240C5`20\2415\B416\210B`7B`20\4706 V`20=`20(USHORT)(imap`5B*in++`5D)`20+`20(\1707err/16);`20n_ptr--;`20`7D X\4708\0A08\0806\0606\7C04mask`20!=`20mask_start)`20*o_\B806=`20data`5Einvert; V`20/*`20send`20out`20partial`20*/ X X\5006free(err_buff)\E404free(imap); X`7D X X/*`20Routine`20to`20read`20a`20little`20endian`20long`20word. X`20*/ XULONG`20UTIL_Get_LSB_Long(fp) XFILE`20*fp; X`7B X`20\2906ret; X X`20ret\BA03`20fgetc(fp); X`20\1304`7C=\130A`20<<`208;\181616\191724\1906urn`20ret; X\D426half\D41EShort(\D54C\A321big`20\A007long\A01AMSB_Long\9F23\A003\8C0D24 V\A51716\BE1E\1804\EA10\D22Chalf\D20B\D112Short(\D211\D10A`20SHORT`20tmp\DD04tm Vp\DD04\AC12\1904\AC13\2C03tmp; X\B813 X`20*\BC2DUL\BD11US\BE16\2B06ret; X\8606\B315\1904\B313\A70E X`20*\7E05void\7D06Mapped_To_Floyd(out,in,chdr_out,chdr_in, X`09`09xipos,yipos,xosize,y\0706xi\0E06isize) XUBYTE`20*out,*in; XXA_CHDR`20*\5609\0A06in; X\DD06\5B0B\1309\5B06`20y\0807\6407`20yisize; X`7B X`20`20\2A06y,flag,csize\B406flag; X`20`20ColorReg`20*cmap_in,\0906out\1F04register\4807x;\5309shift_r,\0806g, V\0806b,coff\3E08SHORT`20*r_ptr,`20*g\0807b_\0806nr\0908\1A08nb_ptr\3B0Cerr_buf Vf,*ge\0B09be\0B08r_err,g_err,b_err\A105BYTE`20*o_ptr; X\1103cflag`20=`20(x11_display_type`20`26`20XA_X11_COLOR)?TRUE:FALSE;\3803if V`20(cmap_cache`20==`200)`20CMAP_Cache_Init();\6304\2B05hdr_out`20!=`20\370A_ch Vdr) X`20`20`7B X`20`20`20`20DEBUG_LEVEL2`20fprintf(stderr,"CACHE:`20clear`20new_chdr`20%lx`5Cn V",(ULONG)c\6607); X\5004\8F0BClear(); X\1804\810F\FE03\3908\2004`7D X`20`20shift_\1A043`20*`20\300Bbits\2504\2106g`20=`202`20\211Bb`20\EF0D\1D08 V\0303csize_out\7E0B->csize\2204cmap_\1E11map\1D05off_\1D11off; X`20\1F03/*`20allocate`20error`20buffers`20*/\1F03rerr_buff\3F03(SHORT`20*)m V\3205(xosize\D203\D604sizeof(short))\7904ge\3B39be\3B39`7B X`20`20`20`20ULONG`20i,moff,msize,m\F407\1E03moff\5A03chdr_in->m\1A0Acoff\1B03 V\2205-`20\2209\3C0B\7E05\3D0Csize\1C06cmap_in\B504ColorReg\B80A(m\5404+`20 V\3005)`20\BC09\2A08\BF06`20`20for(i=0;`20i>`208\6406 V\4314gree\BB04\4319\2106\451Eblue\881D\2105\8920ay\441D\2105\440A`7D X\0404\0503for(x`20=`200;`20x`20<`20xosize;`20x++)`20\1F03`7B X\2E04rerr_buff`5Bx`5D\2C03(USHORT)\8708`20*in\2603`5D.red;\3105ge\3126green; V\3305be\3321++\3303blue\3204\C204flag\BC05\CA08y`20\CA05y`20<`20yo\CA06y++) V\C909o_ptr`20\5E04BYTE`20*)(`20(ULONG)(out)`20+`20xosize`20*`20y);\3305/*`20do Vuble`20buffer`20error`20arrays`20*/\2505if`20(\8D06=`200)`20\1405\7206`20`20r_ V\7406re\E107;`20g_\1306ge\1309b_\1306be\1308\3F07nr\B408SHORT`20\B40C\5309 V\BA0Dsizeof\2F06)`20\C707\4903\7608\4913\8909\4925\AC08\4913\BF09\4924flag V\47031;\1005`7D X\0604else`20 X\0A04`7B X\6F07r_\6F06\EE09;`20\CC09\B909;`20n\9708\8409\6808\4108\B013\5409\B024\7508 V\4813\8809\4824\A908\4813\BC09\4824flag\47030;\1005`7D X\0705if`20(y`20<`20(y\3E06-`201)`20)\1B05`7B X\3806nr_ptr`5B0`5D`20=`20(USHORT)cmap_in`5B`20*in\2303`5D.red;\3008g_ptr\301Fg Vreen;\3208b_ptr\321A++\3203blue\BB0Dfor(x=0;`20x`20255)\1905255\5E08g V`20=`20*g_\3F09g`20\3F05\1704\3F0Cg`20\3F07\1904\3F0Bb`20=`20*b_\3F09b`20 V\3F05\1704\3F0Cb`20\3F07\1904255; X\4007\1D04cmap_median_cache`20==`20TRUE) X\2506`7B X\0806`20`20\FD07\4503(`20`20((ULONG)(r`20`26`20cmap_\1F06mask)`20<<`20shift_r V\4708\4508\0505`7C`20\3F09g`20\3F1Cg) X`09`09`20\310Db`20\311Cb)`20)`20>>`208;\7809DEBUG_LEVEL1`20fprintf(stderr,"c V\D003%lx`20`20rgb`20(\0A04\0404%lx)`20%lx`5Cn",\8103\F907,r,g,b,c\7D0F\6A0Aif V`20(\1E0A`5Bc\3706`5D`20==`200xffff)\2B09`7B X\0A08`20`20color_out`20= X`09`09CMAP_Find_Closest(cmap_out,csize_out,\8A068,8,8,cflag)\860A\5103\8414 V`20(SHORT)\6E09\320A`7D X\0A08else`20 X\A51F`20(ULONG)\6713\5412\0808\5A05\EA4D\0707*o_ptr++\9805BYTE)(\670A+`20coff_ Vout\3710r_err`20=`20r`20-`20(SHORT)(c\7F07`5Bc\4108`5D.red`20>>`208\4009g_ V\3906g`20\391Egreen`20\3B0Db_\3B06b`20\3B1Eblue\3A08 X/* X\3E06if`20(\B606<`20-cmap_floyd_error)`20\D108\1B11\7E08else\450B>`20\441A V\4318\3E04g_\8319\1B06\8324\2A06\8314\4408\831Cb_\8319\1B06\8324\2A06\8314 V\4408\4312*/ X X\4706r_ptr++;\0B03g_\0B09b_\0B06\2608\6804x`20<`20(xosize`20-`201)`20)\1D07 V`7B X`09*r_ptr`20+=`20(7`20*`20r_err)/16; X`09*g_ptr\1B09g_\1B0Bb_ptr\1B09b_err\1B06\5906`7D X\7E0Ay`20<`20(yo\7E14\0806\A508>`200) X`09\9403`20`20*n\DE07\63053`20\990E\2004\F307\2009\9E0C\2004b_ptr\200B\A30B V`09`7D\7909\680E5`20\680D\250A\6D0C\2504\6D0B\250A\720C\2504\720B\E80E<`20(xos Vize`20-`201)`20)`20 X\2008\FC0C`20=`20(USHORT)(cmap_in`5B*in`20`20`5D.red`20`20)`20+`20(S\2006 V\B505/16);\4104`20nr_ptr--\0E05\BE07\4F1Bgreen)\4F0Bg_err\4F0Bg_ptr\4F09b_ptr V\4F17++`5D.blue\9E0Db_\4F0Eb_ptr\4F05`7D X\F806\0806`7D`20/*`20end`20of`20x`20*/ X X\140Ey`20*/ X`20`20if`20(rerr_buff)`20free\100B; X\2206ge\220E\100A\2208be\220E\100A\2208\D907\2007\0E08; X`7D X XUBYTE`20*UTIL_Scale_Mapped(out,in,xi_pos,yi_pos,xi_size,yi_size, X`09xi_buff\0F06xi_scale,yi_scale,xo\1208\0908pix_\3C08o_pos,y\0706xo_size,y V\0807chdr) X\A007out,*in; XULONG`20x\960C;`20`20`20`20`20/*`20pos`20of`20section`20in`20input`20buffer V`20*/ X\3E09\C60C\4004/*`20size\3F0C\2F0C\E309\6C06\2F04row`20\3308\671A\FC06\0907; V`20\670Bfull\3907image`20\380Ao_\3807\0907\3812outp\3912pix_size;`09`09\3204pi Vxel\3806\2309*xo_pos,*yo_pos\FB07pos\FA0Cin\9906/o\6706\D910*xo_size,*yo_ V\7105\A10Coutgoing`20\4F08*/ XXA_CHDR`20*chdr; X/*`20note:`20\7912\730Eis`20always`200,0`20*/ X`7B X`20`20\8506i,y,sx,sy,xvp,yvp,xsize,ysize,xoff; X X X`20`20xvp`20=\F808;`20yvp\0F04\FF07\2003sx\1003(xvp`20*`20xo_scale)`20/`20xi V\0C06\2404if`20(`20((sx`20*`20x\1807\2405\3009<`20\4204)`20sx++\3204xsize V\5904((\1904+`20xi_size)`20\6616)`20+`201`20-`20sx\700B(sx+xsize-1\3805\7A15>= V\BE05+x\6108)`20\3406-;\FF04sy\8604\F604*`20yo_\4109yi\DF12y`20*`20y\650B V\300A<`20\4204)`20sy+\DF05ys\DF09\1904+`20yi_s\DF07\6614\DF09y;\DF0Cy+ysize V\DF06\7A16\DF04yvp+y\DF0A\3406\DF06xoff\8803xvp`20-`20xi_pos\620Axsize==0)`20 V`7C`7C`20(y\0E09)`20\2303`7B X`20`20`20`20DEBUG_LEVEL1`20fprintf(stderr,"SCALE:`20zero`20s\F104%ld`20%ld`5Cn V",xsize,ysize)\7204`20`20*xo_pos\8E03*y\0A09xo_\3A05\1506\0B070;\3105return(0 V\4005`7D X\0503/*`20use`20scale`20buffer`20if`20necessary`20*/\DD07out`20==`200) X\CA08ULONG`20ts\6306xsize`20*`20y\0807pix_size\7A06XA_REALLOC(xa_scale_buff,x V\0E0C_size,t\E30B\7605`20(UBYTE`20*)\2E0D\C50Creadjust`20row`20cache\CE1E V\AE06>`20\5109row_size\DF10*tmp\8B06\3705\2F0Cbuff`20==`200)`20tmp\A705\3306) V`20malloc\6607*`20sizeof\1F06)`20\DB07else\3911rea\3A06\6910,`20\4D1D\9D04 V\4C05\8F05TheEnd1("UTIL_Scale_Mapped:`20row\9F07`20err`5Cn")\4206\DB13\9E04; V`09\190D\8405=`20xsize\3804`7D X\0503y`20=`20sx;`20for(i`20=`200;`20i`20<`20\2506`20i++,y++) X\4A0Ebuff`5Bi`5D`20=`20((y\D703xi\1D06)`20/`20xo\0C06`20)`20-`20xoff; X\6703\E404chdr==0)`20/*`20no`20mapping`20*/\2003`7B X\C804register`20ULONG`20x,yoff; X\1B04yoff\7003yvp`20-`20yi_pos\1906\5A04pix_\DE06=`204)\1705\5106\5311*optr V`20=`20(\0F07)out\4806`20`20for(y=sy;`20y<`20(sy`20+`20ysize);`20y++\5706 V\5903\5311in_r_p\5705 X`09`09(\5A08(in+(((y*yi_scale)/yo_\0A06-yoff)*(xi_buff_size<<2));\6607\8E06x V`20=`200;`20x`20<`20xsize;`20x++)\C506++\1D03\7B08`5B`20xa\5B06_row_buff`5Bx V`5D`20`5D;\4F07`7D X\0606\0604else`20if`20(pix_size`20==`202)\1C05`7B X\3006\E30ASHORT`20*optr\7003(U\1007)out\5D08for(y=sy;`20y<`20(sy`20+`20ysize); V`20y++)\2607`7B`20\5511\BE08\5903 X`09`09(\5C09(in+(((y*yi_scale)/yo\0A07-yoff)*(xi_buff_size<<1));\6807\9006x V`20=`200;`20x`20<`20xsize;`20x++)\C806++\1D03\7C08`5B`20xa\5B06_row_buff`5Bx V`5D`20`5D;\4F07`7D X\0606\0604else\0905`7B X\1D06\D20ABYTE\5E06\5C03(U\0F06)out\4808for(y=sy;`20y<`20(sy`20+`20ysize);`20y V++)\2607`7B`20\5310\A808\5703 X`09`09(\5A08(in+(((y*yi_scale)/yo\0A07-yoff)*xi_buff_size);\6107\8906x`20=`200 V;`20x`20<`20xsize;`20x++)\C006++\1D03\7608`5B`20xa\5606_row_buff`5Bx`5D`20`5D; V\4F07`7D X\0606\0A06else`20/*`20remap`20as`20we`20scale`20*/ X\DD03\2D05\E10ALONG`20x,yoff,moff,*map\5A06\4004\8703chdr->map;`20moff\120Aoff V;`20yoff\1303yvp`20-`20yi_pos\3E06if`20(pix_size`20==`204)\1705\8006\8211 V\F605\4803(U\0F06)out\E008for(y=sy;`20y<`20(sy`20+`20ysize);`20y++\5706\5903 V\530BBYTE`20*in_r_p\5705 X`09`09(\1607)(in+(((y*yi_scale)/yo_\0A06-yoff)*xi_buff_\6606 X`09\CC04moff)`20for(x`20=`200;`20x`20<`20xsize;`20x++)\6404*optr++\C809)map V`5Bi\8707`5B`20xa\6706_row_buff`5Bx`5D`5D-moff`5D; X`09else\6053`5D; X`20`20`20`20`20`20`7D X\0606\0604\6C05\D604pix_size`20==`202)\1C05`7B X\3006register`20USHORT`20*optr\7B05\1007)out\5D08for(y=sy;`20y<`20(sy`20+`20ys Vize);`20y++)\2607`7B`20\550ABYTE`20*\BD08\5803\E003(U\1606)(in+(((y*yi\D306)/y Vo\0A07-yoff)*xi_buff_size); X`09\CE04moff)\8C05x`20=`200;`20x`20<`20xsize;`20x++)\6404*optr++\C90A)map`5Bi V\8807`5B`20xa\6806_row_buff`5Bx`5D`5D-moff`5D; X`09else\6154`5D; X`20`20`20`20`20`20`7D X\0606\0604else\0905`7B X\1D06register`20UBYTE`20*optr\6805\0F06)out\4808for(y=sy;`20y<`20(sy`20+`20ysi Vze);`20y++)\2607`7B`20\5310\A808\5703\CC03\5A09(in+(((y*yi_scale)/yo\0A07-yoff V)*xi_buff_size); X`09if`20(moff)\8C05x`20=`200;`20x`20<`20xsize;`20x++)\6404*optr++\C809)map`5Bi V\8707`5B`20xa\6706_row_buff`5Bx`5D`5D-moff`5D; X`09else\6053`5D; X`20`20`20`20`20`20`7D X\0606\0A06*yo_pos`20=`20sy;`20*yo_size\0F03ysize;\2204xo\2208x;\0E05\2207 V\9506\2203return(out); X`7D X X X/* X`20*\C404`20now`20assum`20xi_pos=y\07060`20and`20\4905are`20multiple`20of`208s V`20 X`20* X`20*/ XUBYTE`20*UTIL_Scale_Bitmap(out,in,xi_size,y\0807 X`09xi_line\0F06xi_scale,yi_scale,xo_s\1206\0908 X`09xo_pos,yo_pos,\DF07,yo_size,ibit_order,o\0B09) X\9A07out,*in; XULONG\E404\900C;`20`20`20/*\E606of`20section`20*/ XU\2F08\AD09\2C04\2F06row`20\3308input`20buffer\380D\D80E;`20\670Bfull\3907imag Ve`20\380A\FE10\3812out\3913*xo_pos,*yo_pos\D807pos\D70Cin\7606/o\4406\B610*xo_ Vsize,*yo_\F306\7E0Boutgoing`20\4F08\3809ibit_order;`09\3204\DB06\1509\290Aob V\290E\8808\2A0C`7B X`20`20\2E06xo_line\8A06\1609i,y,sx,sy,xvp,yvp,xsize,ys\270D*row_b_ptr\1405BYTE V\1406msk_ptr,mask_start,mask_end; X X`20`20xvp`20=`20*xo_pos;`20y\0F06yo_pos;\2003sx\1003(xvp`20*`20xo_scale)`20/ V`20xi_scale\2404if`20(`20((sx`20*`20x\1807\2405\3009<`20\4204)`20sx++\3204 V\C405\5904((\1904+`20xi_size)`20\6616)`20+`201`20-`20sx\700B(sx+xsize-1\3805 V\7A15>=\BE05+x\6108)`20\3406-;\FF04sy\8604\F604*`20yo_\4109yi\DF12y`20*`20y V\650B\300A<`20\4204)`20sy+\DF05ys\DF09\1904+`20yi_s\DF07\6614\DF09y;\DF0Cy+ V\4905\DF06\7A16\DF04yvp+y\DF0A\3406-; X XDEBUG_LEVEL1`20fprintf(stderr,"SCALE`20BITMAP:`20siz`20%ldx%ld`20->`20\0B07 V`5Cn", X`09xi_size,y\0807xsize,ysize); X\652Bpos`20\6519vp,yvp,sx,sy); X X`20`20if`20(`20(xsize==0)`20`7C`7C`20(y\0E09)`20\2303`7B X`20`20`20`20\8322:`20zero\E604e`20\7E04\7707\CA0E\4B04*xo_\2605=`20*y\0B090; V\1D05return(0\2C05`7D X`20`20xo_line\2708X11_Get_Bitmap_Width\C006)`20/`208;\3203/*`20use`20scale`20b Vuffer`20if`20necessary`20*/\FA07out`20==`200) X\E708ULONG`20ts\6D06ysize`20*\840D\A706XA_REALLOC(xa_scale_buff,x\0E0C_size,t V\FC0B\7205`20(UBYTE`20*)\2E0D\F206\C106readjust`20row`20cache\CA1E`20(xsize<<1 V)`20>`20x\5708row_size\E110*tmp\9106\3D04\2F0Dbuff`20==`200)`20tmp\AD05\3306) V`20malloc\6A06`20*`20sizeof\1F06)`20\E107else\3911rea\3A06\6910,(\B709*s\4F0C V\4E07\9E04\4D05\9005TheEnd1("UTIL_Scale_Mapped:`20row\A007`20err`5Cn")\4206 V\DC13\9F04;`20\1C10\D505=`20(\9109\4004`7D X`20`20row_b_ptr\1E03\4E11\2504row_msk_\2306(UBYTE`20*)`26x\2D10`5Bxsize`5D; X X`20`20y`20=`20sx\3F04for(i`20=`200;`20i`20<`20xsize;`20i++,y++) X`20`20`7B X\AD04register`20ULONG`20x\6B04(y`20*`20xi_scale)`20/`20xo\0C08-`20xvp;\3A06 V\C108`5Bi`5D`20=`20x/8\1806if`20(ibit_order`20==`20X11_LSB)`20\D30B\35060x01 V`20<<`20(x%8);\3F05else\291B7`20-`20(x%8)\2F05`7D X\7006ob\7010MSB)`20`7B`20mask_start`20\450480;`20mask_end`20\5606;`20\4504 V\7605\2F11\1E04\2F0D\4004\2F04for(y=sy;`20y`20<`20(sy+ysize);y++)\2003`7B X\CB04register`20ULONG`20x;\160FBYTE`20omsk,odat;\1E14*iptr,*optr\2006iptr V\8B03(U\1F06)(in`20+`20(((y`20*`20yi_scale)`20/`20yo\0C07-yvp)`20*`20xi_line_ V\A906\4D05optr\4D0Dout`20\4E04y`20-`20sy\3605o_\360A\3708msk\3703mask_start; V`20odat\13030;\2105for(x=0;`20x>\1104\4005\4606 V\9108)`20\830F\1E03\2204*xo_pos`20=`20sx;`20\3204*y\1209y;\2207size\1103xsize; V`20*yo_\1207ysize;\2603return(out); X`7D X $ call unpack XANIM_UTILS.C;1 - 961056177 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_x11.c X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X#include`20"xanim.h" X\1309\170BStringDefs.\180Ehell\130Esys/signa\1807fndef`20VMS X\240Etime\4E06endif X\1E0Actype.\550C\AA06_x11.h" X`20 Xvoid`20xanim_expose(); X\150Bkey(\120Eresize\150Fevents\1509X11Setup\110C_Show_Visual\2A0D_OutPut_ V\1B06_Class\200DInit_Image_Struct(\1E09A_Install_CMAP(\360CGet_Shif\2E0B11_Pre V_S\9B12etup_Window(\190CMake_Nice_CHDR\1B09IFF_Buffer_HAM6(\18168(\1808UTIL_Ma Vpped_To_Bitmap\1E18\0A06(); X X X/******\0606\0C0C\0B0B\A904`20stuff`20*/ XDisplay`20`20`20\0303`20*theDisp; Xint`09\1507theScreen; XVisual\1807\2E05\1206; XColormap\340ACmap; XWindow\3208`20mainW; XGC\1209\2E07GC; XXImage\5E0CImage; XXColor\2F09defs`5B256`5D;\F122`20Xt`20\ED09extern`20XA_CHDR`20*xa_chdr_now; V\1D0BANIM_H\2104cur_file\1E09ULONG`20xa_title_flag\1C12anim_flags;\1C08char V\3709`5B`5D\341011_window_x,\0D0By;\5C12llow_resizing\2018nice; X XXtAppContext`20`20theC\0C06; X X#define`20ACTIONTABLE_SIZE`203 XXtActionsRec`20actionTabl\B703`20=`20`7B X`20`20`20\0303`20`20`7B"Expose",`20xanim_expose`7D,\220BConfigure\2509resiz V\250EKeyUp"\2108key`7D X`7D; X Xstatic`20struct`20_resource`20\8204int`20anim; X`7D`20\1908\D50Boffset(field)`20`20`20XtOffset(\4D11*,`20field) X XXtRe\1607application\2B09s`5B\FF08`7B"anim",`20"A\0806XtRBoolean,`20sizeof`20( V\1107),\E906\9207anim),\3104String,`20"False"`20`7D, X\F504\1706\3103Translation`20= X":Expose()`5Cn`5C X:\0B09\1B07KeyUp>:KeyUp()"; X Xvoid`20X11_Get_Shift(mask,shift,size) XULONG`20mask,*shift,*size; X\F804\1C05i,j; X X`20`20i=0;\0703while(`20(i`20<`2032)`20`26`26`20!(mask`20`26`200x01)`20)`20 X`20`20\3F04`20`20\1805>>=`201;\1005i++;\0903`7D X\0B03f`20(i`20>=`2032)\3009fprintf(stderr,"\BD0D:`20wierd`20\5505value`20%lx V`5Cn",mask);\6206`20=`200\6408\D206\1203i;\0E03j=\C118\C030\4C03\C90A*size`20= V`20j; X`7D X XULONG`20\B808True_Color(r,g,b,bits) Xregister`20\2E06\1B0A; X\7804\1F0Ftemp,temp_color; X\2303temp\7403(x11_red_bits`20>=`20bits)?(r`20<<\1D0F-`20bits)) X\BF04\0404\0808\0F0F:(r`20>>`20(\3507\440C))\F404\8A0A`20`20=`20(\8A05<<`20 V\2908shift)`20`26\1109mask\B411green_\B60Fg`20\B608\1F0B\B828\BA04g`20\BA0F V\480A\BC11`7C=\BC0E\2B06\BE0D\1306\C015blue\BF10b`20\BF08\1E0A\BE29:(b`20 V\BD0F\4609\BC21blue_\BB0Dblue_\BA09return(temp\4206); X`7D X Xvoid`20X11_Pre_Setup(argcp,`20argv,xa_user_visual) Xint`20*argcp; Xchar\0D05v`5B`5D; XLONG`20\2F0E; X`7B X`20`20\1905i,vis_num,vis_i;\1803XVisualInfo`20*vis\A605vis_i`20=\4911`20 X\3103tToolkitInitialize()\4A04theContext\3A03XtCreateApplicationC\1D06\2D06XtA VppAddActions(\3D0A,`20actionTable,`20ACTIONTABLE_SIZE)\A105\9D040;\7506Disp V\7205OpenDisplay(\500CNULL,`20"xanim",`20"XAnim",NULL,0,argcp,argv)\5104if`20( V\5509=`20NULL)`20\1803`7B X`20`20`20`20TheEnd1("Unable`20to`20open`20d\7706`5Cn");`20\2A03`7D X\0503vis`20=`20XGetVisualInfo`20\5D08,`20\1506NoMask\A508`26vis_num\8B09(v V\4504\8808`7C`7C`20(\2207\15040)`20)\9B12X11:`20Couldn't`20get`20any`20\6E06s V`5Cn");\A105`20`20else\3F05\4005\6E04\5E06i`20<`200)`20\6D08i`20>`20\9708 V\7005\7208`20`20LONG`20max_csize,max_depth,max_class; X\2B07\1209`20=`20-1;\160Bdepth\16030;\2B0Csize\1506\1607/*`20look`20through V`20visuals`20a`20choose`20a`20good`20one`20*/ X\3506for(i=0;i<\C207;i++\C406\C60A\FC06vis`5Bi`5D.\8E06>`20\9A09\2E08\300C V\B90E\3A0C\C408\F310\2407class\2411\EC07\2408olormap_size\2C0Cvis_i`20=`20i; V\1509`7D X\0A08else\C812==\C90C`09`7B\4E0B\2C0B\A506\F406class)`20\290B`7B X`09`20\3108\0703\350E<`204)`20/*`20pseudo`20or`20less`20*/\410B\0707`7C`7C V\9D0F>`208)\2711\120F\B20C\0505\A409`20=`20v\8A0B; X\2914size\290Bolormap_size\3111vis_i\2D03i;\1A0E`7D X\0C0C\0C0Aelse`20if`20\D508\9607=`20\A309) X`09`20\C203\0503`20`20\290C\870C`20>\AA0A\3005\3209\C324\2907\BB0B\1205`7D`20 V\B40C`20/*`20end`20same`20c\A605*/\2109\1F0Edepth`20\1F09\1D09of\6504`20loop V`20\1E07\1C0Cchoose\2304ual`20*/ X\2205/*`20setup`20up`20X11`20variable\8005\2205theScreen`20\E206vis_i`5D.scree Vn; X\2307Vi\5705\230D\6B06\2306x11_\B906\230Ddepth\220A\FA06\220Dclass\220Bmap_siz Ve\1003\280Eolor\1D08\9709GC\2704DefaultGC(theDisp,t\D508);\E606/*`20Make`20sur Ve\690Fis`20power`20of`20two`20*/\3205`7B`20\0705`20`20ULONG`20\770A`20`20 V\3705=`200x01;`20x11_disp_bit\DC040;\2607while(\2C05<=\740E)`20`7B`20\1906 V\1A03\4410++;`20`7D X\6A0B>>=1\240F--\6608\CC0E\9506`20<<\2F0E\2D06`7D X\0705x11_bit_order`20`20`20=`20BitmapBitOrder(theDisp);\2F05if`20(\330E==`20MS VBFirst)\4E0F=`20X11_MSB\3C06else\2215LS\2207\1D07map_unit\8D09Unit\890Fx11_dep Vth_mask`20=`20(0\EC0Cepth)`20-`201;\2E09cmap_type\2D030;\1703`7D`20/*\9506ther Ve`20are`20visuals`20*/ X X`20`20XFree(vis);`20`20\1104\FF08depth\FB041)\1603`7B X\9209isplay_\6707XA_MONOCHROME;\E30Aytes_pixel\2503\A310flag\1703FALS\340Clack V\1703BlackPixel(theDisp,DefaultScreen(\1607))\3C0Awhit\8F04White\3C29`7D X`20`20else`20 X\E208\FE0E>`2016)`20\D0124;\2D05\3B05\32108)\31132;\310A\1E121; X X\1F04switch(x11_class)\1605`7B X\0705`20`20case`20StaticGray: X`09x11_display_type\4C03XA_STATICGRAY;\2306cmap_flag`20=`20FALSE; X`09break;\5A0CGrayScale:\5918GRAYSCAL\4004\5810TRUE\5715\B106Color:\B21ECOLOR; V\B32CPseudo\5C1EPSEUDO\5C18\B719True\591ETRUE\B332Direct\5A1EDIRECT\5C2Ddefaul Vt: X`09fprintf(stderr,"Unkown`20x11_class`20%lx`5Cn",\1109); X`09TheEnd()\4F06`7D X\0404\0503if`20(\A311`26`20XA_X11_TRUE) X`20`20`7B X\3504x11_red_mask\A603theVisual->r\1607\5D06x11_green_\2A12\180A\2C0Ablue V\2B13\1709\2A06X11_Get_Shift(\8C0D`20,`20`26\1108shift\120Dbits`20`20\F907 V\4612\920A\3407\1106shift\120Dbits\4619\C40A\3407blue_\8D06\120C\8D05\4605`7D X`20`20else`20if`20(`20(x11_depth`20==`2024)`20`26`26`20(x11_cmap_size`20<=`202 V56)`20)`20\1809type`20=`201; X\4E03xa_cmap\1003(ColorReg`20*)`20malloc(\350A\4D05*`20sizeof\2B09)`20)\9704 V\8E04\4907==0)`20fprintf(stderr,"X11`20CMAP:`20couldn't`20\6106`5Cn")\8705 V\420511_verbose_flag\D504TRUE) X`20`20`7B X`20`20`20`20\5810Selected`20Visual:`20`20"); X\2A04X11_OutPut_\1C06_Class(x11_class\2807\5210`20(%lx)`20`5Cn",x11_display_ty Vpe\3218`20depth=`20%ld`20`20class\0C08map`20size=%ld(%ld)`20bytes_pixel=%ld V\6704\5505\0404x11_depth,`20\A609\0B07map_size\0F06disp_bit\1E07\540B`20) V\A406if`20(\BF10`20`26`20XA_X11_TRUE) X\2804`7B X\7B06\D412X11`20Color`20Masks`20=%lx`20\0404%lx\B60D\0808\C006red_mask,x11_gre Ven_mask`20,x11_blue_mask\A607\781EShifts=%ld`20\0404%ld\781Fshift,`20\7A0A V\110Bblue_shift`20)\7D25izes\F504\7D28bits\F50Bbits\F50Bbits\7807`7D X\0604else`20if`20(x11_display_type`20==`20XA_MONOCHROME)\3005`7B X\B418Bit`20Order`20=`20%lx`20`20bitmapunit`20\1206\1106pad`20\1005\C915x11_bit V_order\B806itmap_unit,BitmapPad(theDisp)`20\CE0D\9610`5Cn"\2005`7D X\0503\E604\2403(theVisual`20!=`20DefaultVisual\5608,theScreen))\A207`7C`7C`20( Vx11_display_type`20`26`20XA_X11_TRUE)`20)`20xa_allow_nice\E603FALSE;\4303else V\1E11TRUE; X\1E03/*`20kludges`20*/ X\AA0A!(\731F\9E08`26`26\9E07epth`20==`2024)`20\1508cmap_size`20==`20256\A90511 V_\7306_1\8A09`20`20XSync(theDisp,False); X`7D X X/* X`20*`20Setup`20X11`20D\9406,`20Window`20and`20Toolkit X`20*/ Xvoid\2904_Setup_Window(max_imagex,\0B09y,startx\0706y) XLONG`20\2A15; X\1C05\300D; X`7B X`20`20\1805i;\0A03Widget`20wg\0D04\1705n;\0A03Arg`20arglist`5B20`5D;\EC04WMHin Vts`20xwm_hints; X\1703if`20(`20`20\0404`20(theVisual`20==`20Default\1106(theDisp,theScreen)) V\3D03\3503\0505`26`26`20(cmap_play_nice\4204TRUE)`20)`20\2907`7C`7C`20(x11_dis Vplay_type\2704XA_MONOCHROME)\2D06\0704\E904`20`20DEBUG_LEVEL1`20fprintf(stderr V,"using`20default`20cmap`5Cn")\EE04`20`20theCmap`20=\CA08Colormap\CC13\3206x11 V_cmap_flag\3803FALSE;`20/*`20if`20n\D504*/\2903`7D X`20`20else\A326creat\A604new`20\A20Eif`20(`20`20`20(x11_display_type`20`26`20X VA_X11_STATIC) +-+-+-+-+-+-+-+- END OF PART 7 +-+-+-+-+-+-+-+- Submitted-by: hevans@estwn4.wm.estec.esa.nl (Hugh D.R. Evans, ESTEC, (31) 1719-85109) Posting-number: Volume 5, Issue 14 Archive-name: xanim/part08 -+-+-+-+-+-+-+-+ START OF PART 8 -+-+-+-+-+-+-+-+ X\2E04\0404`7C`7C\3217==\3304DIRECTCOLOR)\3409\0404`26`26`20(theVisual`20!=`20D VefaultVisual(theDisp,theScreen))\3F0C)`20\0F09theCmap`20=`20XCreateColormap V\4409RootWindow\5713, X`09`09`09`09\0303\8D09,`20AllocNone); X\6304else\6F60All\6E07if`20(\6609=`200)`20TheEnd1("X11_Setup_\6106:`20create V`20c\2D04err"\4405`7D X`20`20n`20=`200; X#ifdef`20XtNvisual\1A03XtSetArg(arglist`5Bn`5D,`20\2109,`20\9A09);`20n++; X#endif X\3A1Acolormap\3C05Cmap\3A08\331Adepth,`20x11_depth\3222foreground,`20WhitePixe Vl(theDisp,theScreen))\4B21back\4B08Black\4B3BorderColor\9741width,`20startx) V\2F21height\3007y)\3009if`20(xa_allow_resizing==TRUE)\1F03`7B X`20`20\551AallowShellResize,`20True)\5D09`7D X`20`20else\4921maxW\D006max_image\D40B\381DHe\D906\3909\DD0B\8004\3B18translat Vions,`20 X`09`09`09XtParseT\190ATable(\110B))\5C09wg`20=`20XtAppCreateShell("xanim",`20" VXAn\0905applicationShellWidgetClass,`20 X\DD04\0404\0808\0909theDisp,`20a\B706,`20n); X\D005GetApp\5508Resources`20(wg,`20`26re\1006\7A0D_r\2608, X\7319\0404XtNumber(a\3D14),`20NULL,`200\8C08RealizeWidget(wg\1806mainW`20=`20X VtWindow\1909if`20(x11_display_type`20==`20XA_MONOCHROME) X`20`20`7B X\8E04i`20=`20X11_Get_Line_Size(max_imagex); X\2704theImage\2E04CreateImage(theDisp,theVisual, X`09`09`09x11_depth,XYPixmap,0,0,\560A\0B0Ay,\3108bytes_pixel,i)\7704`7D X`20`20else\AD09\8638ZP\8534(x\110E`20*`20m\3D09))\A208if`20(\990A=`200)\AC05fp Vrintf(stderr,"X11`20Setup:`20create`20i\3205failed`5Cn"); X\3903xwm_hints.flags`20=`20InputHint\7104XSetWMHints(\F608mainW,`26x\3A08 V\9A05XMapWindow\280E\6606\B404x11_cmap_flag\B904FALSE)`20/*`20static`20or`20mo Vnochrome`20displays`20*/ X`20`20`7B X\E504ULONG`20i;\F206or(i=0;i>`205`20);\4C05 V`7D X\0404`20`20else`20/*`20Copy`20Default`20Colormap`20into`20new`20one`20*/\3003 V`7B X\3E04ULONG`20i,csize; X\1405csize\9203CellsOfScreen(D\5306\0E06OfDisplay(theDisp))\8E06if`20(\4006> V`20x11_cmap_size)`20\5708\170D\3606for(i=0;`20i>`205`20);\4C07if V`20(x11_display_type`20`26`20XA_X11_GRAY) X\2A06`7B X\0806`20`20\EA0B\FA05\900F\5B08\290A\F908\2921\F608\2917`7D X\2F0Epixel`20=`20i;`20/*`20probably`20redundant`20*/ X\320Eflags`20=`20DoRed`20`7C`20DoGr\9C04\0A04Blue\6A06\6806XStoreColors(theDis Vp,theCmap,defs,csize);\2E03\3204XSetWindowColormap\3609`20mainW,`20\3E07); X#ifndef`20NO_INSTALL_CMAP\4704InstallC\4510\3D0Bendif X`7D X Xvoid`20xanim_resize(wg,`20event,`20str,`20np)\CE05\0404Widget\0E08`20`20wg V\F006\EE05ConfigureEvent\1203*event\220AString\3D09*str\1D0Ain\580B\1D03np; X`7B X\1803f`20(event->window`20==`20mainW)\1E03\2204`20`20x11_\1D06_x`20=\BE06->wid Vth;\2110y`20\2109height\2206DEBUG_LEVEL1`20 X`09fprintf(stderr,"X11`20RESIZE`20%ldx%ld`5Cn",\780C\0D0Cy)\5504`7D X`7D X Xvoid`20xanim_expose(wg,\8106,`20str,`20np)\8205\0404Widget\0E08`20`20wg\9E06 V\0404XExposeEvent\0F03*event\1F0AString`20\0F08*str\1D0Aint\550A\1D03np; X`7B X`20if`20(xa_anim_status`20==`20XA_UNSTARTED)`20 X`20\2903`20xa\260E\2504RUN_NEXT\6704\2008holdoff`20=`20TRUE\1A04XtAppAddTimeOu Vt(theContext,`201,`20ShowAction,\5404SHOW_NORM); X`20`7D X`7D X Xvoid`20xanim_key(wg,`20event,`20str,`20np) XWidget\DF0Awg; XXKeyEvent\F207event; XString\2A09*str; Xin\3D0B\1503np; X\F504char\190Cbuff`5B16`5D\D704KeySym`20\1C09ks\ED05ComposeStatus`20`20st V\1604ULONG`09`09`20`20length;\1303\0A06`20=`20XLookup\9806(e\DA06buff,`2016, V`20`26ks,`20`26st);\3503if`20(\3907!=`201)`20return\1B04switch(b\A2040`5D) X`20`20\C104\C303ase`20'q':\0E0BQ': X`09TheEnd(); X`09break\4504\2108g': X`09xa_anim_flags`20`26=`20`7E(ANIM_CYCLE); X`09break; X`20`20`20`20case`20'r': X`09if`20(xa_chdr_now`20!=`200)`20XA_Install_CMAP\220C\4B15.':`20\4C06\1303(xa_ Vanim_status`20==\5004STOP_NEXT) X`09\3904`7C`7C\291CPREV)`20) X`09`7B X\2E03\2810\2706EP_NEXT; X`09`20`20\C707anim_holdoff`20==`20TRUE)`20return\2805\2411\2305\1B05XtAppAddTi VmeOut(theContext,`201,`20ShowAction,\7F05HOW_NORM); X`09`7D X`09else`20\A816\F807; X`09break; X`20\FF03case`20',':`20 X`09if`20(\1303\C109\3F08\400E) X\A503`20`20`7C`7C\291CPREV)`20) X`09`7B X\EE0B\900EEP_PREV\F505\7B04\2608holdoff`20==`20TRUE)`20return\2805\2411\2305 V\1B05XtAppAddTimeOut(theContext,`201,`20ShowAction,\7F05HOW_NORM); X`09`7D X`09else`20\A816\CF07; X`09break; X`20\FF03case`20'>':`20 X`09if`20(\1303\C109\3F08\400ANEXT) X\A503`20`20`7C`7C\291CPREV)`20) X`09`7B X\EE0B\900CFILE_NEXT\F505\7B04\2608holdoff`20==`20TRUE)`20return\2805\2411 V\2305\1B05XtAppAddTimeOut(theContext,`201,`20ShowAction,\A605HOW_NORM); X`09`7D X`09else`20\A820break; X`20\FF03case`20'<':`20 X`09if`20(\1303\C109\3F08\4005STOP_NEXT) X\A503`20`20`7C`7C\291CPREV)`20) X`09`7B X\EE0B\9011PREV\F505\7B04\2608holdoff`20==`20TRUE)`20return\2805\2411\2305 V\1B05XtAppAddTimeOut(theContext,`201,`20ShowAction,\A605HOW_NORM); X`09`7D X`09else`20\A820break; X`20\FF03case`20'`20':`20 X`09switch(\3E0E\FC08\2905XA_RUN_NEXT:`20`20`20 X`09`09x\6B13STOP_NEXT;`20\2203\6D07\430FPREV\4320PREV;\4316\6309\4403\4317 V\A908;`20\2204if`20(\2608holdoff`20==`20TRUE)`20return;\490B\2309\2205\1A04XtA VppAddTimeOut(theContext,`201,`20ShowAction,\A005HOW_NORM);\C01APREV\C01EPREV V\C097EP_NEXT:\C01DNEXT\C006\4317PREV\431EPREV\4318FILE\863FFILE_\8636default: V\3717STOP\7B07\370B`7D X`20`20`20`20\0404if`20(xa_title_flag`20=\3805TITLE_FILE) X\2C08`7B X\0A08\3806\0703(xa_\740D\EF0D\3B0A\0606`7C`7C\311BPREV)`20\330C`7B X\E003`20`20sprintf(\A708,"XAnim:`20%s",cur_file->name);\720DXStoreName(theDisp V,mainW,x\4B07\300D`7D X\0A0A\0604break;\0B03`7D X`7D X Xvoid`20xanim_events() X`7B X`20XtAppMainLoop(theContext); X`7D X X/*`20PODNOTE: X`20*`20macro`20this`20 X`20*/ XULONG`20X11_Get_Line_Size(xsize) X\1F06xsize; X\6C03`20U\1105line_\1506\1403if`20(x11_display_type`20==`20XA_MONOCHROME) V\DB08\3C09`20=\7809Bitmap_Width\7B07`20/`208\FA04else\340Dxsize\CA03x11_bytes_ Vpixel;\2C03return(l\2E08); X`7D X X\1903/*\7E04*`20What's\FF05!?`20Direct`20access`20to`20X11`20structures.`20tsc Vh\0505. X\3F04/ Xvoid\B505Init_Image_Struct(image,xsize,ysize) XXImage`20*image; XULONG`20\220B; X`7B X`20`20\1706\B409; X\1403\F00CX11_Get_Line_Size(x\DC07`20`20image->width`20=`20xsize\180Bheight V\1903\6F07\1909bytes_per_line\2103\7F0B`7D X\E70AOutPut_Visual_Class(vis_class) X\BB06\1109\D006switch\270C`20`20\1804`20case`20StaticGray:`20`20fprintf(stderr V,"S\1D09");`20break;\3A09GrayScale:\1203\3A10\1D09\3913\5606Color:\7317Color V\3B13Pseudo\3B17\1D0B\3B13True\3907\AF12\1D09\3913Direct\7417\1D0B\3B0D`7D X`7D X Xvoid`20X11_Show_Visuals() X`7B\2103LONG`20i,vis_num\3304XVisualInfo`20*vis; X\1503vis`20=`20XGetV\1E0A(theDisp,`20\1506NoMask,`20NULL,`20`26v\5406);\4003if V`20((v\4504=`20NULL)`20`7C`7C`20(\2207\15040)`20)\2803\9304`20`20\DE10X11:`20C Vouldn't`20get`20any\7507s`5Cn"\6305`20`20return\F706`20`20else\520Aor(i=0;i\F708\140C\1307if`20(\2C06=`200)`20TheEnd1("X11_Get_Colormap: V`20\52070"\6305\3804\3725\360Dfor(i=0;i<\B50D;i++) X`20`20`7B X`20`20`20`20ULONG`20r,g,b;\1105r`20=`20cmap`5Bi`5D.red`20`20`20=`20(USHORT)def Vs\1807;`20\2E05g`20\2E0Agreen`20\2E12green\3007b`20\300Ablue\5E14blue\2F07 V\5B0Aay\2A03\2B09(`20((r`20*`2011)`20+`20(g\0B046)\0B04b`20*`205))`20>>`205 V`20)\4707\4606\4103i;\1005DEBUG_LEVEL3`20fprintf(stderr,"`20%ld)`20<%lx`20 V\0404%lx>`20%lx`5Cn",i,r,g,b,chdr->\9D0C);\5903`7D X X`7D X Xvoid`20X11_Make_Nice_CHDR(chdr) XXA_CHDR`20*chdr; X`7B X`20`20ColorReg`20*old_cmap,*new_cmap\5704ULONG`20i,*old_\1E09\1D0Dold_csize,ol Vd_msize; X\1E03if`20(`20!(x11_display_type`20`26`20XA_X11_CMAP))`20return;\3203\0303 V\8608`20=`20c\E909\1C04\8007`20`20\1908\180Bcsize\320A\8206\3307\1B0D\9D0A/* V`20try`20allocating`20colors`20*/ X`20`20for(i=0;i<\5F09;i++) X`20`20`7B X`20`20\DC06\D91AGRAY\2C04\2E08`20`20defs`5Bi`5D.red`20=`20\0E08green`20\100Abl Vue\0F03old_cmap\2306ay\CC04`20`20`7D X\0604else\5A19`20`20\3D0Ered\3C06\270A\7308\640Eeen\2910\8C05\290Fblue\8D0C V\2C08flags`20=`20DoRed`20`7C`20DoGr\6704\0A04Bl\3408XAllocColor(theDisp,theCma Vp,`26\4B07);\2B03\5D04\0303/*`20Query`20the`20cmap`20*/ X`20`20for(i=0;i\C706\C60F\210D\C406\8508\1B04`7D X\0503\9A04old_ms\4104!=\420E) X`20`20`7B X\4604new_\4306(ULONG`20*)malloc(x\310C`20*`20sizeof\2606)`20\A607\6704\4309= V`200)`20TheEnd1("X11_Make_Nice_CHDR:`20\FF1F\FE10\BD06\FE1B\FD0A\FC09`20`20 V\0303\1E07off`20=`20\0D06co\0D050;\1F03for(i=0;i<\5A0Ei++)\1F03`7B X\6204ULONG`20r,g,b\7306r`20\4C09map`5Bi`5D.red`20`20`20=`20defs\1007;`20\2C05g V`20\2C10green`20\2C0Agreen\2E07b`20\2E10blue\5A0Cblue\2D07\5710ay\2803(USHORT) V(`20(`20(r`20*`2011)`20+`20(g`20*`2016)\0B04b`20*`205)`20)`20>>`205`20);\4D0B V\4C06\4703i;\1605DEBUG_LEVEL3`20fprintf(stderr,"`20%ld)`20<%lx`20\0404%lx>`20% Vlx`5Cn",i,r,g,b,\A312\6F05`7D X`7D X $ call unpack XANIM_X11.C;1 - 929682027 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X/* X`20*`20xanim_x11.h X`20*\1204Copyright`20(C)`201990,1991,1992,1993`20by`20Mark`20Podlipec.`20 V\3804All`20rights`20reserved. X\5306This`20software`20may`20be`20freely`20copied,`20modified`20and`20redistri Vbuted X\4203without`20fee`20provided`20that`20this`20cop\B407notice`20is`20pr\8607 V\9E05intact`20on`20all`20copies`20\6B04\7809\1406\B304\3105Ther\4805no`20warra Vnty`20or`20other`20guarantee`20of`20fitness\0B04\8E05\EA08\4C05It\8D06\B407sol Vely`20"as`20is".\6704`20author(s)`20disclaim(s)`20all\4004responsibility`20 V\B304liab\0E06with\2205ect`20to\7F0E's`20usage\4604or`20its`20effect`20upon V`20hardware\1C04computer`20systems. X`20* X`20*/ X X/********\0808\1010***`20X11`20stuff\3304extern`20Display`20`20`20\0303`20*the VDisp; X\1F07int`20\1C07\0303theScreen\2009Colormap\2009Cmap\1E09Window\3E08mainW; V\1C08GC\590B\3A04GC\1C09XImage\1C08*theImage\200AColor\3D09defs`5B256`5D; X/\FF1A\0606`20Xt`20new`20stuff`20*/\5309tAppContext\C906\0C06; X\2208void`20xanim_expose();\1C13key(\1915quit\1A16events\1C10ShowAnimation( V\1D14ct\1A13Cycle_It(); X\190DX11Setup\3110X11_Show_Visuals\390CULONG`20xa_cmap_size\3C09\1B0711_kludge V_1; $ call unpack XANIM_X11.H;1 - 2071003540 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $ v=f$verify(v) $ exit