/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1993 by Xerox Corporation.  All rights reserved. */
/* time: July 28, 1993 10:19:34 am PDT */
/* C2C version: April 20, 1993 (sun4) */
/* ref-counting: off */
/* file: ImagerImageWorksImpl, module: ImagerImageWorksImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [500095483,881983743] ImagerImageWorksImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef word (*fPt)();
typedef struct {word f0, f1;} W2;
typedef W2 *W2Pt;
typedef struct {word f0, f1, f2, f3;} W4;
typedef W4 *W4Pt;
typedef struct {word f0, f1, f2;} W3;
typedef W3 *W3Pt;
#define SOURCE(p, l) /* source p, l */
static float fc23 = 1.0;
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
#define MAX(cast, x, y)  ( ( cast x) > ( cast y) ? (x) : (y) )
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
#define IOP2(op, x, y)  ( (word) ((x) op (y)) )
static float fc83 = 0.0;
static float fc88 = 2.0;
#define MIN(cast, x, y)  ( ( cast x) < ( cast y) ? (x) : (y) )
#define INEG(x)  ( (word) ( - ((int) (word) (x)) ) )
static void NoName←Q2424();
static void ImagerImageWorksImpl←P0();
static word BufferedMaxSampleValue←P60();
static void BufferedGetSamples←P120();
static word MakeBufferedPixelArray←P180();
static void DrawBufferedImage←P240();
static word InterleavedSamplesMaxSampleValue←P300();
static word ObtainBuffer←P360();
static void ReleaseBuffer←P420();
static word SalvageBuffer←P480();
static void InterleavedSamplesGetSamples←P540();
static word MakeInterleavedPixelArray←P600();
static void DrawInterleavedImage←P660();
static void GetUnsafeBlock←P720();
static word ChooseOverlap←P780();
static word ChooseBandSize←P840();
static void StreamImage←P900();
static struct {unsigned f; char r[4];} string1 = {131076, "\216\251\000"};
static struct {unsigned f; char r[4];} string2 = {65537, "\001\000\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\035\316\331\373\300\064\222\000\377\100\370\000\000"};
static struct {unsigned f; char r[4];} string4 = {131074, "\003\001\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\035\316\331\373\300\064\222\000\377\100\200\000\000"};
static struct {unsigned f; char r[16];} string6 = {851984, "\257\300\260\302\146\322\300\075\027\134\123\100\354\000\000"};
static struct {unsigned f; char r[12];} string7 = {589833, "\011\000\004\100\240\040\001\030\001\000\000"};
static struct {unsigned f; char r[16];} string8 = {851984, "\257\300\035\316\331\373\300\064\222\000\377\100\324\000\000"};
static struct {unsigned f; char r[4];} string9 = {131074, "\004\011\000"};
static struct {unsigned f; char r[20];} string10 = {1179668, "InterleavedSamples\000"};
static struct {unsigned f; char r[20];} string11 = {1048596, "BufferedPixelMap\000\000\000"};
static struct {unsigned f; char r[16];} string12 = {851984, "\257\300\035\316\331\373\300\064\222\000\377\100\164\000\000"};
static struct {unsigned f; char r[16];} string13 = {786444, "\006\004\040\001\044\001\050\001\100\120\004\003\000\000\000"};
static struct {unsigned f; char r[16];} string14 = {851984, "\257\300ZT?\010\300\370;=;@h\000\000"};
static struct {unsigned f; char r[16];} string15 = {851984, "\257\300\170\002\151\000\300\332\212\147\067\100\150\000\000"};
static struct {unsigned f; char r[16];} string16 = {851984, "\257\300\213\226\301\143\300\072\355\320\373\100\150\000\000"};
static struct {unsigned f; char r[16];} string17 = {851984, "\257\300\121\117\377\026\300\315\013\026\004\100\150\000\000"};
static struct {unsigned f; char r[16];} string18 = {851984, "\257\300\015\277\004\146\300\034\367\146\045\100\164\000\000"};
static struct {unsigned f; char r[16];} string19 = {851984, "\257\300\243\162\130\311\300\344\000\142\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string20 = {851984, "\257\300\354\360\322\243\300\071\057\173\326\100\150\000\000"};
static struct {
   word f0[22]; word f22; word f23; word f24; 
   word f25; word f26; word f27; word f28; 
   word f29; word f30; word f31; word f32; 
   word f33; word f34; word f35; word f36; 
   word f37; word f38; word f39; word f40; 
   word f41; word f42; word f43; word f44; 
   word f45; word f46; word f47; word f48; 
   word f49; word f50; word f51; word f52; 
   word f53[8]; 
   } globalframe = {
   {0}, (word) StreamImage←P900, 0, (word) ChooseBandSize←P840, 
   0, (word) ChooseOverlap←P780, 0, (word) GetUnsafeBlock←P720, 
   0, (word) DrawInterleavedImage←P660, 0, (word) MakeInterleavedPixelArray←P600, 
   0, (word) InterleavedSamplesGetSamples←P540, 0, (word) SalvageBuffer←P480, 
   0, (word) ReleaseBuffer←P420, 0, (word) ObtainBuffer←P360, 
   0, (word) InterleavedSamplesMaxSampleValue←P300, 0, (word) DrawBufferedImage←P240, 
   0, (word) MakeBufferedPixelArray←P180, 0, (word) BufferedGetSamples←P120, 
   0, (word) BufferedMaxSampleValue←P60, 0, (word) ImagerImageWorksImpl←P0, 
   {0}
   };

static void NoName←Q2424()
   {
   register ptr gf←c0234 =  (ptr) &globalframe;
   word var←c23760;
   (* (( (ptr) gf←c0234)+11) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2);
   (* (( (ptr) gf←c0234)+14) ) = (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4);
   (* (( (ptr) gf←c0234)+16) ) = (word) XR←GetTypeIndex((word) &string5, 0, (word) &string2);
   (* (( (ptr) gf←c0234)+17) ) = (word) XR←GetTypeIndex((word) &string6, 0, (word) &string7);
   (* (( (ptr) gf←c0234)+19) ) = (word) XR←GetTypeIndex((word) &string8, 0, (word) &string9);
   (*  (ptr) (( (bPt) gf←c0234)+80) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0234)+11) ), (word) &string10);
   (*  (ptr) (( (bPt) gf←c0234)+84) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0234)+11) ), (word) &string11);
   (void) XR←DeclareGlobalFrame((word) "ImagerImageWorksImpl", &globalframe, (word) XR←GetTypeIndex((word) &string12, 0, (word) &string13)
      , (word) (( (bPt) gf←c0234)+208)/* var←c21616 */ );
   var←c23760 = (word) XR←ImportInterface((word) "ImagerColor", (word) XR←GetTypeIndexS((word) (&string14)), 32);
   (* (( (ptr) gf←c0234)+55)/* var←c21680 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 67896835);
   (void) XR←ImportProcS(var←c23760, 67372801);
   var←c23760 = (word) XR←ImportInterface((word) "ImagerPixelArrayPrivate", (word) XR←GetTypeIndexS((word) (&string15)), 2);
   (* (( (ptr) gf←c0234)+54)/* var←c21648 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 68944135);
   (void) XR←ImportProcS(var←c23760, 68681734);
   var←c23760 = (word) XR←ImportInterface((word) "ImagerSample", (word) XR←GetTypeIndexS((word) (&string16)), 60);
   (* (( (ptr) gf←c0234)+56)/* var←c21872 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 267009);
   (void) XR←ImportProcS(var←c23760, 68425474);
   (void) XR←ImportProcS(var←c23760, 1322500);
   (void) XR←ImportProcS(var←c23760, 68686339);
   (void) XR←ImportProcS(var←c23760, 67377409);
   (void) XR←ImportProcS(var←c23760, 67896579);
   (void) XR←ImportProcS(var←c23760, 67633410);
   (void) XR←ImportProcS(var←c23760, 68949507);
   (void) XR←ImportProcS(var←c23760, 67905026);
   (void) XR←ImportProcS(var←c23760, 1050372);
   (void) XR←ImportProcS(var←c23760, 2107398);
   var←c23760 = (word) XR←ImportInterface((word) "ImagerTransformation", (word) XR←GetTypeIndexS((word) (&string17)), 55);
   (* (( (ptr) gf←c0234)+58)/* var←c22096 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 269756930);
   (void) XR←ImportProcS(var←c23760, 67635458);
   (void) XR←ImportProcS(var←c23760, 67634689);
   var←c23760 = (word) XR←ImportInterface((word) "IO", (word) XR←GetTypeIndexS((word) (&string18)), 103);
   (* (( (ptr) gf←c0234)+59)/* var←c23632 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 68160002);
   var←c23760 = (word) XR←ImportInterface((word) "SF", (word) XR←GetTypeIndexS((word) (&string19)), 19);
   (* (( (ptr) gf←c0234)+57)/* var←c22032 */  ) = var←c23760;
   (void) XR←ImportProcS(var←c23760, 135270145);
   (void) XR←ImportProcS(var←c23760, 134742273);
   var←c23760 = (word) XR←ExportInterface((word) "ImagerImageWorks", (word) XR←GetTypeIndexS((word) (&string20)), 3);
   (* (( (ptr) gf←c0234)+60)/* var←c23792 */  ) = var←c23760;
   (void) XR←ExportProcS(var←c23760, (word) (( (bPt) gf←c0234)+176)/* var←c21488 */ , 2359302, (word) "DrawBufferedImage");
   (void) XR←ExportProcS(var←c23760, (word) (( (bPt) gf←c0234)+120)/* var←c21264 */ , 2621703, (word) "DrawInterleavedImage")
   ;
   (void) XR←ExportProcS(var←c23760, (word) (( (bPt) gf←c0234)+88)/* var←c21136 */ , 2621962, (word) "StreamImage");
   }

static void ImagerImageWorksImpl←P0(formal←c032, formal←c031)
   word formal←c032;
   word formal←c031;
   {
   register ptr gf←c23824 =  (ptr) &globalframe;
   /* ImagerImageWorksImpl: */ 
SOURCE(194, 12241)
SOURCE(765, 190)
   {
      word pd21;
      pd21 = (* (( (ptr) (* (( (ptr) gf←c23824)+54)/* var←c21648 */  ))+4) );
      (* (( (ptr) gf←c23824)+8)/* bufferedClass←v3196 */  ) = (word) ( *( (fPt) ((*  (ptr) pd21 ))))((* (( (ptr) gf←c23824)+21)
          ), (word) (( (bPt) gf←c23824)+200)/* var←c21584 */ , 0, (word) (( (bPt) gf←c23824)+192)/* var←c21552 */ , 0, 0, pd21);
      };
SOURCE(3157, 55)
   {
      word pd22;
      pd22 = (* (( (ptr) (* (( (ptr) gf←c23824)+55)/* var←c21680 */  ))+11) );
      (* (( (ptr) gf←c23824)+9)/* black←v3336 */  ) = (word) ( *( (fPt) ((*  (ptr) pd22 ))))((*  (ptr) (&fc23) ), pd22);
      };
SOURCE(4013, 222)
   {
      word pd24;
      pd24 = (* (( (ptr) (* (( (ptr) gf←c23824)+54)/* var←c21648 */  ))+4) );
      (* (( (ptr) gf←c23824)+10)/* interleavedSamplesClass←v3392 */  ) = (word) ( *( (fPt) ((*  (ptr) pd24 ))))((* (( (ptr) gf←c23824)+20)
          ), (word) (( (bPt) gf←c23824)+168)/* var←c21456 */ , 0, (word) (( (bPt) gf←c23824)+136)/* var←c21328 */ , 0, 0, pd24);
      };
   }

static word BufferedMaxSampleValue←P60(pa←v3908, i←v3936)
   word pa←v3908;
   word i←v3936;
   {
   register ptr gf←c23856 =  (ptr) &globalframe;
   word var←c3980;
   word data←v6692;
   word map←v6720;
   /* BufferedMaxSampleValue: */ 
SOURCE(1023, 230)
SOURCE(1117, 40)
   data←v6692 = XR←Narrow((* (( (ptr) pa←v3908)+6) ), (* (( (ptr) gf←c23856)+16) ));
SOURCE(1159, 28)
   {
      word var←c21712;
      var←c21712 = (*  (ptr) data←v6692 );
      {
         word limit25;
         map←v6720 = (* ((( (ptr) var←c21712)+6)+(
               limit25 = (* (( (ptr) var←c21712)+5) ),
               BCK(i←v3936, limit25)
               )) );
         };
      };
SOURCE(1189, 64)
   return(((word) Basics←BITSHIFT(1, (* (( (ptr) map←v6720)+5) )) - 1));
   }

static void BufferedGetSamples←P120(pa←v4040, i←v4068, s←v4096, f←v4124, buffer←v4152, start←v4180, count←v4208)
   word pa←v4040;
   word i←v4068;
   word s←v4096;
   word f←v4124;
   word buffer←v4152;
   word start←v4180;
   word count←v4208;
   {
   register ptr gf←c23888 =  (ptr) &globalframe;
   word data←v6776;
   word map←v6804;
   word loFill←v6832;
   word hiFill←v6860;
   word dataCount←v6888;
   word sSize←v6916;
   word fSize←v6944;
   /* BufferedGetSamples: */ 
SOURCE(1259, 1034)
SOURCE(1401, 40)
   data←v6776 = XR←Narrow((* (( (ptr) pa←v4040)+6) ), (* (( (ptr) gf←c23888)+16) ));
SOURCE(1443, 28)
   {
      word var←c21776;
      var←c21776 = (*  (ptr) data←v6776 );
      {
         word limit26;
         map←v6804 = (* ((( (ptr) var←c21776)+6)+(
               limit26 = (* (( (ptr) var←c21776)+5) ),
               BCK(i←v4068, limit26)
               )) );
         };
      };
SOURCE(1473, 43)
   {
      word x27;
      loFill←v6832 = (x27 = ((* (( (ptr) data←v6776)+1) ) - f←v4124),
         MAX((int)(word), x27, 0));
      };
SOURCE(1518, 64)
   {
      word x28;
      hiFill←v6860 = (x28 = ((f←v4124 + count←v4208) - ((* (( (ptr) pa←v4040)+3) ) - (* (( (ptr) data←v6776)+1) ))),
         MAX((int)(word), x28, 0));
      };
SOURCE(1584, 36)
   dataCount←v6888 = ((count←v4208 - loFill←v6832) - hiFill←v6860);
SOURCE(1622, 31)
   {
      word idx29;
      sSize←v6916 = (
         idx29 = (* (( (ptr) (*  (ptr) data←v6776 ))+3) ),
         SGNCK(idx29)
         );
      };
SOURCE(1697, 31)
   {
      word idx30;
      fSize←v6944 = (
         idx30 = (* (( (ptr) (*  (ptr) data←v6776 ))+4) ),
         SGNCK(idx30)
         );
      };
SOURCE(1772, 23)
   s←v4096 = (s←v4096 - (* (( (ptr) data←v6776)+1) ));
SOURCE(1797, 55)
   if (( (int)s←v4096 <  (int)0)) {
SOURCE(1811, 11)
      s←v4096 = 0;
      }
   else {
SOURCE(1822, 30)
      if (( (int)s←v4096 >=  (int)sSize←v6916)) {
SOURCE(1841, 11)
         s←v4096 = (sSize←v6916 - 1);
         };
      };
SOURCE(1854, 154)
   if (( (int)dataCount←v6888 >  (int)0)) {
SOURCE(1878, 130)
      {
         W2 var←c21808;
         W2 var←c21840;
         var←c21808.f0 = s←v4096;
         var←c21808.f1 = ((f←v4124 - (* (( (ptr) data←v6776)+1) )) + loFill←v6832);
         var←c21840.f0 = 0;
         var←c21840.f1 = 1;
         {
            word pd31;
            pd31 = (* (( (ptr) (* (( (ptr) gf←c23888)+56)/* var←c21872 */  ))+44) );
            (void) ( *( (fPt) ((*  (ptr) pd31 ))))(map←v6804, var←c21808, var←c21840, buffer←v4152, SGNCK((start←v4180 + loFill←v6832))
               , SGNCK(dataCount←v6888), pd31);
            };
         };
      };
SOURCE(2013, 128)
   if ((loFill←v6832 != 0)) {
SOURCE(2034, 107)
      {
         word var←c21904;
         {
            W2 var←c21936;
            var←c21936.f0 = s←v4096;
            var←c21936.f1 = 0;
            {
               word pd32;
               pd32 = (* (( (ptr) (* (( (ptr) gf←c23888)+56)/* var←c21872 */  ))+42) );
               var←c21904 = (word) ( *( (fPt) ((*  (ptr) pd32 ))))(map←v6804, var←c21936, pd32);
               };
            };
         {
            word pd33;
            pd33 = (* (( (ptr) (* (( (ptr) gf←c23888)+56)/* var←c21872 */  ))+11) );
            (void) ( *( (fPt) ((*  (ptr) pd33 ))))(buffer←v4152, var←c21904, start←v4180, loFill←v6832, pd33);
            };
         };
      };
SOURCE(2146, 147)
   if ((hiFill←v6860 != 0)) {
SOURCE(2167, 126)
      {
         word var←c21968;
         {
            W2 var←c22000;
            var←c22000.f0 = s←v4096;
            var←c22000.f1 = (fSize←v6944 - 1);
            {
               word pd34;
               pd34 = (* (( (ptr) (* (( (ptr) gf←c23888)+56)/* var←c21872 */  ))+42) );
               var←c21968 = (word) ( *( (fPt) ((*  (ptr) pd34 ))))(map←v6804, var←c22000, pd34);
               };
            };
         {
            word pd35;
            pd35 = (* (( (ptr) (* (( (ptr) gf←c23888)+56)/* var←c21872 */  ))+11) );
            (void) ( *( (fPt) ((*  (ptr) pd35 ))))(buffer←v4152, var←c21968, ((start←v4180 + count←v4208) - hiFill←v6860), hiFill←v6860, pd35)
            ;
            };
         };
      };
   }

static word MakeBufferedPixelArray←P180(pixelMap←v4268, borderSize←v4296)
   word pixelMap←v4268;
   word borderSize←v4296;
   {
   register ptr gf←c23920 =  (ptr) &globalframe;
   word var←c4340;
   word samplesPerPixel←v7000;
   W2 delta←v7028;
   W2 size←v7056;
   word m←v7084;
   word new←v7112;
   W2 var←c22128;
   /* MakeBufferedPixelArray: */ 
SOURCE(2302, 849)
SOURCE(2415, 47)
   samplesPerPixel←v7000 = (* (( (ptr) pixelMap←v4268)+5) );
SOURCE(2464, 40)
   {
      word pd36;
      pd36 = (* (( (ptr) (* (( (ptr) gf←c23920)+57)/* var←c22032 */  ))+5) );
      (void) ( *( (fPt) ((*  (ptr) pd36 ))))((word) &delta←v7028, (*  (W2Pt) (( (ptr) pixelMap←v4268)+1) ), pd36);
      };
SOURCE(2506, 36)
   {
      word pd37;
      pd37 = (* (( (ptr) (* (( (ptr) gf←c23920)+57)/* var←c22032 */  ))+19) );
      (void) ( *( (fPt) ((*  (ptr) pd37 ))))((word) &size←v7056, (*  (W4Pt) (( (ptr) pixelMap←v4268)+1) ), pd37);
      };
SOURCE(2544, 114)
   {
      W2 var←c22064;
      {
         float tf38;
         var←c22064.f0 = (
            tf38 = (float)(int)((* (( (ptr) pixelMap←v4268)+1) ) - borderSize←v4296),  *(word*)&tf38
            );
         };
      {
         float tf39;
         var←c22064.f1 = (
            tf39 = (float)(int)((* (( (ptr) pixelMap←v4268)+2) ) - borderSize←v4296),  *(word*)&tf39
            );
         };
      {
         word pd40;
         pd40 = (* (( (ptr) (* (( (ptr) gf←c23920)+58)/* var←c22096 */  ))+10) );
         m←v7084 = (word) ( *( (fPt) ((*  (ptr) pd40 ))))(var←c22064, pd40);
         };
      };
SOURCE(2660, 24)
   new←v7112 = pixelMap←v4268;
SOURCE(2686, 218)
   var←c22128.f0 = 0;
   var←c22128.f1 = 0;
   if ( ! XR←EqualWords(&delta←v7028, &var←c22128, 2)) {
SOURCE(2711, 51)
      {
         word var←c22160;
         word var←c22192;
         word var←c22224;
         var←c22160 = BCK(samplesPerPixel←v7000, 67108863);
         var←c22192 = ((word) var←c22160 << 2);
         var←c22224 = XR←NewObject((24 + var←c22192), (* (( (ptr) gf←c23920)+17) ));
         (* (( (ptr) var←c22224)+5) ) = var←c22160;
         new←v7112 = var←c22224;
         };
SOURCE(2764, 21)
      (* (( (ptr) new←v7112)+1) ) = 0;
      (* (( (ptr) new←v7112)+2) ) = 0;
      (*  (W2Pt) (( (ptr) new←v7112)+3) ) = size←v7056;
SOURCE(2787, 117)
      {
         register word j←v7156 = 0;
         if ((j←v7156 >= samplesPerPixel←v7000)) {
            goto lab←L100000;
            };
         lab←L100003: ;
SOURCE(2825, 79)
         {
            word var←c22256;
            {
               W4 var←c22288;
               var←c22288.f0 = 0;
               var←c22288.f1 = 0;
               (*  (W2Pt) (( (ptr) &var←c22288)+2) ) = size←v7056;
               {
                  word pd41;
                  word limit42;
                  pd41 = (* (( (ptr) (* (( (ptr) gf←c23920)+56)/* var←c21872 */  ))+26) );
                  var←c22256 = (word) ( *( (fPt) ((*  (ptr) pd41 ))))((* ((( (ptr) pixelMap←v4268)+6)+(
                           limit42 = (* (( (ptr) pixelMap←v4268)+5) ),
                           BCK(j←v7156, limit42)
                           )) ), delta←v7028, var←c22288, pd41);
                  };
               };
            {
               word limit43;
               (* ((( (ptr) new←v7112)+6)+(
                     limit43 = (* (( (ptr) new←v7112)+5) ),
                     BCK(j←v7156, limit43)
                     )) ) = var←c22256;
               };
            };
         j←v7156 = (j←v7156 + 1);
         if ((j←v7156 < samplesPerPixel←v7000)) {
            goto lab←L100003;
            };
         lab←L100000: ;
         };
      };
SOURCE(2918, 233)
   {
      word var←c22384;
      word var←c22352;
      var←c22384 = XR←NewObject(8, (* (( (ptr) gf←c23920)+16) ));
      (*  (ptr) var←c22384 ) = new←v7112;
      (* (( (ptr) var←c22384)+1) ) = borderSize←v4296;
      var←c22352 = var←c22384;
      {
         word pd44;
         pd44 = (* (( (ptr) (* (( (ptr) gf←c23920)+54)/* var←c21648 */  ))+5) );
         return((word) ( *( (fPt) ((*  (ptr) pd44 ))))((* (( (ptr) gf←c23920)+8)/* bufferedClass←v3196 */  ), var←c22352, 0, samplesPerPixel←v7000, (size←v7056.f0 + 
            ((word) borderSize←v4296 << 1)), (size←v7056.f1 + ((word) borderSize←v4296 << 1))
            , m←v7084, pd44));
         };
      };
   }

static void DrawBufferedImage←P240(device←v4400, buffer←v4428, box←v4456, colorOperator←v4484, pixelToView←v4512, viewToDevice←v4540)
   word device←v4400;
   word buffer←v4428;
   W4 box←v4456;
   word colorOperator←v4484;
   word pixelToView←v4512;
   word viewToDevice←v4540;
   {
   register ptr gf←c23952 =  (ptr) &globalframe;
   word borderSize←v7200 = 2;
   word sSize←v7228;
   word fSize←v7256;
   /* DrawBufferedImage: */ 
SOURCE(3215, 789)
SOURCE(3420, 36)
   sSize←v7228 = (box←v4456.f2 - box←v4456.f0);
SOURCE(3458, 36)
   fSize←v7256 = (box←v4456.f3 - box←v4456.f1);
SOURCE(3496, 508)
   if ( ( ( (int)sSize←v7228 >  (int)0) ? ( (int)fSize←v7256 >  (int)0) : 0 ) ) {
SOURCE(3528, 478)
      {
         word pixelToDevice←v7300;
         word pa←v7328;
         word color←v7356;
SOURCE(3530, 86)
         {
            word pd45;
            pd45 = (* (( (ptr) (* (( (ptr) gf←c23952)+58)/* var←c22096 */  ))+13) );
            pixelToDevice←v7300 = (word) ( *( (fPt) ((*  (ptr) pd45 ))))(pixelToView←v4512, viewToDevice←v4540, pd45);
            };
SOURCE(3618, 76)
         pa←v7328 = (word) MakeBufferedPixelArray←P180(buffer←v4428, borderSize←v7200);
SOURCE(3696, 110)
         {
            word pd46;
            pd46 = (* (( (ptr) (* (( (ptr) gf←c23952)+55)/* var←c21680 */  ))+10) );
            color←v7356 = (word) ( *( (fPt) ((*  (ptr) pd46 ))))(pa←v7328, pixelToView←v4512, colorOperator←v4484, pd46);
            };
SOURCE(3808, 50)
         {
            word pd47;
            pd47 = (*  (ptr) (* (( (ptr) device←v4400)+4) ) );
            (void) ( *( (fPt) ((*  (ptr) pd47 ))))(device←v4400, color←v7356, viewToDevice←v4540, pd47);
            };
SOURCE(3860, 92)
         {
            W4 rectangle←v20992;
            {
               float tf48;
               rectangle←v20992.f0 = (
                  tf48 = (float)(int)box←v4456.f0,  *(word*)&tf48
                  );
               };
            {
               float tf49;
               rectangle←v20992.f1 = (
                  tf49 = (float)(int)box←v4456.f1,  *(word*)&tf49
                  );
               };
            {
               float tf50;
               rectangle←v20992.f2 = (
                  tf50 = (float)(int)sSize←v7228,  *(word*)&tf50
                  );
               };
            {
               float tf51;
               rectangle←v20992.f3 = (
                  tf51 = (float)(int)fSize←v7256,  *(word*)&tf51
                  );
               };
            {
               word pd52;
               pd52 = (* (( (ptr) (*  (ptr) device←v4400 ))+2) );
               (void) ( *( (fPt) ((*  (ptr) pd52 ))))(device←v4400, rectangle←v20992, pixelToDevice←v7300, pd52);
               };
            };
SOURCE(3954, 50)
         {
            word pd53;
            pd53 = (*  (ptr) (* (( (ptr) device←v4400)+4) ) );
            (void) ( *( (fPt) ((*  (ptr) pd53 ))))(device←v4400, (* (( (ptr) gf←c23952)+9)/* black←v3336 */  ), viewToDevice←v4540, pd53)
            ;
            };
         };
      };
   }

static word InterleavedSamplesMaxSampleValue←P300(pa←v4740, i←v4768)
   word pa←v4740;
   word i←v4768;
   {
   register ptr gf←c23984 =  (ptr) &globalframe;
   word var←c4812;
   word data←v7400;
   /* InterleavedSamplesMaxSampleValue: */ 
SOURCE(4393, 291)
SOURCE(4497, 53)
   data←v7400 = XR←Narrow((* (( (ptr) pa←v4740)+6) ), (* (( (ptr) gf←c23984)+19) ));
SOURCE(4552, 58)
   if ((i←v4768 > (* (( (ptr) data←v7400)+2) ))) {
SOURCE(4585, 25)
      (void) XR←RaiseBoundsFault();
      };
SOURCE(4612, 72)
   {
      word var←c0249;
      {
         word var←c22480;
         {
            word var←c22512;
            word map←v21088;
            map←v21088 = (*  (ptr) data←v7400 );
            var←c22512 = (* (( (ptr) map←v21088)+5) );
            var←c22480 = var←c22512;
            };
         var←c0249 = ((word) Basics←BITSHIFT(1, var←c22480) - 1);
         };
      return(var←c0249);
      };
   }

static word ObtainBuffer←P360(data←v4944)
   word data←v4944;
   {
   register ptr gf←c24016 =  (ptr) &globalframe;
   word b←v5000;
   /* ObtainBuffer: */ 
SOURCE(4769, 146)
   (void) (XR←MonitorEntry((word) (( (bPt) gf←c24016)+16)/* LOCK←v2972 */ ));
SOURCE(4769, 146)
   b←v5000 = 0;
SOURCE(4869, 21)
   b←v5000 = (* (( (ptr) data←v4944)+3) );
SOURCE(4892, 23)
   (* (( (ptr) data←v4944)+3) ) = 0;
SOURCE(4769, 146)
   (void) (XR←MonitorExit((word) (( (bPt) gf←c24016)+16)/* LOCK←v2972 */ ));
   return(b←v5000);
   }

static void ReleaseBuffer←P420(data←v5072, b←v5100)
   word data←v5072;
   word b←v5100;
   {
   register ptr gf←c24048 =  (ptr) &globalframe;
   /* ReleaseBuffer: */ 
SOURCE(4921, 114)
   (void) (XR←MonitorEntry((word) (( (bPt) gf←c24048)+16)/* LOCK←v2972 */ ));
SOURCE(5013, 22)
   (* (( (ptr) data←v5072)+3) ) = b←v5100;
SOURCE(4921, 114)
   (void) (XR←MonitorExit((word) (( (bPt) gf←c24048)+16)/* LOCK←v2972 */ ));
   return;
   }

static word SalvageBuffer←P480(pa←v5184)
   word pa←v5184;
   {
   register ptr gf←c24080 =  (ptr) &globalframe;
   word scratch←v5228;
   /* SalvageBuffer: */ 
SOURCE(5039, 179)
SOURCE(5039, 179)
   scratch←v5228 = 0;
SOURCE(5126, 92)
   {
      word var←c22544;
      var←c22544 = (* (( (ptr) pa←v5184)+6) );
      if ((var←c22544 == 0)) {
         goto lab←L100005;
         };
      if (((* (( (ptr) gf←c24080)+19) ) == XR←GetReferentType(var←c22544))) {
         {
            word data←v7456;
            data←v7456 = var←c22544;
SOURCE(5190, 28)
            scratch←v5228 = (word) ObtainBuffer←P360(data←v7456);
            };
         }
      else {
         lab←L100005: ;
         };
      };
SOURCE(5039, 179)
   return(scratch←v5228);
   }

static void InterleavedSamplesGetSamples←P540(pa←v5304, i←v5332, s←v5360, f←v5388, buffer←v5416, start←v5444, count←v5472)
   word pa←v5304;
   word i←v5332;
   word s←v5360;
   word f←v5388;
   word buffer←v5416;
   word start←v5444;
   word count←v5472;
   {
   register ptr gf←c24112 =  (ptr) &globalframe;
   word data←v7512;
   word fSize←v7540;
   word sSize←v7568;
   /* InterleavedSamplesGetSamples: */ 
SOURCE(5233, 1925)
SOURCE(5385, 53)
   data←v7512 = XR←Narrow((* (( (ptr) pa←v5304)+6) ), (* (( (ptr) gf←c24112)+19) ));
SOURCE(5440, 48)
   {
      W4 var←c22576;
      word map←v20896;
      word var←c0250;
      map←v20896 = (*  (ptr) data←v7512 );
      var←c22576 = (*  (W4Pt) map←v20896 );
      var←c0250 = var←c22576.f3;
      fSize←v7540 = SGNCK(var←c0250);
      };
SOURCE(5553, 48)
   {
      W4 var←c22608;
      word map←v20848;
      word var←c0251;
      map←v20848 = (*  (ptr) data←v7512 );
      var←c22608 = (*  (W4Pt) map←v20848 );
      var←c0251 = var←c22608.f2;
      sSize←v7568 = SGNCK(var←c0251);
      };
SOURCE(5645, 23)
   s←v5360 = (s←v5360 - (* (( (ptr) data←v7512)+1) ));
SOURCE(5670, 55)
   if (( (int)s←v5360 <  (int)0)) {
SOURCE(5684, 11)
      s←v5360 = 0;
      }
   else {
SOURCE(5695, 30)
      if (( (int)s←v5360 >=  (int)sSize←v7568)) {
SOURCE(5714, 11)
         s←v5360 = (sSize←v7568 - 1);
         };
      };
SOURCE(5727, 1431)
   if ((i←v5332 > (* (( (ptr) data←v7512)+2) ))) {
SOURCE(5760, 31)
      (void) XR←RaiseBoundsFault();
      }
   else {
SOURCE(5791, 1369)
      {
         word b←v7624;
SOURCE(5793, 43)
         b←v7624 = (word) ObtainBuffer←P360(data←v7512);
SOURCE(5838, 40)
         if ((b←v7624 == 0)) {
SOURCE(5854, 24)
            b←v7624 = XR←NewObject(8, (* (( (ptr) gf←c24112)+14) ));
            };
SOURCE(5880, 117)
         if (((* (( (ptr) b←v7624)+1) ) == 0) || ((* (( (ptr) (* (( (ptr) b←v7624)+1) ))+1) ) != fSize←v7540)) {
SOURCE(5935, 41)
            {
               word pd54;
               pd54 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+5) );
               (* (( (ptr) b←v7624)+1) ) = (word) ( *( (fPt) ((*  (ptr) pd54 ))))(fSize←v7540, 0, pd54);
               };
SOURCE(5978, 19)
            (*  (ptr) (* (( (ptr) b←v7624)+1) ) ) = 0;
            };
SOURCE(6002, 154)
         if (( (int)(*  (ptr) b←v7624 ) !=  (int)s←v5360) || ((*  (ptr) (* (( (ptr) b←v7624)+1) ) ) != fSize←v7540)) {
SOURCE(6047, 23)
            (*  (ptr) (* (( (ptr) b←v7624)+1) ) ) = fSize←v7540;
SOURCE(6072, 75)
            {
               W2 var←c22672;
               W2 var←c22704;
               var←c22672.f0 = s←v5360;
               var←c22672.f1 = 0;
               var←c22704.f0 = 0;
               var←c22704.f1 = 1;
               {
                  word pd55;
                  pd55 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+44) );
                  (void) ( *( (fPt) ((*  (ptr) pd55 ))))((*  (ptr) data←v7512 ), var←c22672, var←c22704, (* (( (ptr) b←v7624)+1) ), 0, 2147483647, pd55)
                  ;
                  };
               };
SOURCE(6149, 7)
            (*  (ptr) b←v7624 ) = SGNCK(s←v5360);
            };
SOURCE(6169, 964)
         {
            word loFill←v7680;
            word hiFill←v7708;
            word dataCount←v7736;
SOURCE(6171, 43)
            {
               word x56;
               loFill←v7680 = (x56 = ((* (( (ptr) data←v7512)+1) ) - f←v5388),
                  MAX((int)(word), x56, 0));
               };
SOURCE(6216, 64)
            {
               word x57;
               hiFill←v7708 = (x57 = ((f←v5388 + count←v5472) - ((* (( (ptr) pa←v5304)+3) ) - (* (( (ptr) data←v7512)+1) ))),
                  MAX((int)(word), x57, 0));
               };
SOURCE(6282, 36)
            dataCount←v7736 = ((count←v5472 - loFill←v7680) - hiFill←v7708);
SOURCE(6320, 529)
            if (( (int)dataCount←v7736 >  (int)0)) {
SOURCE(6342, 518)
               {
                  word src←v7780;
                  word srcP←v7808;
                  word srcDelta←v7836;
                  word dst←v7864;
SOURCE(6344, 213)
                  {
                     word pd58;
                     word idx59;
                     pd58 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+9) );
                     src←v7780 = (word) ( *( (fPt) ((*  (ptr) pd58 ))))((* (( (ptr) b←v7624)+1) ), (IOP2( * ,  (int)((f←v5388 - (* (( (ptr) data←v7512)+1)
                            )) + loFill←v7680),  (int)(* (( (ptr) data←v7512)+2) )) + i←v5332), (
                           idx59 = (word) (IOP2( * ,  (int)dataCount←v7736,  (int)(* (( (ptr) data←v7512)+2) )) - ((* (( (ptr) data←v7512)+2) ) - 1)),
                           SGNCK(idx59)
                           ), pd58);
                     };
SOURCE(6559, 38)
                  srcP←v7808 = src←v7780;
SOURCE(6599, 55)
                  srcDelta←v7836 = ((* (( (ptr) data←v7512)+2) ) << 2);
SOURCE(6656, 118)
                  {
                     word pd60;
                     pd60 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+9) );
                     dst←v7864 = (word) ( *( (fPt) ((*  (ptr) pd60 ))))(buffer←v5416, SGNCK((start←v5444 + loFill←v7680)), SGNCK(dataCount←v7736)
                        , pd60);
                     };
SOURCE(6776, 73)
                  {
                     register word k←v7944 = 0;
                     register word noName←c22736;
                     noName←c22736 = count←v5472;
                     if ((k←v7944 >= noName←c22736)) {
                        goto lab←L100008;
                        };
                     lab←L100011: ;
SOURCE(6809, 16)
                     (* (( (ptr) dst←v7864)+k←v7944) ) = (*  (ptr) srcP←v7808 );
SOURCE(6827, 22)
                     srcP←v7808 = (srcP←v7808 + srcDelta←v7836);
                     k←v7944 = (k←v7944 + 1);
                     if ((k←v7944 < noName←c22736)) {
                        goto lab←L100011;
                        };
                     lab←L100008: ;
                     };
                  };
               };
SOURCE(6863, 110)
            if ((loFill←v7680 != 0)) {
SOURCE(6884, 89)
               {
                  word var←c22768;
                  word var←c0252;
                  var←c22768 = (* (( (ptr) b←v7624)+1) );
                  {
                     word limit61;
                     var←c0252 = (* ((( (ptr) var←c22768)+2)+(
                           limit61 = (* (( (ptr) var←c22768)+1) ),
                           BCK(i←v5332, limit61)
                           )) );
                     };
                  {
                     word pd62;
                     pd62 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+11) );
                     (void) ( *( (fPt) ((*  (ptr) pd62 ))))(buffer←v5416, var←c0252, start←v5444, loFill←v7680, pd62);
                     };
                  };
               };
SOURCE(6978, 150)
            if ((hiFill←v7708 != 0)) {
SOURCE(6999, 129)
               {
                  word var←c22800;
                  word var←c22832;
                  word var←c0253;
                  var←c22800 = ((fSize←v7540 - (* (( (ptr) data←v7512)+2) )) + i←v5332);
                  var←c22832 = (* (( (ptr) b←v7624)+1) );
                  {
                     word limit63;
                     var←c0253 = (* ((( (ptr) var←c22832)+2)+(
                           limit63 = (* (( (ptr) var←c22832)+1) ),
                           BCK(var←c22800, limit63)
                           )) );
                     };
                  {
                     word pd64;
                     pd64 = (* (( (ptr) (* (( (ptr) gf←c24112)+56)/* var←c21872 */  ))+11) );
                     (void) ( *( (fPt) ((*  (ptr) pd64 ))))(buffer←v5416, var←c0253, ((start←v5444 + count←v5472) - hiFill←v7708), hiFill←v7708, pd64)
                     ;
                     };
                  };
               };
            };
SOURCE(7136, 22)
         (void) ReleaseBuffer←P420(data←v7512, b←v7624);
         };
      };
   }

static word MakeInterleavedPixelArray←P600(sampleMap←v5532, samplesPerPixel←v5560, borderSize←v5588, scratch←v5616)
   word sampleMap←v5532;
   word samplesPerPixel←v5560;
   word borderSize←v5588;
   word scratch←v5616;
   {
   register ptr gf←c24144 =  (ptr) &globalframe;
   word var←c5672;
   W4 box←v7988;
   word data←v8016;
   word pa←v8044;
   /* MakeInterleavedPixelArray: */ 
SOURCE(7167, 947)
SOURCE(7340, 44)
   box←v7988 = (*  (W4Pt) sampleMap←v5532 );
SOURCE(7386, 192)
   {
      word var←c22864;
      word var←c22896;
      {
         word pd65;
         pd65 = (* (( (ptr) (* (( (ptr) gf←c24144)+56)/* var←c21872 */  ))+29) );
         var←c22864 = (word) ( *( (fPt) ((*  (ptr) pd65 ))))(sampleMap←v5532, pd65);
         };
      var←c22896 = XR←NewObject(16, (* (( (ptr) gf←c24144)+19) ));
      (*  (ptr) var←c22896 ) = var←c22864;
      (* (( (ptr) var←c22896)+1) ) = borderSize←v5588;
      (* (( (ptr) var←c22896)+2) ) = samplesPerPixel←v5560;
      data←v8016 = var←c22896;
      };
SOURCE(7580, 338)
   {
      word var←c22928;
      {
         W2 var←c22960;
         {
            float tf66;
            var←c22960.f0 = (
               tf66 = (float)(int)(box←v7988.f0 - borderSize←v5588),  *(word*)&tf66
               );
            };
         {
            float tf67;
            var←c22960.f1 = (
               tf67 = (float)(int)(box←v7988.f1 - borderSize←v5588),  *(word*)&tf67
               );
            };
         {
            word pd68;
            pd68 = (* (( (ptr) (* (( (ptr) gf←c24144)+58)/* var←c22096 */  ))+10) );
            var←c22928 = (word) ( *( (fPt) ((*  (ptr) pd68 ))))(var←c22960, pd68);
            };
         };
      {
         word pd69;
         pd69 = (* (( (ptr) (* (( (ptr) gf←c24144)+54)/* var←c21648 */  ))+5) );
         pa←v8044 = (word) ( *( (fPt) ((*  (ptr) pd69 ))))((* (( (ptr) gf←c24144)+10)/* interleavedSamplesClass←v3392 */  ), data←v8016, 0, samplesPerPixel←v5560, ((box←v7988.f2 - box←v7988.f0) + 
            ((word) borderSize←v5588 << 1)), (IOP2( / ,  (int)(box←v7988.f3 - box←v7988.f1),  (int)samplesPerPixel←v5560) + ((word) borderSize←v5588 << 1))
            , var←c22928, pd69);
         };
      };
SOURCE(7920, 165)
   {
      word var←c22992;
      var←c22992 = scratch←v5616;
      if ((var←c22992 == 0)) {
         goto lab←L100012;
         };
      if (((* (( (ptr) gf←c24144)+14) ) == XR←GetReferentType(var←c22992))) {
         {
            word b←v8100;
            b←v8100 = var←c22992;
SOURCE(7973, 112)
            if ( ( ((* (( (ptr) b←v8100)+1) ) != 0) ? ( (int)(* (( (ptr) (* (( (ptr) b←v8100)+1) ))+1) ) ==  (int)(box←v7988.f3 - box←v7988.f1)) : 0 ) ) {
SOURCE(8043, 19)
               (*  (ptr) (* (( (ptr) b←v8100)+1) ) ) = 0;
SOURCE(8064, 21)
               (* (( (ptr) data←v8016)+3) ) = b←v8100;
               };
            };
         }
      else {
         lab←L100012: ;
         };
      };
SOURCE(8102, 12)
   return(pa←v8044);
   }

static void DrawInterleavedImage←P660(device←v5732, buffer←v5760, samplesPerPixel←v5788, box←v5816, colorOperator←v5844, pixelToView←v5872, viewToDevice←v5900)
   word device←v5732;
   word buffer←v5760;
   word samplesPerPixel←v5788;
   W4 box←v5816;
   word colorOperator←v5844;
   word pixelToView←v5872;
   word viewToDevice←v5900;
   {
   register ptr gf←c24176 =  (ptr) &globalframe;
   word borderSize←v8156 = 2;
   word sSize←v8184;
   word fSize←v8212;
   /* DrawInterleavedImage: */ 
SOURCE(8118, 836)
SOURCE(8350, 36)
   sSize←v8184 = (box←v5816.f2 - box←v5816.f0);
SOURCE(8388, 36)
   fSize←v8212 = (box←v5816.f3 - box←v5816.f1);
SOURCE(8426, 528)
   if ( ( ( (int)sSize←v8184 >  (int)0) ? ( (int)fSize←v8212 >  (int)0) : 0 ) ) {
SOURCE(8458, 498)
      {
         word pixelToDevice←v8256;
         word pa←v8284;
         word color←v8312;
SOURCE(8460, 86)
         {
            word pd70;
            pd70 = (* (( (ptr) (* (( (ptr) gf←c24176)+58)/* var←c22096 */  ))+13) );
            pixelToDevice←v8256 = (word) ( *( (fPt) ((*  (ptr) pd70 ))))(pixelToView←v5872, viewToDevice←v5900, pd70);
            };
SOURCE(8548, 96)
         pa←v8284 = (word) MakeInterleavedPixelArray←P600(buffer←v5760, samplesPerPixel←v5788, borderSize←v8156, 0);
SOURCE(8646, 110)
         {
            word pd71;
            pd71 = (* (( (ptr) (* (( (ptr) gf←c24176)+55)/* var←c21680 */  ))+10) );
            color←v8312 = (word) ( *( (fPt) ((*  (ptr) pd71 ))))(pa←v8284, pixelToView←v5872, colorOperator←v5844, pd71);
            };
SOURCE(8758, 50)
         {
            word pd72;
            pd72 = (*  (ptr) (* (( (ptr) device←v5732)+4) ) );
            (void) ( *( (fPt) ((*  (ptr) pd72 ))))(device←v5732, color←v8312, viewToDevice←v5900, pd72);
            };
SOURCE(8810, 92)
         {
            W4 rectangle←v20944;
            {
               float tf73;
               rectangle←v20944.f0 = (
                  tf73 = (float)(int)box←v5816.f0,  *(word*)&tf73
                  );
               };
            {
               float tf74;
               rectangle←v20944.f1 = (
                  tf74 = (float)(int)box←v5816.f1,  *(word*)&tf74
                  );
               };
            {
               float tf75;
               rectangle←v20944.f2 = (
                  tf75 = (float)(int)sSize←v8184,  *(word*)&tf75
                  );
               };
            {
               float tf76;
               rectangle←v20944.f3 = (
                  tf76 = (float)(int)fSize←v8212,  *(word*)&tf76
                  );
               };
            {
               word pd77;
               pd77 = (* (( (ptr) (*  (ptr) device←v5732 ))+2) );
               (void) ( *( (fPt) ((*  (ptr) pd77 ))))(device←v5732, rectangle←v20944, pixelToDevice←v8256, pd77);
               };
            };
SOURCE(8904, 50)
         {
            word pd78;
            pd78 = (*  (ptr) (* (( (ptr) device←v5732)+4) ) );
            (void) ( *( (fPt) ((*  (ptr) pd78 ))))(device←v5732, (* (( (ptr) gf←c24176)+9)/* black←v3336 */  ), viewToDevice←v5900, pd78)
            ;
            };
         };
      };
   }

static void GetUnsafeBlock←P720(formal←c0181, map←v5960)
   word formal←c0181;
   word map←v5960;
   {
   W3 var←c6004;
   W2 size←v8356;
   word base←v8384;
   word startIndex←v8412;
   /* GetUnsafeBlock: */ 
SOURCE(8963, 658)
SOURCE(9040, 40)
   {
      word map←v20704;
      map←v20704 = map←v5960;
      {
         W4 b←v18168;
         b←v18168 = (*  (W4Pt) map←v20704 );
         size←v8356.f0 = (b←v18168.f2 - b←v18168.f0);
         size←v8356.f1 = (b←v18168.f3 - b←v18168.f1);
         };
      };
SOURCE(9082, 61)
   base←v8384 = (* (( (ptr) map←v5960)+8) );
SOURCE(9145, 35)
   startIndex←v8412 = ((* (( (ptr) map←v5960)+9) ) >> 3);
SOURCE(9182, 439)
   if (( (int)size←v8356.f0 ==  (int)0) || ( (int)size←v8356.f1 ==  (int)0)) {
SOURCE(9215, 61)
      var←c6004.f0 = base←v8384;
      var←c6004.f1 = startIndex←v8412;
      var←c6004.f2 = 0;
      /* removed tail goto */ 
      }
   else {
SOURCE(9276, 345)
      {
         word bitsPerLine←v8468;
         word dataBitsPerLine←v8496;
         word fillBitsPerLine←v8524;
         word padStart←v8552;
         word nBytes←v8580;
SOURCE(9278, 38)
         {
            word idx79;
            bitsPerLine←v8468 = (
               idx79 = (* (( (ptr) map←v5960)+7) ),
               SGNCK(idx79)
               );
            };
SOURCE(9318, 63)
         {
            word var←c23152;
            word map←v21040;
            map←v21040 = map←v5960;
            var←c23152 = (* (( (ptr) map←v21040)+5) );
            {
               word idx80;
               dataBitsPerLine←v8496 = (var←c23152 * (
                  idx80 = (word) size←v8356.f1,
                  SGNCK(idx80)
                  ));
               };
            };
SOURCE(9383, 56)
         fillBitsPerLine←v8524 = BCK((bitsPerLine←v8468 - dataBitsPerLine←v8496), 32);
SOURCE(9441, 40)
         {
            word idx81;
            padStart←v8552 = (
               idx81 = ((* (( (ptr) map←v5960)+9) ) & 7),
               BCK(idx81, 1)
               );
            };
SOURCE(9483, 46)
         {
            word idx82;
            nBytes←v8580 = ((word) (((
               idx82 = (word) size←v8356.f0,
               SGNCK(idx82)
               ) * bitsPerLine←v8468) + 7) >> 3);
            };
SOURCE(9531, 90)
         var←c6004.f0 = (* (( (ptr) map←v5960)+8) );
         var←c6004.f1 = ((* (( (ptr) map←v5960)+9) ) >> 3);
         var←c6004.f2 = nBytes←v8580;
         /* removed tail goto */ 
         };
      };
   (*  (W3Pt) formal←c0181 ) = var←c6004;
   return;
   }

static word ChooseOverlap←P780(device←v6064, pixelToDevice←v6092, padMod←v6120)
   word device←v6064;
   word pixelToDevice←v6092;
   word padMod←v6120;
   {
   register ptr gf←c24208 =  (ptr) &globalframe;
   word var←c6164;
   word overlap←v8664 = 1;
   /* ChooseOverlap: */ 
SOURCE(9628, 511)
SOURCE(9745, 222)
   lab←L100018: ;
SOURCE(9745, 222)
   {
      W4 d←v8708;
SOURCE(9805, 105)
      {
         W4 var←c0189;
         {
            W4 var←c23248;
            var←c23248.f0 = (*  (ptr) &fc83 );
            var←c23248.f1 = (*  (ptr) &fc83 );
            {
               float tf84;
               var←c23248.f2 = (
                  tf84 = (float)(unsigned)overlap←v8664,  *(word*)&tf84
                  );
               };
            {
               float tf85;
               var←c23248.f3 = (
                  tf85 = (float)(unsigned)overlap←v8664,  *(word*)&tf85
                  );
               };
            {
               word pd86;
               pd86 = (* (( (ptr) (* (( (ptr) gf←c24208)+58)/* var←c22096 */  ))+46) );
               (void) ( *( (fPt) ((*  (ptr) pd86 ))))((word) &var←c0189, pixelToDevice←v6092, var←c23248, pd86);
               };
            };
         d←v8708 = var←c0189;
         };
SOURCE(9912, 30)
      {
         word x87;
         word x89;
         word x90;
         word x91;
         if ( ( ((
            x87 = d←v8708.f3,  *(float*)&x87
            ) >= (
            x89 = (*  (ptr) &fc88 ),  *(float*)&x89
            )) ? ((
            x90 = d←v8708.f2,  *(float*)&x90
            ) >= (
            x91 = (*  (ptr) &fc88 ),  *(float*)&x91
            )) : 0 ) ) {
SOURCE(9942, 4)
            goto lab←L100017;
            };
         };
SOURCE(9948, 19)
      overlap←v8664 = (overlap←v8664 + 1);
      };
   goto lab←L100018;
   lab←L100017: ;
SOURCE(9978, 95)
   lab←L100021: ;
   if ((((overlap←v8664 * padMod←v6120) & 7) != 0)) {
      }
   else {
      goto lab←L100019;
      };
SOURCE(10054, 19)
   overlap←v8664 = (overlap←v8664 + 1);
   goto lab←L100021;
   lab←L100019: ;
SOURCE(10084, 55)
   return(overlap←v8664);
   }

static word ChooseBandSize←P840(sSize←v6224, fSize←v6252, bitsPerSample←v6280, samplesPerPixel←v6308)
   word sSize←v6224;
   word fSize←v6252;
   word bitsPerSample←v6280;
   word samplesPerPixel←v6308;
   {
   word var←c6352;
   /* ChooseBandSize: */ 
SOURCE(10143, 130)
SOURCE(10249, 24)
   return((MIN( (unsigned) , sSize←v6224, 64)));
   }

static void StreamImage←P900(device←v6412, sSize←v6440, fSize←v6468, bitsPerSample←v6496, samplesPerPixel←v6524, padMod←v6552, pixelToView←v6580, viewToDevice←v6608, co←v6636, source←v6664)
   word device←v6412;
   word sSize←v6440;
   word fSize←v6468;
   word bitsPerSample←v6496;
   word samplesPerPixel←v6524;
   word padMod←v6552;
   word pixelToView←v6580;
   word viewToDevice←v6608;
   word co←v6636;
   word source←v6664;
   {
   register ptr gf←c24240 =  (ptr) &globalframe;
   /* StreamImage: */ 
SOURCE(10277, 2158)
SOURCE(10507, 1928)
   if ( ( (sSize←v6440 != 0) ? (fSize←v6468 != 0) : 0 ) ) {
SOURCE(10539, 1898)
      {
         word pixelToDevice←v8752;
         word bandSize←v8780;
         word overlapSize←v8808;
         word fSizeBand←v8836;
         word padModPred←v8864;
         word bitsPerLine←v8892;
         word bandStore←v8920;
         word band←v8948 = 0;
         W4 box←v8976;
SOURCE(10541, 86)
         {
            word pd92;
            pd92 = (* (( (ptr) (* (( (ptr) gf←c24240)+58)/* var←c22096 */  ))+13) );
            pixelToDevice←v8752 = (word) ( *( (fPt) ((*  (ptr) pd92 ))))(pixelToView←v6580, viewToDevice←v6608, pd92);
            };
SOURCE(10629, 122)
         bandSize←v8780 = (word) ChooseBandSize←P840(sSize←v6440, fSize←v6468, bitsPerSample←v6496, samplesPerPixel←v6524);
SOURCE(10753, 95)
         overlapSize←v8808 =  ( (bandSize←v8780 == sSize←v6440) ? 0 : (word) ChooseOverlap←P780(device←v6412, pixelToDevice←v8752, padMod←v6552)
          ) ;
SOURCE(10850, 38)
         {
            word idx93;
            fSizeBand←v8836 = (
               idx93 = (word) (fSize←v6468 * samplesPerPixel←v6524),
               SGNCK(idx93)
               );
            };
SOURCE(10890, 26)
         padModPred←v8864 = SGNCK((padMod←v6552 - 1));
SOURCE(10918, 81)
         {
            word idx94;
            bitsPerLine←v8892 = (
               idx94 = (word) (((((bitsPerSample←v6496 * samplesPerPixel←v6524) * fSize←v6468) + padModPred←v8864) / padMod←v6552) * padMod←v6552),
               SGNCK(idx94)
               );
            };
SOURCE(11001, 204)
         {
            W4 var←c23280;
            var←c23280.f0 = INEG(overlapSize←v8808);
            var←c23280.f1 = 0;
            var←c23280.f2 = SGNCK((bandSize←v8780 + overlapSize←v8808));
            var←c23280.f3 = fSizeBand←v8836;
            {
               word pd95;
               pd95 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+22) );
               bandStore←v8920 = (word) ( *( (fPt) ((*  (ptr) pd95 ))))(var←c23280, BCK(bitsPerSample←v6496, 33), bitsPerLine←v8892, pd95)
               ;
               };
            };
SOURCE(11287, 16)
         box←v8976.f0 = 0;
         box←v8976.f1 = 0;
         box←v8976.f2 = 0;
         box←v8976.f3 = 0;
SOURCE(11344, 1039)
         lab←L100024: ;
SOURCE(11344, 1039)
         {
            word newBand←v9020 = 0;
            word readBand←v9048 = 0;
SOURCE(11438, 21)
            box←v8976.f0 = box←v8976.f2;
SOURCE(11461, 13)
            box←v8976.f1 = 0;
SOURCE(11476, 30)
            box←v8976.f2 = (box←v8976.f2 + bandSize←v8780);
SOURCE(11508, 17)
            box←v8976.f3 = fSize←v6468;
SOURCE(11527, 43)
            if (( (int)box←v8976.f2 >  (int)sSize←v6440)) {
SOURCE(11553, 17)
               box←v8976.f2 = sSize←v6440;
               };
SOURCE(11572, 31)
            if (( (int)box←v8976.f0 >=  (int)box←v8976.f2)) {
SOURCE(11603, 4)
               goto lab←L100023;
               };
SOURCE(11609, 139)
            {
               word var←c23344;
               {
                  word var←c23440;
                  {
                     W2 var←c23376;
                     W4 var←c23408;
                     var←c23376.f0 = box←v8976.f0;
                     var←c23376.f1 = 0;
                     var←c23408.f0 = 0;
                     var←c23408.f1 = 0;
                     var←c23408.f2 = sSize←v6440;
                     var←c23408.f3 = fSizeBand←v8836;
                     {
                        word pd96;
                        pd96 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+26) );
                        var←c23440 = (word) ( *( (fPt) ((*  (ptr) pd96 ))))(bandStore←v8920, var←c23376, var←c23408, pd96);
                        };
                     };
                  if ((var←c23440 == 0)) {
                     goto lab←L100025;
                     };
                  if (((* (( (ptr) var←c23440)+6) ) == 0)) {
                     goto lab←L100025;
                     };
                  (void) XR←RaiseError(XR←NarrowFault, 0);
                  lab←L100025: ;
                  var←c23344 = var←c23440;
                  };
               newBand←v9020 = var←c23344;
               readBand←v9048 = var←c23344;
               };
SOURCE(11750, 162)
            if ((band←v8948 != 0)) {
SOURCE(11771, 46)
               {
                  W2 var←c23472;
                  var←c23472.f0 = 0;
                  var←c23472.f1 = 0;
                  {
                     word pd97;
                     pd97 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+50) );
                     (void) ( *( (fPt) ((*  (ptr) pd97 ))))(newBand←v9020, band←v8948, var←c23472, 0, pd97);
                     };
                  };
SOURCE(11819, 93)
               {
                  word var←c23600;
                  {
                     W4 var←c23536;
                     word map←v20800;
                     word var←c23504;
                     map←v20800 = band←v8948;
                     var←c23536 = (*  (W4Pt) map←v20800 );
                     var←c23504 = var←c23536.f2;
                     {
                        W4 var←c23568;
                        var←c23568.f0 = var←c23504;
                        var←c23568.f1 = 0;
                        var←c23568.f2 = 2147483647;
                        var←c23568.f3 = 2147483647;
                        {
                           word pd98;
                           pd98 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+27) );
                           var←c23600 = (word) ( *( (fPt) ((*  (ptr) pd98 ))))(readBand←v9048, var←c23568, pd98);
                           };
                        };
                     };
                  if ((var←c23600 == 0)) {
                     goto lab←L100027;
                     };
                  if (((* (( (ptr) var←c23600)+6) ) == 0)) {
                     goto lab←L100027;
                     };
                  (void) XR←RaiseError(XR←NarrowFault, 0);
                  lab←L100027: ;
                  readBand←v9048 = var←c23600;
                  };
               };
SOURCE(11917, 14)
            band←v8948 = newBand←v9020;
SOURCE(11941, 272)
            {
               W3 block←v9092;
               word bytes←v9120;
SOURCE(11943, 52)
               (void) GetUnsafeBlock←P720((word) &block←v9092, readBand←v9048);
SOURCE(11997, 45)
               {
                  word pd99;
                  pd99 = (* (( (ptr) (* (( (ptr) gf←c24240)+59)/* var←c23632 */  ))+14) );
                  bytes←v9120 = (word) ( *( (fPt) ((*  (ptr) pd99 ))))(source←v6664, block←v9092, pd99);
                  };
SOURCE(12044, 164)
               if (( (int)bytes←v9120 <  (int)block←v9092.f2)) {
SOURCE(12074, 67)
                  {
                     W4 var←c23664;
                     word map←v20752;
                     word var←c0254;
                     map←v20752 = readBand←v9048;
                     var←c23664 = (*  (W4Pt) map←v20752 );
                     var←c0254 = var←c23664.f0;
                     {
                        word idx100;
                        sSize←v6440 = (
                           idx100 = (word) (var←c0254 + IOP2( / ,  (int)IOP2( * ,  (int)bytes←v9120,  (int)8),  (int)bitsPerLine←v8892)),
                           SGNCK(idx100)
                           );
                        };
                     };
                  box←v8976.f2 = sSize←v6440;
SOURCE(12143, 65)
                  {
                     word var←c23728;
                     {
                        W4 var←c23696;
                        var←c23696.f0 = 0;
                        var←c23696.f1 = 0;
                        var←c23696.f2 = sSize←v6440;
                        var←c23696.f3 = fSizeBand←v8836;
                        {
                           word pd101;
                           pd101 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+27) );
                           var←c23728 = (word) ( *( (fPt) ((*  (ptr) pd101 ))))(band←v8948, var←c23696, pd101);
                           };
                        };
                     if ((var←c23728 == 0)) {
                        goto lab←L100029;
                        };
                     if (((* (( (ptr) var←c23728)+6) ) == 0)) {
                        goto lab←L100029;
                        };
                     (void) XR←RaiseError(XR←NarrowFault, 0);
                     lab←L100029: ;
                     band←v8948 = var←c23728;
                     };
                  };
               };
SOURCE(12216, 167)
            (void) DrawInterleavedImage←P660(device←v6412, band←v8948, samplesPerPixel←v6524, box←v8976, co←v6636, pixelToView←v6580
               , viewToDevice←v6608);
            };
         goto lab←L100024;
         lab←L100023: ;
SOURCE(12394, 41)
         {
            word pd102;
            pd102 = (* (( (ptr) (* (( (ptr) gf←c24240)+56)/* var←c21872 */  ))+23) );
            (void) ( *( (fPt) ((*  (ptr) pd102 ))))(bandStore←v8920, pd102);
            };
         };
      };
   }

/* file: ImagerImageWorksImpl, module: ImagerImageWorksImpl, compiled at: July 28, 1993 10:19:34 am PDT */ 
extern void XR←install←ImagerImageWorksImpl() {
   NoName←Q2424();
   }
extern void XR←run←ImagerImageWorksImpl() { XR←Start(&globalframe); }