/***************************************************************************
 *
 *   NAME 
 *      XORDLTAshort -- unpack an animation frame
 *
 *   SYNOPSIS
 *      XORDLTAshort( bm, deltaword );
 * 
 *      struct BitMap *bm;
 *      UWORD *deltaword;
 *
 *   DESCRIPTION
 *	Uses the ANIM XOR, offset/number, vertical compression technique
 *      for unpacking animation frames.
 *
 *      copyright (c) 1987 Martin D. Hash
 *
 *   LAST EDITED
 *      Martin Hash			  23 Aug 1987
 *
 *   EDIT HISTORY
 *      22 Mar 1987  MH  Created.
 *      16 Aug 		 ANIM standard.
 *
 **********************************************************************/

#include <exec/types.h>
#include <intuition/intuition.h>
#include "df1:ANIMCons.h"

/* FUNCTION */

int XORDLTAshort( bm, deltaword )

struct BitMap *bm;
UWORD *deltaword;
{
   /* LOCAL VARIABLES */

   int i;
   LONG *deltadata;
   register WORD *ptr, *planeptr;
   register int s, size, nw;
   register WORD *data, *dest;

   /* CODE */
   
   deltadata = (LONG *)deltaword;
   nw = bm->BytesPerRow >>1;

   for (i = 0; i < bm->Depth; i++) {
      planeptr = (WORD *)(bm->Planes[i]);
      data = deltaword + deltadata[i];
      ptr  = deltaword + deltadata[i+8];
      while (*ptr != -1) {
         dest = planeptr + *ptr++;
         size = *ptr++;
         if (size < 0) {
	    for (s = size; s < 0; s++) {
	       *dest ^= *data;
	       dest += nw;
	    }
            data++;
         }
	 else {
	    for (s = 0; s < size; s++) {
	       *dest ^= *data++;
	       dest += nw;
            }
         }
      }
   }
   return(0);
}

