/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1993 by Xerox Corporation.  All rights reserved. */
/* time: July 28, 1993 10:20:30 am PDT */
/* C2C version: April 20, 1993 (sun4) */
/* ref-counting: off */
/* file: ImagerMaskCacheImpl, module: ImagerMaskCacheImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [665805338,2510502480] ImagerMaskCacheImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef struct {word f0, f1, f2, f3;} W4;
typedef W4 *W4Pt;
typedef word (*fPt)();
typedef struct {word f0, f1, f2, f3, f4, f5, f6;} W7;
typedef struct {word f0, f1;} W2;
typedef W2 *W2Pt;
typedef struct {word f0, f1, f2, f3, f4, f5, f6, f7;} W8;
typedef struct {word f0, f1, f2, f3, f4;} W5;
typedef struct {W8 f; W5 r;} W13;
typedef struct {W8 f; W8 r;} W16;
typedef W16 *W16Pt;
typedef struct {word f0, f1, f2;} W3;
typedef struct {word f0, f1, f2, f3, f4, f5;} W6;
typedef struct {W16 f; W16 r;} W32;
typedef struct {W32 f; W32 r;} W64;
typedef struct {W64 f; W64 r;} W128;
typedef struct {W128 f; W128 r;} W256;
typedef W256 *W256Pt;
#define SOURCE(p, l) /* source p, l */
static float fc25 = 0.10;
static float fc26 = 1.2;
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
#define IOP2(op, x, y)  ( (word) ((x) op (y)) )
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
#define MAX(cast, x, y)  ( ( cast x) > ( cast y) ? (x) : (y) )
#define MIN(cast, x, y)  ( ( cast x) < ( cast y) ? (x) : (y) )
static float fc108 = 1.0;
static float fc109 = 0.0;
static float fc110 = 2000.0;
static void NoName←Q3384();
static void ImagerMaskCacheImpl←P0();
static word BitmapFromCharMask←P120();
static void boxGenerator←P1884();
static void BoxesFromCharMask←P180();
static word RasterCharMaskFromManhattan←P240();
static word RasterCharMaskFromSampleMap←P300();
static word RunsCharMaskFromManhattan←P360();
static void AppendRun←P2376();
static word CountRuns←P420();
static word NewGeneration←P480();
static word Create←P540();
static word Occupancy←P600();
static word Size←P660();
static word Fetch←P720();
static word HashCharAndFont←P780();
static word FetchInternal←P840();
static word GetParameters←P900();
static void UpdateParameters←P960();
static word NoName←Q3444();
static void Store←P1020();
static word StoreInternal←P1080();
static void Dillon←P1140();
static void EraseInternal←P1200();
static void Launder←P1260();
static void Flush←P1320();
static word GetList←P1380();
static word GetNamedCache←P1440();
static void SetNamedCacheParameters←P1500();
static void FlushAll←P1560();
static word epa←P3024();
static word ObtainSmallCache←P1620();
static void ReleaseSmallCache←P1680();
static void NoName←Q3504();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\047\257\142\032\300\225\243\072\120\101\050\000\000"};
static struct {unsigned f; char r[4];} string2 = {196611, "\004C0"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\254\224\163\216\300\143\061\230\115\100\214\000\000"};
static struct {unsigned f; char r[4];} string4 = {65537, "\001\000\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\047\257\142\032\300\225\243\072\120\101\064\000\000"};
static struct {unsigned f; char r[12];} string6 = {524296, "\011\000\004\040\040\000\010\001\000\000\000"};
static struct {unsigned f; char r[16];} string7 = {851984, "\257\300\254\224\163\216\300\143\061\230\115\101\174\000\000"};
static struct {unsigned f; char r[4];} string8 = {131074, "\003\017\000"};
static struct {unsigned f; char r[24];} string9 = {1310744, "\205\210\242\000\100\377\216\257\300\254\224\163\216\300\143\061\230\115\100\260\000\000\000"};
static struct {unsigned f; char r[8];} string10 = {393222, "\010\000\004A\000\001\000"};
static struct {unsigned f; char r[44];} string11 = {2752556, "\260\007\006\154\145\156\147\164\150\210\241\000\200\177\377\005\004\164\145\170\164\254\206\012\011\155\141\170\114\145\156\147\164\150\210\241\000\200\177\377\243\261\000"};
static struct {unsigned f; char r[104];} string12 = {6684776, "\260\006\005\146\151\162\163\164\216\260\007\006\154\145\156\147\164\150\210\241\000\200\177\377\005\004\164\145\170\164\254\206\012\011\155\141\170\114\145\156\147\164\150\210\241\000\200\177\377\243\261\005\004\162\145\163\164\214\216\260\007\006\154\145\156\147\164\150\210\241\000\200\177\377\005\004\164\145\170\164\254\206\012\011\155\141\170\114\145\156\147\164\150\210\241\000\200\177\377\243\261\261\000"};
static struct {unsigned f; char r[4];} string13 = {131074, "\004\003\000"};
static struct {unsigned f; char r[48];} string14 = {2883632, "\260\006\005\146\151\162\163\164\216\257\300\254\224\163\216\300\143\061\230\115\100\214\005\004\162\145\163\164\214\216\257\300\254\224\163\216\300\143\061\230\115\100\214\261\000\000\000"};
static struct {unsigned f; char r[16];} string15 = {851984, "\257\300\047\257\142\032\300\225\243\072\120\100\200\000\000"};
static struct {unsigned f; char r[4];} string16 = {196611, "\004A0"};
static struct {unsigned f; char r[16];} string17 = {851984, "\257\300\350\311\135\367\300\362\215\374\250\100\150\000\000"};
static struct {unsigned f; char r[16];} string18 = {851984, "\257\300\213\226\301\143\300\072\355\320\373\100\150\000\000"};
static struct {unsigned f; char r[16];} string19 = {851984, "\257\300\041\257\203\366\300\322\161\356\007\100\150\000\000"};
static struct {unsigned f; char r[16];} string20 = {851984, "\257\300\246\205\220\035\300\344\000\142\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string21 = {851984, "\257\300\242\221\264\046\300\105\142\142\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string22 = {851984, "\257\300\243\162\130\311\300\344\000\142\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string23 = {851984, "\257\300\254\224\163\216\300\143\061\230\115\100\150\000\000"};
static struct {unsigned f; char r[28];} string24 = {1638428, "\211\015\014\115\141\163\153\103\141\143\150\145\122\145\160\300\254\224\163\216\300\143\061\230\115\000\000"};
static struct {
   word f0[27]; 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; 
   word f54; word f55; word f56; word f57; 
   word f58; word f59; word f60; word f61; 
   word f62; word f63; word f64; word f65; 
   word f66; word f67; word f68; word f69; 
   word f70; word f71; word f72; word f73; 
   word f74; word f75; word f76; word f77; 
   word f78; word f79; word f80; word f81; 
   word f82[16]; 
   } globalframe = {
   {0}, (word) ReleaseSmallCache←P1680, 0, (word) ObtainSmallCache←P1620, 
   0, (word) FlushAll←P1560, 0, (word) SetNamedCacheParameters←P1500, 
   0, (word) GetNamedCache←P1440, 0, (word) GetList←P1380, 
   0, (word) Flush←P1320, 0, (word) Launder←P1260, 
   0, (word) EraseInternal←P1200, 0, (word) Dillon←P1140, 
   0, (word) StoreInternal←P1080, 0, (word) Store←P1020, 
   0, (word) UpdateParameters←P960, 0, (word) GetParameters←P900, 
   0, (word) FetchInternal←P840, 0, (word) HashCharAndFont←P780, 
   0, (word) Fetch←P720, 0, (word) Size←P660, 
   0, (word) Occupancy←P600, 0, (word) Create←P540, 
   0, (word) NewGeneration←P480, 0, (word) CountRuns←P420, 
   0, (word) RunsCharMaskFromManhattan←P360, 0, (word) RasterCharMaskFromSampleMap←P300, 
   0, (word) RasterCharMaskFromManhattan←P240, 0, (word) BoxesFromCharMask←P180, 
   0, (word) BitmapFromCharMask←P120, 0, (word) ImagerMaskCacheImpl←P0, 
   {0}
   };

static void NoName←Q3384()
   {
   register ptr gf←c0259 =  (ptr) &globalframe;
   word var←c24440;
   (* (( (ptr) gf←c0259)+11) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2);
   (* (( (ptr) gf←c0259)+15) ) = (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4);
   (* (( (ptr) gf←c0259)+18) ) = (word) XR←GetTypeIndex((word) &string5, 0, (word) &string6);
   (* (( (ptr) gf←c0259)+19) ) = (word) XR←GetTypeIndex((word) &string7, 0, (word) &string8);
   (* (( (ptr) gf←c0259)+20) ) = (word) XR←GetTypeIndex((word) &string9, 0, (word) &string10);
   (* (( (ptr) gf←c0259)+21) ) = (word) XR←GetTypeIndexS((word) (&string11));
   (* (( (ptr) gf←c0259)+22) ) = (word) XR←GetTypeIndex((word) &string12, 0, (word) &string13);
   (* (( (ptr) gf←c0259)+25) ) = (word) XR←GetTypeIndex((word) &string14, 0, (word) &string13);
   (void) XR←DeclareGlobalFrame((word) "ImagerMaskCacheImpl", &globalframe, (word) XR←GetTypeIndex((word) &string15, 0, (word) &string16)
      , (word) (( (bPt) gf←c0259)+324)/* var←c21656 */ );
   var←c24440 = (word) XR←ImportInterface((word) "ImagerManhattan", (word) XR←GetTypeIndexS((word) (&string17)), 24);
   (* (( (ptr) gf←c0259)+94)/* var←c23096 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 790275);
   var←c24440 = (word) XR←ImportInterface((word) "ImagerSample", (word) XR←GetTypeIndexS((word) (&string18)), 60);
   (* (( (ptr) gf←c0259)+93)/* var←c22072 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 2370822);
   (void) XR←ImportProcS(var←c24440, 1847300);
   (void) XR←ImportProcS(var←c24440, 268801);
   (void) XR←ImportProcS(var←c24440, 538626);
   (void) XR←ImportProcS(var←c24440, 68425474);
   (void) XR←ImportProcS(var←c24440, 1062404);
   (void) XR←ImportProcS(var←c24440, 273409);
   (void) XR←ImportProcS(var←c24440, 68685571);
   (void) XR←ImportProcS(var←c24440, 70259976);
   var←c24440 = (word) XR←ImportInterface((word) "ImagerSys", (word) XR←GetTypeIndexS((word) (&string19)), 15);
   (* (( (ptr) gf←c0259)+95)/* var←c23256 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 68158210);
   (void) XR←ImportProcS(var←c24440, 67372033);
   var←c24440 = (word) XR←ImportInterface((word) "Real", (word) XR←GetTypeIndexS((word) (&string20)), 11);
   (* (( (ptr) gf←c0259)+96)/* var←c23896 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 67371777);
   var←c24440 = (word) XR←ImportInterface((word) "RefTab", (word) XR←GetTypeIndexS((word) (&string21)), 16);
   (* (( (ptr) gf←c0259)+91)/* var←c21816 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 67635458);
   (void) XR←ImportProcS(var←c24440, 67896579);
   (void) XR←ImportProcS(var←c24440, 134742786);
   (void) XR←ImportProcS(var←c24440, 67895555);
   var←c24440 = (word) XR←ImportInterface((word) "SF", (word) XR←GetTypeIndexS((word) (&string22)), 19);
   (* (( (ptr) gf←c0259)+92)/* var←c21880 */  ) = var←c24440;
   (void) XR←ImportProcS(var←c24440, 68161025);
   (void) XR←ImportProcS(var←c24440, 68160769);
   (void) XR←ImportProcS(var←c24440, 135266818);
   (void) XR←ImportProcS(var←c24440, 135270145);
   var←c24440 = (word) XR←ExportInterface((word) "ImagerMaskCache", (word) XR←GetTypeIndexS((word) (&string23)), 21);
   (* (( (ptr) gf←c0259)+97)/* var←c24472 */  ) = var←c24440;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+316)/* var←c21624 */ , 67371009, (word) "BitmapFromCharMask")
   ;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+308)/* var←c21592 */ , 2097412, (word) "BoxesFromCharMask");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+292)/* var←c21528 */ , 67371521, (word) "RasterCharMaskFromSampleMap")
   ;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+300)/* var←c21560 */ , 68420354, (word) "RasterCharMaskFromManhattan")
   ;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+284)/* var←c21496 */ , 68682755, (word) "RunsCharMaskFromManhattan")
   ;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+276)/* var←c21464 */ , 67372289, (word) "CountRuns");
   (void) XR←ExportType((word) "MaskCacheRep", (word) XR←GetTypeIndexS((word) (&string24)), (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2)
      );
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+260)/* var←c21400 */ , 71304961, (word) "Create");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+244)/* var←c21336 */ , 67373057, (word) "Size");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+236)/* var←c21304 */ , 67897603, (word) "Fetch");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+212)/* var←c21208 */ , 67373569, (word) "GetParameters");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+204)/* var←c21176 */ , 527106, (word) "UpdateParameters");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+196)/* var←c21144 */ , 527362, (word) "Store");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+156)/* var←c20984 */ , 265473, (word) "Flush");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+164)/* var←c21016 */ , 527874, (word) "Launder");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+148)/* var←c20952 */ , 67374849, (word) "GetList");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+140)/* var←c20920 */ , 67375105, (word) "GetNamedCache");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+132)/* var←c20888 */ , 4460802, (word) "SetNamedCacheParameters")
   ;
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+124)/* var←c20856 */ , 4608, (word) "FlushAll");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+116)/* var←c20824 */ , 67375873, (word) "ObtainSmallCache");
   (void) XR←ExportProcS(var←c24440, (word) (( (bPt) gf←c0259)+108)/* var←c20792 */ , 529410, (word) "ReleaseSmallCache");
   }

static void ImagerMaskCacheImpl←P0(formal←c048, formal←c047)
   word formal←c048;
   word formal←c047;
   {
   register ptr gf←c24504 =  (ptr) &globalframe;
   /* ImagerMaskCacheImpl: */ 
SOURCE(527, 12564)
   (* (( (ptr) gf←c24504)+87) ) = 2147483648;
   (* (( (ptr) gf←c24504)+88) ) = 2147483648;
   (* (( (ptr) gf←c24504)+89) ) = 2147483647;
   (* (( (ptr) gf←c24504)+90) ) = 2147483647;
SOURCE(6322, 80)
   (* (( (ptr) gf←c24504)+4)/* nullCharMask←v3364 */  ) = (word) RasterCharMaskFromManhattan←P240(0, (*  (W4Pt) (( (ptr) gf←c24504)+83)
      /* var←c21720 */  ));
SOURCE(6404, 46)
   (* (( (ptr) gf←c24504)+5)/* emptyGeneration←v3392 */  ) = (word) NewGeneration←P480(0);
SOURCE(9999, 24)
   (* (( (ptr) gf←c24504)+6)/* discardRate←v3756 */  ) = (*  (ptr) &fc25 );
SOURCE(10088, 24)
   (* (( (ptr) gf←c24504)+7)/* growthFactor←v3784 */  ) = (*  (ptr) &fc26 );
SOURCE(12138, 38)
   {
      word pd27;
      pd27 = (* (( (ptr) (* (( (ptr) gf←c24504)+91)/* var←c21816 */  ))+5) );
      (* (( (ptr) gf←c24504)+8)/* cacheTab←v4008 */  ) = (word) ( *( (fPt) ((*  (ptr) pd27 ))))(17, 0, 0, pd27);
      };
SOURCE(12325, 35)
   (* (( (ptr) gf←c24504)+9)/* smallCacheFailLimit←v4064 */  ) = 500;
   }

static word BitmapFromCharMask←P120(formal←c0298)
   word formal←c0298;
   {
   W7 var←c24536;
   /* declaration of charMask←v4356 skipped */ 
   register ptr gf←c24568 =  (ptr) &globalframe;
   word var←c4400;
   /* declaration of var←c21848 skipped */ 
   W2 size←v8060;
   var←c24536.f4/* charMask←v4356 */  = formal←c0298;
   /* BitmapFromCharMask: */ 
SOURCE(1244, 888)
   {
      word tmpAddr28;
      tmpAddr28 = (word) (( (ptr) &var←c24536)+5)/* var←c21848 */ ;
      (*  (ptr) tmpAddr28 ) = ( ((word)  (fPt) boxGenerator←P1884) );
      (* (( (ptr) tmpAddr28) + 1) ) = 1;
      };
SOURCE(1334, 36)
   {
      word pd29;
      pd29 = (* (( (ptr) (* (( (ptr) gf←c24568)+92)/* var←c21880 */  ))+19) );
      (void) ( *( (fPt) ((*  (ptr) pd29 ))))((word) &size←v8060, (*  (W4Pt) (( (ptr) var←c24536.f4/* charMask←v4356 */ )+4) ), pd29)
      ;
      };
SOURCE(1372, 760)
   {
      word var←c21912;
      var←c21912 = var←c24536.f4/* charMask←v4356 */ ;
      if ((var←c21912 == 0)) {
         goto lab←L100000;
         };
      if (((* (( (ptr) var←c21912)+9) ) == 0)) {
         {
            word raster←v8104;
            raster←v8104 = var←c21912;
SOURCE(1440, 330)
            {
               word wordsPerLine←v8160;
               word bitmap←v8188;
SOURCE(1442, 61)
               wordsPerLine←v8160 = ((word) (size←v8060.f1 + 31) >> 5);
SOURCE(1505, 247)
               {
                  word var←c21944;
                  {
                     word raster←v20696;
                     raster←v20696 = raster←v8104;
SOURCE(1172, 68)
                     var←c21944 = (raster←v20696 + 44);
                     };
                  {
                     W2 var←c22008;
                     W2 var←c22040;
                     var←c22008.f0 = var←c21944;
                     var←c22008.f1 = 0;
                     var←c22040.f0 = 0;
                     var←c22040.f1 = 0;
                     {
                        word pd30;
                        word idx31;
                        pd30 = (* (( (ptr) (* (( (ptr) gf←c24568)+93)/* var←c22072 */  ))+25) );
                        bitmap←v8188 = (word) ( *( (fPt) ((*  (ptr) pd30 ))))(size←v8060, 1, (
/*1*/   idx31 = (word) ((word) wordsPerLine←v8160 << 5),
/*1*/   SGNCK(idx31)
/*1*/   ), var←c22008, raster←v8104, IOP2( * ,  (int)wordsPerLine←v8160,  (int)size←v8060.f0)
                           , var←c22040, (*  (W2Pt) (( (ptr) var←c24536.f4/* charMask←v4356 */ )+4) ), pd30);
                        };
                     };
                  };
SOURCE(1754, 16)
               return(bitmap←v8188);
               };
            };
         }
      else {
         lab←L100000: ;
SOURCE(1784, 348)
         {
            word bitmap←v8232;
SOURCE(1786, 95)
            {
               word pd32;
               pd32 = (* (( (ptr) (* (( (ptr) gf←c24568)+93)/* var←c22072 */  ))+19) );
               bitmap←v8232 = (word) ( *( (fPt) ((*  (ptr) pd32 ))))((*  (W4Pt) (( (ptr) var←c24536.f4/* charMask←v4356 */ )+4) ), 1, 0, pd32)
               ;
               };
SOURCE(2020, 26)
            {
               word pd33;
               pd33 = (* (( (ptr) (* (( (ptr) gf←c24568)+93)/* var←c22072 */  ))+48) );
               (void) ( *( (fPt) ((*  (ptr) pd33 ))))(bitmap←v8232, pd33);
               };
SOURCE(2048, 66)
            {
               word pd34;
               pd34 = (* (( (ptr) (* (( (ptr) gf←c24568)+93)/* var←c22072 */  ))+58) );
               (void) ( *( (fPt) ((*  (ptr) pd34 ))))(bitmap←v8232, (word) (( (bPt) &var←c24536)+20)/* var←c21848 */ , 1, 0, pd34);
               };
SOURCE(2116, 16)
            return(bitmap←v8232);
            };
         };
      };
   }

static void boxGenerator←P1884(boxAction←v8336, formal←c24632)
   word boxAction←v8336;
   word formal←c24632;
   {
   register ptr gf←c24600 =  (ptr) &globalframe;
   formal←c24632 = (formal←c24632 - 20);
   /* boxGenerator: */ 
SOURCE(1883, 42)
SOURCE(1954, 61)
   {
      W2 var←c22104;
      var←c22104.f0 = 0;
      var←c22104.f1 = 0;
      (void) BoxesFromCharMask←P180((* (( (ptr) formal←c24632)+4) ), boxAction←v8336, var←c22104, (*  (W4Pt) (( (ptr) gf←c24600)+87)
         /* var←c21784 */  ));
      };
   }

static void BoxesFromCharMask←P180(charMask←v4460, boxAction←v4488, delta←v4516, clip←v4544)
   word charMask←v4460;
   word boxAction←v4488;
   W2 delta←v4516;
   W4 clip←v4544;
   {
   register ptr gf←c24664 =  (ptr) &globalframe;
   /* BoxesFromCharMask: */ 
SOURCE(2138, 1218)
SOURCE(2248, 1108)
   {
      word var←c22136;
      var←c22136 = charMask←v4460;
      if ((var←c22136 == 0)) {
         goto lab←L100002;
         };
      {
         word var←c22392;
         var←c22392 = (* (( (ptr) var←c22136)+9) );
         if ((var←c22392 == 0)) {
            {
               word raster←v8364;
               raster←v8364 = var←c22136;
SOURCE(2316, 565)
               {
                  W2 size←v8420;
                  word wordsPerLine←v8448;
                  word bitmap←v8476;
                  word clipped←v8504;
SOURCE(2318, 36)
                  {
                     word pd35;
                     pd35 = (* (( (ptr) (* (( (ptr) gf←c24664)+92)/* var←c21880 */  ))+19) );
                     (void) ( *( (fPt) ((*  (ptr) pd35 ))))((word) &size←v8420, (*  (W4Pt) (( (ptr) charMask←v4460)+4) ), pd35);
                     };
SOURCE(2356, 61)
                  wordsPerLine←v8448 = ((word) (size←v8420.f1 + 31) >> 5);
SOURCE(2419, 262)
                  {
                     word var←c22168;
                     W2 var←c22232;
                     {
                        word raster←v20648;
                        raster←v20648 = raster←v8364;
SOURCE(1172, 68)
                        var←c22168 = (raster←v20648 + 44);
                        };
                     {
                        word pd36;
                        pd36 = (* (( (ptr) (* (( (ptr) gf←c24664)+92)/* var←c21880 */  ))+6) );
                        (void) ( *( (fPt) ((*  (ptr) pd36 ))))((word) &var←c22232, (*  (W2Pt) (( (ptr) charMask←v4460)+4) ), delta←v4516, pd36);
                        };
                     {
                        W2 var←c22264;
                        W2 var←c22296;
                        var←c22264.f0 = var←c22168;
                        var←c22264.f1 = 0;
                        var←c22296.f0 = 0;
                        var←c22296.f1 = 0;
                        {
                           word pd37;
                           word idx38;
                           pd37 = (* (( (ptr) (* (( (ptr) gf←c24664)+93)/* var←c22072 */  ))+25) );
                           bitmap←v8476 = (word) ( *( (fPt) ((*  (ptr) pd37 ))))(size←v8420, 1, (
/*1*/      idx38 = (word) ((word) wordsPerLine←v8448 << 5),
/*1*/      SGNCK(idx38)
/*1*/      ), var←c22264, raster←v8364, IOP2( * ,  (int)wordsPerLine←v8448,  (int)size←v8420.f0)
/*1*/   , var←c22296, var←c22232, pd37);
                           };
                        };
                     };
SOURCE(2683, 65)
                  {
                     word pd39;
                     pd39 = (* (( (ptr) (* (( (ptr) gf←c24664)+93)/* var←c22072 */  ))+27) );
                     clipped←v8504 = (word) ( *( (fPt) ((*  (ptr) pd39 ))))(bitmap←v8476, clip←v4544, pd39);
                     };
SOURCE(2750, 48)
                  {
                     word pd40;
                     pd40 = (* (( (ptr) (* (( (ptr) gf←c24664)+93)/* var←c22072 */  ))+60) );
                     (void) ( *( (fPt) ((*  (ptr) pd40 ))))(clipped←v8504, boxAction←v4488, pd40);
                     };
SOURCE(2800, 38)
                  {
                     word pd41;
                     pd41 = (* (( (ptr) (* (( (ptr) gf←c24664)+93)/* var←c22072 */  ))+30) );
                     (void) ( *( (fPt) ((*  (ptr) pd41 ))))(bitmap←v8476, pd41);
                     };
SOURCE(2840, 39)
                  {
                     word pd42;
                     pd42 = (* (( (ptr) (* (( (ptr) gf←c24664)+93)/* var←c22072 */  ))+30) );
                     (void) ( *( (fPt) ((*  (ptr) pd42 ))))(clipped←v8504, pd42);
                     };
                  };
               };
            }
         else {
            if ((var←c22392 == 1)) {
               {
                  word runGroup←v8548;
                  runGroup←v8548 = var←c22136;
SOURCE(2918, 449)
                  {
                     word s0←v8604;
                     word f0←v8632;
                     word s←v8660;
SOURCE(2920, 45)
                     s0←v8604 = (delta←v4516.f0 + (* (( (ptr) charMask←v4460)+4) ));
SOURCE(2967, 45)
                     f0←v8632 = (delta←v4516.f1 + (* (( (ptr) charMask←v4460)+5) ));
SOURCE(3014, 15)
                     s←v8660 = s0←v8604;
SOURCE(3031, 325)
                     {
                        register word i←v8704 = 0;
                        register word noName←c22328;
                        noName←c22328 = (* (( (ptr) runGroup←v8548)+10) );
                        if ((i←v8704 >= noName←c22328)) {
                           goto lab←L100004;
                           };
                        lab←L100007: ;
                        if (( (int)s←v8660 <  (int)clip←v4544.f2)) {
                           }
                        else {
                           goto lab←L100004;
                           };
                        {
                           word r←v8748;
SOURCE(3089, 36)
                           {
/*1*/   word limit43;
/*1*/   r←v8748 = (* ((( (ptr) runGroup←v8548)+11)+(
/*1*/         limit43 = (* (( (ptr) runGroup←v8548)+10) ),
/*1*/         BCK(i←v8704, limit43)
/*1*/         )) );
/*1*/   };
SOURCE(3127, 197)
                           if (( (int)s←v8660 >=  (int)clip←v4544.f0)) {
SOURCE(3151, 175)
/*1*/   {
/*1*/      word fMin←v8792;
/*1*/      word fMax←v8820;
SOURCE(3153, 47)
/*1*/      {
/*1*/         word x44;
/*1*/         word x45;
/*1*/         fMin←v8792 = (x44 = ( (unsigned) ((unsigned)r←v8748 >> 16) + f0←v8632),
/*1*/            x45 = clip←v4544.f1,
/*1*/            MAX((int)(word), x44, x45));
/*1*/         };
SOURCE(3202, 55)
/*1*/      {
/*1*/         word x46;
/*1*/         word x47;
/*1*/         fMax←v8820 = (x46 = (( (unsigned) ((unsigned)r←v8748 >> 16) +  (unsigned) ( (((unsigned)r←v8748 << 17) >> 17) )) + f0←v8632),
/*1*/            x47 = clip←v4544.f3,
/*1*/            MIN((int)(word), x46, x47));
/*1*/         };
SOURCE(3259, 65)
/*1*/      if (( (int)fMax←v8820 >  (int)fMin←v8792)) {
SOURCE(3279, 45)
/*1*/         {
/*1*/            W4 var←c22360;
/*1*/            var←c22360.f0 = s←v8660;
/*1*/            var←c22360.f1 = fMin←v8792;
/*1*/            var←c22360.f2 = (s←v8660 + 1);
/*1*/            var←c22360.f3 = fMax←v8820;
/*1*/            (void) ( *( (fPt) ((*  (ptr) boxAction←v4488 ))))(var←c22360, boxAction←v4488);
/*1*/            };
/*1*/         };
/*1*/      };
/*1*/   };
SOURCE(3329, 27)
                           if (r←v8748 & 0100000) {
SOURCE(3347, 9)
/*1*/   s←v8660 = (s←v8660 + 1);
/*1*/   };
                           };
                        i←v8704 = (i←v8704 + 1);
                        if ((i←v8704 < noName←c22328)) {
                           goto lab←L100007;
                           };
                        lab←L100004: ;
                        };
                     };
                  };
               }
            else {
               lab←L100002: ;
               };
            };
         };
      };
   }

static word RasterCharMaskFromManhattan←P240(p←v4604, bb←v4632)
   word p←v4604;
   W4 bb←v4632;
   {
   register ptr gf←c24696 =  (ptr) &globalframe;
   word var←c4676;
   word rast←v8864;
   word bitmapWords←v8892;
   /* RasterCharMaskFromManhattan: */ 
SOURCE(3391, 702)
SOURCE(3510, 63)
   {
      word pd48;
      pd48 = (* (( (ptr) (* (( (ptr) gf←c24696)+92)/* var←c21880 */  ))+17) );
      rast←v8864 = ((word) ((word) ( *( (fPt) ((*  (ptr) pd48 ))))(bb←v4632, pd48) + 31) >> 5);
      };
SOURCE(3575, 36)
   {
      word pd49;
      word idx50;
      pd49 = (* (( (ptr) (* (( (ptr) gf←c24696)+92)/* var←c21880 */  ))+18) );
      bitmapWords←v8892 = (
         idx50 = (word) ((word) ( *( (fPt) ((*  (ptr) pd49 ))))(bb←v4632, pd49) * rast←v8864),
         SGNCK(idx50)
         );
      };
SOURCE(3613, 480)
   if (( (int)bitmapWords←v8892 >  (int)32000)) {
SOURCE(3641, 26)
      return(0);
      }
   else {
SOURCE(3667, 428)
      {
         word mask←v8936;
         word bits←v8964;
SOURCE(3669, 72)
         {
            word var←c22424;
            word var←c22456;
            word var←c22488;
            var←c22424 = SGNCK(bitmapWords←v8892);
            var←c22456 = ((word) var←c22424 << 2);
            var←c22488 = XR←NewObject((44 + var←c22456), (* (( (ptr) gf←c24696)+15) ));
            (* (( (ptr) var←c22488)+10) ) = var←c22424;
            mask←v8936 = var←c22488;
            };
SOURCE(3743, 207)
         {
            W2 var←c22520;
            word var←c22552;
            {
               word pd51;
               pd51 = (* (( (ptr) (* (( (ptr) gf←c24696)+92)/* var←c21880 */  ))+19) );
               (void) ( *( (fPt) ((*  (ptr) pd51 ))))((word) &var←c22520, bb←v4632, pd51);
               };
            {
               word raster←v20600;
               raster←v20600 = mask←v8936;
SOURCE(1172, 68)
               var←c22552 = (raster←v20600 + 44);
               };
            {
               W2 var←c22616;
               W2 var←c22648;
               var←c22616.f0 = var←c22552;
               var←c22616.f1 = 0;
               var←c22648.f0 = 0;
               var←c22648.f1 = 0;
               {
                  word pd52;
                  word idx53;
                  pd52 = (* (( (ptr) (* (( (ptr) gf←c24696)+93)/* var←c22072 */  ))+25) );
                  bits←v8964 = (word) ( *( (fPt) ((*  (ptr) pd52 ))))(var←c22520, 1, (
                        idx53 = (word) ((word) rast←v8864 << 5),
                        SGNCK(idx53)
                        ), var←c22616, mask←v8936, bitmapWords←v8892
                     , var←c22648, (*  (W2Pt) &bb←v4632 ), pd52);
                  };
               };
            };
SOURCE(3952, 13)
         (*  (W4Pt) (( (ptr) mask←v8936)+4) ) = bb←v4632;
SOURCE(3967, 64)
         lab←L100011: ;
         if ((p←v4604 != 0)) {
            }
         else {
            goto lab←L100009;
            };
SOURCE(3984, 35)
         {
            word pd54;
            pd54 = (* (( (ptr) (* (( (ptr) gf←c24696)+93)/* var←c22072 */  ))+52) );
            (void) ( *( (fPt) ((*  (ptr) pd54 ))))(bits←v8964, (*  (W4Pt) p←v4604 ), 1, 0, pd54);
            };
SOURCE(4021, 10)
         p←v4604 = (* (( (ptr) p←v4604)+4) );
         goto lab←L100011;
         lab←L100009: ;
SOURCE(4042, 36)
         {
            word pd55;
            pd55 = (* (( (ptr) (* (( (ptr) gf←c24696)+93)/* var←c22072 */  ))+30) );
            (void) ( *( (fPt) ((*  (ptr) pd55 ))))(bits←v8964, pd55);
            };
SOURCE(4080, 13)
         return(mask←v8936);
         };
      };
   }

static word RasterCharMaskFromSampleMap←P300(map←v4748)
   word map←v4748;
   {
   register ptr gf←c24728 =  (ptr) &globalframe;
   word var←c4792;
   W4 bb←v9020;
   word rast←v9048;
   word bitmapWords←v9076;
   /* RasterCharMaskFromSampleMap: */ 
SOURCE(4102, 761)
SOURCE(4210, 37)
   bb←v9020 = (*  (W4Pt) map←v4748 );
SOURCE(4249, 63)
   {
      word pd56;
      pd56 = (* (( (ptr) (* (( (ptr) gf←c24728)+92)/* var←c21880 */  ))+17) );
      rast←v9048 = ((word) ((word) ( *( (fPt) ((*  (ptr) pd56 ))))(bb←v9020, pd56) + 31) >> 5);
      };
SOURCE(4314, 42)
   {
      word pd57;
      word idx58;
      pd57 = (* (( (ptr) (* (( (ptr) gf←c24728)+92)/* var←c21880 */  ))+18) );
      bitmapWords←v9076 = (
         idx58 = (word) ((word) ( *( (fPt) ((*  (ptr) pd57 ))))(bb←v9020, pd57) * rast←v9048),
         SGNCK(idx58)
         );
      };
SOURCE(4358, 505)
   if (( (int)bitmapWords←v9076 >  (int)32000)) {
SOURCE(4386, 26)
      return(0);
      }
   else {
SOURCE(4412, 453)
      {
         word mask←v9120;
         word bits←v9148;
SOURCE(4414, 72)
         {
            word var←c22680;
            word var←c22712;
            word var←c22744;
            var←c22680 = SGNCK(bitmapWords←v9076);
            var←c22712 = ((word) var←c22680 << 2);
            var←c22744 = XR←NewObject((44 + var←c22712), (* (( (ptr) gf←c24728)+15) ));
            (* (( (ptr) var←c22744)+10) ) = var←c22680;
            mask←v9120 = var←c22744;
            };
SOURCE(4488, 207)
         {
            W2 var←c22776;
            word var←c22808;
            {
               word pd59;
               pd59 = (* (( (ptr) (* (( (ptr) gf←c24728)+92)/* var←c21880 */  ))+19) );
               (void) ( *( (fPt) ((*  (ptr) pd59 ))))((word) &var←c22776, bb←v9020, pd59);
               };
            {
               word raster←v20552;
               raster←v20552 = mask←v9120;
SOURCE(1172, 68)
               var←c22808 = (raster←v20552 + 44);
               };
            {
               W2 var←c22872;
               W2 var←c22904;
               var←c22872.f0 = var←c22808;
               var←c22872.f1 = 0;
               var←c22904.f0 = 0;
               var←c22904.f1 = 0;
               {
                  word pd60;
                  word idx61;
                  pd60 = (* (( (ptr) (* (( (ptr) gf←c24728)+93)/* var←c22072 */  ))+25) );
                  bits←v9148 = (word) ( *( (fPt) ((*  (ptr) pd60 ))))(var←c22776, 1, (
                        idx61 = (word) ((word) rast←v9048 << 5),
                        SGNCK(idx61)
                        ), var←c22872, mask←v9120, bitmapWords←v9076
                     , var←c22904, (*  (W2Pt) &bb←v9020 ), pd60);
                  };
               };
            };
SOURCE(4697, 13)
         (*  (W4Pt) (( (ptr) mask←v9120)+4) ) = bb←v9020;
SOURCE(4712, 98)
         {
            W2 var←c22936;
            {
               word pd62;
               pd62 = (* (( (ptr) (* (( (ptr) gf←c24728)+92)/* var←c21880 */  ))+19) );
               (void) ( *( (fPt) ((*  (ptr) pd62 ))))((word) &var←c22936, bb←v9020, pd62);
               };
            {
               word pd63;
               pd63 = (* (( (ptr) (* (( (ptr) gf←c24728)+93)/* var←c22072 */  ))+49) );
               (void) ( *( (fPt) ((*  (ptr) pd63 ))))(bits←v9148, map←v4748, (*  (W2Pt) &bb←v9020 ), (*  (W2Pt) &bb←v9020 ), var←c22936, 0, pd63)
               ;
               };
            };
SOURCE(4812, 36)
         {
            word pd64;
            pd64 = (* (( (ptr) (* (( (ptr) gf←c24728)+93)/* var←c22072 */  ))+30) );
            (void) ( *( (fPt) ((*  (ptr) pd64 ))))(bits←v9148, pd64);
            };
SOURCE(4850, 13)
         return(mask←v9120);
         };
      };
   }

static word RunsCharMaskFromManhattan←P360(p←v4864, formal←c0299, nRuns←v4920)
   word p←v4864;
   W4 formal←c0299;
   word nRuns←v4920;
   {
   W13 var←c24760;
   /* declaration of bb←v4892 skipped */ 
   register ptr gf←c24792 =  (ptr) &globalframe;
   /* declaration of mask←v4964 skipped */ 
   /* declaration of var←c22968 skipped */ 
   /* declaration of i←v9204 skipped */ 
   /* declaration of s←v9232 skipped */ 
   (*  (W4Pt) (( (ptr) &var←c24760)+4)/* bb←v4892 */  ) = formal←c0299;
   /* RunsCharMaskFromManhattan: */ 
SOURCE(4872, 780)
   {
      word tmpAddr65;
      tmpAddr65 = (word) (( (ptr) &var←c24760)+9)/* var←c22968 */ ;
      (*  (ptr) tmpAddr65 ) = ( ((word)  (fPt) AppendRun←P2376) );
      (* (( (ptr) tmpAddr65) + 1) ) = 1;
      };
SOURCE(4872, 780)
   (* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ) = 0;
SOURCE(5005, 10)
   (* (( (ptr) &var←c24760)+11)/* i←v9204 */  ) = 0;
SOURCE(5017, 10)
   (* (( (ptr) &var←c24760)+12)/* s←v9232 */  ) = 0;
   {
      word var←c23128;
SOURCE(5388, 46)
      if (( (int)nRuns←v4920 ==  (int)0) || ( (int)nRuns←v4920 >  (int)4000)) {
SOURCE(5422, 12)
         return(0);
         };
SOURCE(5436, 35)
      {
         word var←c23000;
         word var←c23032;
         word var←c23064;
         var←c23000 = SGNCK(nRuns←v4920);
         var←c23032 = ((word) var←c23000 << 2);
         var←c23064 = XR←NewObject((44 + var←c23032), (* (( (ptr) gf←c24792)+15) ));
         (* (( (ptr) var←c23064)+10) ) = var←c23000;
         (* (( (ptr) var←c23064)+9) ) = 1;
         (* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ) = var←c23064;
         };
SOURCE(5473, 13)
      (*  (W4Pt) (( (ptr) (* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ))+4) ) = (*  (W4Pt) (( (ptr) &var←c24760)+4)/* bb←v4892 */  );
SOURCE(5488, 65)
      {
         word pd66;
         pd66 = (* (( (ptr) (* (( (ptr) gf←c24792)+94)/* var←c23096 */  ))+19) );
         (void) ( *( (fPt) ((*  (ptr) pd66 ))))(p←v4864, (word) (( (bPt) &var←c24760)+36)/* var←c22968 */ , 1, pd66);
         };
SOURCE(5555, 16)
      if (( (int)(* (( (ptr) &var←c24760)+11)/* i←v9204 */  ) !=  (int)nRuns←v4920)) {
SOURCE(5571, 5)
         (void) XR←RaiseUnnamedError();
         };
SOURCE(5578, 43)
      {
         word pd67;
         pd67 = (* (( (ptr) (* (( (ptr) gf←c24792)+92)/* var←c21880 */  ))+18) );
         if ((((* (( (ptr) &var←c24760)+12)/* s←v9232 */  ) + 1) != (word) ( *( (fPt) ((*  (ptr) pd67 ))))((*  (W4Pt) ((( (ptr) (* (
                  ( (ptr) &var←c24760)+8)/* mask←v4964 */  ))+4)) ), pd67))) {
SOURCE(5621, 5)
            (void) XR←RaiseUnnamedError();
            };
         };
SOURCE(5628, 24)
      {
         word limit68;
         var←c23128 = ((* (( (ptr) &var←c24760)+11)/* i←v9204 */  ) - 1);
         (* (((( (ptr) (* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ))+11)+(
               limit68 = (* (( (ptr) (* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ))+10) ),
               BCK(var←c23128, limit68)
               ))) ) |= 32768;
         };
      };
SOURCE(4872, 780)
   return((* (( (ptr) &var←c24760)+8)/* mask←v4964 */  ));
   }

static void AppendRun←P2376(box←v9336, formal←c24856)
   W4 box←v9336;
   word formal←c24856;
   {
   register ptr gf←c24824 =  (ptr) &globalframe;
   word check←v9364;
   word smin←v9392;
   word fmin←v9420;
   formal←c24856 = (formal←c24856 - 36);
   /* AppendRun: */ 
SOURCE(5029, 354)
SOURCE(5063, 29)
   {
      word pd69;
      word idx70;
      pd69 = (* (( (ptr) (* (( (ptr) gf←c24824)+92)/* var←c21880 */  ))+18) );
      check←v9364 = (
         idx70 = (word) ((word) ( *( (fPt) ((*  (ptr) pd69 ))))(box←v9336, pd69) - 1),
         BCK(idx70, 1)
         );
      };
SOURCE(5094, 30)
   {
      word idx71;
      smin←v9392 = (
         idx71 = (word) (box←v9336.f0 - (* (( (ptr) formal←c24856)+4) )),
         SGNCK(idx71)
         );
      };
SOURCE(5126, 30)
   {
      word idx72;
      fmin←v9420 = (
         idx72 = (word) (box←v9336.f1 - (* (( (ptr) formal←c24856)+5) )),
         SGNCK(idx72)
         );
      };
SOURCE(5158, 140)
   if ((smin←v9392 != (* (( (ptr) formal←c24856)+12) ))) {
      {
         word var←c23160;
SOURCE(5177, 24)
         {
            word limit73;
            var←c23160 = ((* (( (ptr) formal←c24856)+11) ) - 1);
            (* (((( (ptr) (* (( (ptr) formal←c24856)+8) ))+11)+(
                  limit73 = (* (( (ptr) (* (( (ptr) formal←c24856)+8) ))+10) ),
                  BCK(var←c23160, limit73)
                  ))) ) |= 32768;
            };
SOURCE(5203, 9)
         (* (( (ptr) formal←c24856)+12) ) = ((* (( (ptr) formal←c24856)+12) ) + 1);
SOURCE(5214, 84)
         lab←L100015: ;
         if ((smin←v9392 > (* (( (ptr) formal←c24856)+12) ))) {
            }
         else {
            goto lab←L100013;
            };
SOURCE(5232, 44)
         {
            word idx74;
            word limit75;
            (* ((( (ptr) (* (( (ptr) formal←c24856)+8) ))+11)+(
                  idx74 = (* (( (ptr) formal←c24856)+11) ),
                  limit75 = (* (( (ptr) (* (( (ptr) formal←c24856)+8) ))+10) ),
                  BCK(idx74, limit75)
                  )) ) = 32768;
            };
SOURCE(5278, 9)
         (* (( (ptr) formal←c24856)+11) ) = ((* (( (ptr) formal←c24856)+11) ) + 1);
SOURCE(5289, 9)
         (* (( (ptr) formal←c24856)+12) ) = ((* (( (ptr) formal←c24856)+12) ) + 1);
         goto lab←L100015;
         lab←L100013: ;
         };
      };
SOURCE(5312, 60)
   {
      word var←c23192;
      {
         word pd76;
         word idx77;
         pd76 = (* (( (ptr) (* (( (ptr) gf←c24824)+92)/* var←c21880 */  ))+17) );
         var←c23192 = (
            idx77 = (word) ( *( (fPt) ((*  (ptr) pd76 ))))(box←v9336, pd76),
            BCK(idx77, 32768)
            );
         };
      {
         word idx78;
         word limit79;
         (* ((( (ptr) (* (( (ptr) formal←c24856)+8) ))+11)+(
               idx78 = (* (( (ptr) formal←c24856)+11) ),
               limit79 = (* (( (ptr) (* (( (ptr) formal←c24856)+8) ))+10) ),
               BCK(idx78, limit79)
               )) ) = (((word) BCK(fmin←v9420, 65536) << 16) +  (unsigned) ( (((unsigned)var←c23192 << 17) >> 17) ));
         };
      };
SOURCE(5374, 9)
   (* (( (ptr) formal←c24856)+11) ) = ((* (( (ptr) formal←c24856)+11) ) + 1);
   }

static word CountRuns←P420(p←v5036)
   word p←v5036;
   {
   register ptr gf←c24888 =  (ptr) &globalframe;
   word runs←v5080;
   word s←v9484;
   /* CountRuns: */ 
SOURCE(5658, 305)
SOURCE(5658, 305)
   runs←v5080 = 0;
SOURCE(5738, 49)
   s←v9484 =  ( (p←v5036 != 0) ? (*  (ptr) p←v5036 ) : 0 ) ;
SOURCE(5789, 174)
   lab←L100018: ;
   if ((p←v5036 != 0)) {
      }
   else {
      goto lab←L100016;
      };
   {
      word sMin←v9528;
      word sSize←v9556;
SOURCE(5806, 29)
      sMin←v9528 = (*  (ptr) p←v5036 );
SOURCE(5837, 30)
      {
         word pd80;
         word idx81;
         pd80 = (* (( (ptr) (* (( (ptr) gf←c24888)+92)/* var←c21880 */  ))+18) );
         sSize←v9556 = (
            idx81 = (word) ( *( (fPt) ((*  (ptr) pd80 ))))((*  (W4Pt) (p←v5036) ), pd80),
            SGNCK(idx81)
            );
         };
SOURCE(5869, 42)
      if (( (int)sMin←v9528 >  (int)s←v9484)) {
SOURCE(5887, 24)
         runs←v5080 = (runs←v5080 + (sMin←v9528 - s←v9484));
         };
SOURCE(5914, 16)
      s←v9484 = (sMin←v9528 + sSize←v9556);
SOURCE(5932, 19)
      runs←v5080 = (runs←v5080 + sSize←v9556);
SOURCE(5953, 10)
      p←v5036 = (* (( (ptr) p←v5036)+4) );
      };
   goto lab←L100018;
   lab←L100016: ;
SOURCE(5658, 305)
   return(runs←v5080);
   }

static word NewGeneration←P480(sizeLimit←v5504)
   word sizeLimit←v5504;
   {
   register ptr gf←c24920 =  (ptr) &globalframe;
   word g←v5548;
   /* NewGeneration: */ 
SOURCE(6453, 138)
SOURCE(6453, 138)
   g←v5548 = 0;
SOURCE(6523, 56)
   {
      word var←c23288;
      word var←c23320;
      word var←c23352;
      {
         word pd82;
         pd82 = (* (( (ptr) (* (( (ptr) gf←c24920)+95)/* var←c23256 */  ))+8) );
         var←c23288 = (word) ( *( (fPt) ((*  (ptr) pd82 ))))(sizeLimit←v5504, pd82);
         };
      var←c23320 = ((word) var←c23288 << 2);
      var←c23352 = XR←NewObject((8 + var←c23320), (* (( (ptr) gf←c24920)+18) ));
      (* (( (ptr) var←c23352)+1) ) = var←c23288;
      g←v5548 = var←c23352;
      };
SOURCE(6581, 10)
   (*  (ptr) g←v5548 ) = 0;
SOURCE(6453, 138)
   return(g←v5548);
   }

static word Create←P540(param←v5608)
   W16 param←v5608;
   {
   register ptr gf←c24952 =  (ptr) &globalframe;
   word new←v5652;
   word maxSize←v9600 = 1;
   word lgMaxSize←v9628 = 0;
   word parameters←v9656;
   /* Create: */ 
SOURCE(6597, 439)
SOURCE(6597, 439)
   new←v5652 = 0;
SOURCE(6712, 51)
   parameters←v9656 = XR←NewObject(64, (* (( (ptr) gf←c24952)+19) ));
   (*  (W16Pt) parameters←v9656 ) = param←v5608;
SOURCE(6765, 23)
   new←v5652 = XR←NewObject(40, (* (( (ptr) gf←c24952)+11) ));
SOURCE(6790, 84)
   (* (( (ptr) new←v5652)+5) ) = XR←NewObject(1024, (* (( (ptr) gf←c24952)+20) ));
SOURCE(6876, 27)
   (* (( (ptr) new←v5652)+6) ) = 0;
SOURCE(6905, 22)
   (* (( (ptr) new←v5652)+7) ) = 0;
SOURCE(6929, 27)
   (* (( (ptr) new←v5652)+4) ) = parameters←v9656;
SOURCE(6958, 48)
   {
      word var←c23480;
      var←c23480 = (word) NewGeneration←P480((*  (ptr) (parameters←v9656) ));
      (* (( (ptr) new←v5652)+8) ) = var←c23480;
      };
SOURCE(7008, 28)
   (* (( (ptr) new←v5652)+9) ) = (* (( (ptr) gf←c24952)+5)/* emptyGeneration←v3392 */  );
SOURCE(6597, 439)
   return(new←v5652);
   }

static word Occupancy←P600(x←v5712)
   word x←v5712;
   {
   register ptr gf←c24984 =  (ptr) &globalframe;
   word lst←v5756;
   /* Occupancy: */ 
SOURCE(7042, 349)
   (void) (XR←MonitorEntry(x←v5712));
SOURCE(7042, 349)
   lst←v5756 = 0;
SOURCE(7121, 270)
   {
      register word i←v9748 = 1;
      lab←L100022: ;
      {
         word gen←v9792;
         word text←v9820;
SOURCE(7156, 26)
         gen←v9792 = (* ((( (ptr) x←v5712)+8)+BCK(i←v9748, 2)) );
SOURCE(7184, 39)
         {
            word var←c23512;
            word var←c23544;
            word var←c23576;
            {
               word idx83;
               var←c23512 = (
                  idx83 = (* (( (ptr) gen←v9792)+1) ),
                  BCK(idx83, 32768)
                  );
               };
            var←c23544 = ((word) ((word) (var←c23512 + 3) >> 2) << 2);
            var←c23576 = XR←NewObject((4 + var←c23544), (* (( (ptr) gf←c24984)+21) ));
            (* (( (hPt) var←c23576)+1) ) = var←c23512;
            text←v9820 = var←c23576;
            };
SOURCE(7225, 107)
         {
            register word i←v9876 = 0;
            register word noName←c23608;
            word var←c23640;
            noName←c23608 = (* (( (ptr) gen←v9792)+1) );
            if ((i←v9876 >= noName←c23608)) {
               goto lab←L100023;
               };
            lab←L100026: ;
SOURCE(7259, 73)
            {
               word limit84;
               {
                  word limit85;
                  var←c23640 = (* ((( (ptr) gen←v9792)+2)+(
                        limit85 = (* (( (ptr) gen←v9792)+1) ),
                        BCK(i←v9876, limit85)
                        )) );
                  };
               (* ((( (bPt) text←v9820)+4)+(
                     limit84 = (word)  (unsigned) (* (( (hPt) text←v9820)+1) ),
                     BCK(i←v9876, limit84)
                     )) ) =  ( (var←c23640 == (* (( (ptr) gf←c24984)+4)/* nullCharMask←v3364 */  )) ? 88 :  ( (var←c23640 == 0) ? 45 : 35 )  ) ;
               };
            i←v9876 = (i←v9876 + 1);
            if ((i←v9876 < noName←c23608)) {
               goto lab←L100026;
               };
            lab←L100023: ;
            };
SOURCE(7343, 25)
         {
            word idx86;
            (*  (hPt) text←v9820 ) = (
               idx86 = (* (( (ptr) gen←v9792)+1) ),
               BCK(idx86, 32768)
               );
            };
SOURCE(7370, 21)
         {
            word var←c23672;
            var←c23672 = XR←NewObject(8, (* (( (ptr) gf←c24984)+22) ));
            (*  (ptr) var←c23672 ) = text←v9820;
            (* (( (ptr) var←c23672)+1) ) = lst←v5756;
            lst←v5756 = var←c23672;
            };
         };
      if ((0 >= i←v9748)) {
         goto lab←L100019;
         };
      i←v9748 = (i←v9748 - 1);
      goto lab←L100022;
      lab←L100019: ;
      };
SOURCE(7042, 349)
   (void) (XR←MonitorExit(x←v5712));
   return(lst←v5756);
   }

static word Size←P660(x←v5912)
   word x←v5912;
   {
   word var←c5956;
   /* Size: */ 
SOURCE(7406, 94)
   (void) (XR←MonitorEntry(x←v5912));
SOURCE(7463, 37)
   {
      word var←c23704;
      {
         word idx87;
         var←c23704 = (
            idx87 = (word) ((*  (ptr) (* (( (ptr) x←v5912)+8) ) ) + (*  (ptr) (* (( (ptr) x←v5912)+9) ) )),
            SGNCK(idx87)
            );
         };
      (void) (XR←MonitorExit(x←v5912));
      return(var←c23704);
      };
   }

static word Fetch←P720(x←v6016, font←v6044, char←v6072)
   word x←v6016;
   word font←v6044;
   word char←v6072;
   {
   word var←c6132;
   word c←v9920;
   /* Fetch: */ 
SOURCE(7504, 467)
   (void) (XR←MonitorEntry(x←v6016));
SOURCE(7599, 81)
   c←v9920 = (word) FetchInternal←P840((* (( (ptr) x←v6016)+8) ), font←v6044, char←v6072, 0);
SOURCE(7682, 250)
   if ((c←v9920 == 0)) {
SOURCE(7700, 70)
      c←v9920 = (word) FetchInternal←P840((* (( (ptr) x←v6016)+9) ), font←v6044, char←v6072, 1);
SOURCE(7772, 160)
      if ((c←v9920 != 0)) {
SOURCE(7790, 142)
         if ((0 == (word) StoreInternal←P1080((* (( (ptr) x←v6016)+8) ), c←v9920))) {
SOURCE(7846, 9)
            (void) Dillon←P1140(x←v6016);
SOURCE(7886, 46)
            {
               word var←c23736;
               var←c23736 = (word) StoreInternal←P1080((* (( (ptr) x←v6016)+8) ), c←v9920);
               };
            };
         };
      };
SOURCE(7961, 10)
   (void) (XR←MonitorExit(x←v6016));
   return(c←v9920);
   }

static word HashCharAndFont←P780(char←v6276, font←v6304, mod←v6332)
   word char←v6276;
   word font←v6304;
   word mod←v6332;
   {
   register ptr gf←c25016 =  (ptr) &globalframe;
   word var←c6388;
   W2 cf←v9964;
   /* HashCharAndFont: */ 
SOURCE(8049, 246)
SOURCE(8134, 42)
   cf←v9964.f0 = char←v6276;
   cf←v9964.f1 = font←v6304;
SOURCE(8186, 109)
SOURCE(8188, 107)
   {
      word var←c0286;
      {
         W3 var←c23832;
         var←c23832.f0 = (word) &cf←v9964;
         var←c23832.f1 = 0;
         var←c23832.f2 = 8;
         {
            word pd88;
            pd88 = (* (( (ptr) (* (( (ptr) gf←c25016)+95)/* var←c23256 */  ))+7) );
            var←c0286 = (word) ( *( (fPt) ((*  (ptr) pd88 ))))(var←c23832, mod←v6332, pd88);
            };
         };
      return(var←c0286);
      };
   }

static word FetchInternal←P840(gen←v6448, font←v6476, char←v6504, remove←v6532)
   word gen←v6448;
   word font←v6476;
   word char←v6504;
   word remove←v6532;
   {
   register ptr gf←c25048 =  (ptr) &globalframe;
   word var←c6588;
   word hash←v10008;
   word last←v10036;
   word c←v10064 = 0;
   /* FetchInternal: */ 
SOURCE(8302, 563)
SOURCE(8426, 57)
   hash←v10008 = (word) HashCharAndFont←P780(char←v6504, font←v6476, (* (( (ptr) gen←v6448)+1) ));
SOURCE(8485, 30)
   last←v10036 = ((* (( (ptr) gen←v6448)+1) ) - 1);
SOURCE(8536, 211)
   lab←L100029: ;
   {
      word tc89;
      {
         word limit90;
         c←v10064 = (* ((( (ptr) gen←v6448)+2)+(
               limit90 = (* (( (ptr) gen←v6448)+1) ),
               BCK(hash←v10008, limit90)
               )) );
         };
      if ((c←v10064 != 0)) {
         if (((*  (ptr) c←v10064 ) != font←v6476)) {
            tc89 =  (word) 1;
            }
         else {
            tc89 =  (word) ((* (( (ptr) c←v10064)+1) ) != char←v6504);
            };
         }
      else {
         tc89 =  (word) 0;
         };
      if (tc89) {
         }
      else {
         goto lab←L100027;
         };
      };
SOURCE(8598, 149)
   if ((hash←v10008 != 0)) {
SOURCE(8613, 19)
      hash←v10008 = (hash←v10008 - 1);
      }
   else {
SOURCE(8634, 41)
      if ((last←v10036 ==  (word) -1)) {
SOURCE(8663, 12)
         return(0);
         };
SOURCE(8714, 11)
      hash←v10008 = last←v10036;
SOURCE(8727, 20)
      last←v10036 =  (word) -1;
      };
   goto lab←L100029;
   lab←L100027: ;
SOURCE(8772, 78)
   if ( ( (0 != remove←v6532) ? (c←v10064 != 0) : 0 ) ) {
SOURCE(8801, 24)
      {
         word limit91;
         (* ((( (ptr) gen←v6448)+2)+(
               limit91 = (* (( (ptr) gen←v6448)+1) ),
               BCK(hash←v10008, limit91)
               )) ) = (* (( (ptr) gf←c25048)+4)/* nullCharMask←v3364 */  );
         };
SOURCE(8827, 23)
      {
         word idx92;
         (*  (ptr) gen←v6448 ) = (
            idx92 = (word) ((*  (ptr) gen←v6448 ) - 1),
            SGNCK(idx92)
            );
         };
      };
SOURCE(8855, 10)
   return(c←v10064);
   }

static word GetParameters←P900(x←v6648)
   word x←v6648;
   {
   word var←c6692;
   /* GetParameters: */ 
SOURCE(8871, 89)
SOURCE(8938, 22)
   return((* (( (ptr) x←v6648)+4) ));
   }

static void UpdateParameters←P960(formal←c0300, formal←c0301)
   word formal←c0300;
   word formal←c0301;
   {
   W6 var←c25080;
   /* declaration of x←v6752 skipped */ 
   /* declaration of action←v6780 skipped */ 
   var←c25080.f4/* x←v6752 */  = formal←c0300;
   var←c25080.f5/* action←v6780 */  = formal←c0301;
   /* UpdateParameters: */ 
SOURCE(8964, 125)
   (void) (XR←MonitorEntry(var←c25080.f4/* x←v6752 */ ));
SOURCE(9046, 43)
   {
      word var←c0287;
      var←c0287 = (word) &var←c25080;
       (void) (word) XR←Enable(( ((word)  (fPt) NoName←Q3444) ), ( ((word)  (fPt) NoName←Q3504) ), var←c0287);
      };
SOURCE(8964, 125)
   (void) (XR←MonitorExit(var←c25080.f4/* x←v6752 */ ));
   return;
   }

static word NoName←Q3444(formal←c0276)
   word formal←c0276;
   {
SOURCE(9069, 20)
   {
      word pd93;
      pd93 = (* (( (ptr) formal←c0276)+5) );
      (void) ( *( (fPt) ((*  (ptr) pd93 ))))((* ((( (ptr) (* (( (ptr) formal←c0276)+4) ))+4)) ), pd93);
      };
   return(0);
   }

static void Store←P1020(x←v6900, charMask←v6928)
   word x←v6900;
   word charMask←v6928;
   {
   /* Store: */ 
SOURCE(9095, 228)
   (void) (XR←MonitorEntry(x←v6900));
SOURCE(9167, 156)
   if ((0 == (word) StoreInternal←P1080((* (( (ptr) x←v6900)+8) ), charMask←v6928))) {
SOURCE(9230, 9)
      (void) Dillon←P1140(x←v6900);
SOURCE(9270, 53)
      {
         word var←c23864;
         var←c23864 = (word) StoreInternal←P1080((* (( (ptr) x←v6900)+8) ), charMask←v6928);
         };
      };
SOURCE(9095, 228)
   (void) (XR←MonitorExit(x←v6900));
   return;
   }

static word StoreInternal←P1080(gen←v6988, charMask←v7016)
   word gen←v6988;
   word charMask←v7016;
   {
   word var←c7060;
   word hash←v10108;
   word last←v10136;
   word c←v10164 = 0;
   /* StoreInternal: */ 
SOURCE(9350, 645)
SOURCE(9444, 75)
   hash←v10108 = (word) HashCharAndFont←P780((* (( (ptr) charMask←v7016)+1) ), (*  (ptr) charMask←v7016 ), (* (( (ptr) gen←v6988)+1)
       ));
SOURCE(9521, 30)
   last←v10136 = ((* (( (ptr) gen←v6988)+1) ) - 1);
SOURCE(9572, 63)
   if (((*  (ptr) gen←v6988 ) > ((* (( (ptr) gen←v6988)+1) ) - ((* (( (ptr) gen←v6988)+1) ) >> 2)))) {
SOURCE(9621, 14)
      return(0);
      };
SOURCE(9656, 233)
   lab←L100034: ;
   {
      word tc94;
      {
         word limit95;
         c←v10164 = (* ((( (ptr) gen←v6988)+2)+(
               limit95 = (* (( (ptr) gen←v6988)+1) ),
               BCK(hash←v10108, limit95)
               )) );
         };
      if ((c←v10164 != 0)) {
         if (((*  (ptr) c←v10164 ) != (*  (ptr) charMask←v7016 ))) {
            tc94 =  (word) 1;
            }
         else {
            tc94 =  (word) ((* (( (ptr) c←v10164)+1) ) != (* (( (ptr) charMask←v7016)+1) ));
            };
         }
      else {
         tc94 =  (word) 0;
         };
      if (tc94) {
         }
      else {
         goto lab←L100032;
         };
      };
SOURCE(9738, 151)
   if ((hash←v10108 != 0)) {
SOURCE(9753, 19)
      hash←v10108 = (hash←v10108 - 1);
      }
   else {
SOURCE(9774, 43)
      if ((last←v10136 ==  (word) -1)) {
SOURCE(9803, 14)
         return(0);
         };
SOURCE(9856, 11)
      hash←v10108 = last←v10136;
SOURCE(9869, 20)
      last←v10136 =  (word) -1;
      };
   goto lab←L100034;
   lab←L100032: ;
SOURCE(9914, 42)
   if ((c←v10164 == 0)) {
SOURCE(9932, 24)
      (*  (ptr) gen←v6988 ) = ((*  (ptr) gen←v6988 ) + 1);
      };
SOURCE(9959, 20)
   {
      word limit96;
      (* ((( (ptr) gen←v6988)+2)+(
            limit96 = (* (( (ptr) gen←v6988)+1) ),
            BCK(hash←v10108, limit96)
            )) ) = charMask←v7016;
      };
SOURCE(9981, 14)
   return(1);
   }

static void Dillon←P1140(x←v7120)
   word x←v7120;
   {
   register ptr gf←c25112 =  (ptr) &globalframe;
   word newSize←v10208;
   /* Dillon: */ 
SOURCE(10147, 282)
SOURCE(10188, 160)
   {
      word tc97;
      word x98;
      word pd99;
      word x100;
      float tf101;
      word idx102;
      if (((float)(unsigned)(*  (ptr) (* (( (ptr) x←v7120)+9) ) ) < (float)(unsigned)(* (( (ptr) (* (( (ptr) x←v7120)+9) ))+1) ) * (
         x98 = (* (( (ptr) gf←c25112)+6)/* discardRate←v3756 */  ),  *(float*)&x98
         ))) {
         pd99 = (* (( (ptr) (* (( (ptr) gf←c25112)+96)/* var←c23896 */  ))+7) );
         tc97 =  (word) (
            idx102 = (word) ( *( (fPt) ((*  (ptr) pd99 ))))((
                  tf101 = (float)(unsigned)(* (( (ptr) (* (( (ptr) x←v7120)+8) ))+1) ) * (
                     x100 = (* (( (ptr) gf←c25112)+7)/* growthFactor←v3784 */  ),  *(float*)&x100
                     ),  *(word*)&tf101
                  ), pd99),
            SGNCK(idx102)
            );
         }
      else {
         tc97 =  (word) (*  (ptr) (* (( (ptr) x←v7120)+4) ) );
         };
      newSize←v10208 = tc97;
      };
SOURCE(10350, 23)
   (void) EraseInternal←P1200((* ((( (ptr) x←v7120)+9)) ));
SOURCE(10375, 19)
   (* (( (ptr) x←v7120)+9) ) = (* (( (ptr) x←v7120)+8) );
SOURCE(10396, 33)
   {
      word var←c23928;
      var←c23928 = (word) NewGeneration←P480(newSize←v10208);
      (* (( (ptr) x←v7120)+8) ) = var←c23928;
      };
   }

static void EraseInternal←P1200(gen←v7180)
   word gen←v7180;
   {
   /* EraseInternal: */ 
SOURCE(10435, 119)
SOURCE(10486, 54)
   {
      register word i←v10252 = 0;
      register word noName←c23960;
      {
         word idx103;
         noName←c23960 = (
            idx103 = (* (( (ptr) gen←v7180)+1) ),
            SGNCK(idx103)
            );
         };
      if (( (int)i←v10252 >=  (int)noName←c23960)) {
         goto lab←L100035;
         };
      lab←L100038: ;
SOURCE(10520, 20)
      {
         word limit104;
         (* ((( (ptr) gen←v7180)+2)+(
               limit104 = (* (( (ptr) gen←v7180)+1) ),
               BCK(i←v10252, limit104)
               )) ) = 0;
         };
      i←v10252 = (i←v10252 + 1);
      if (( (int)i←v10252 <  (int)noName←c23960)) {
         goto lab←L100038;
         };
      lab←L100035: ;
      };
SOURCE(10542, 12)
   (*  (ptr) gen←v7180 ) = 0;
   }

static void Launder←P1260(x←v7240, keep←v7268)
   word x←v7240;
   word keep←v7268;
   {
   word list←v10296;
   /* Launder: */ 
SOURCE(10560, 291)
SOURCE(10638, 6)
   list←v10296 = (word) GetList←P1380(x←v7240);
SOURCE(10675, 8)
   (void) Flush←P1320(x←v7240);
SOURCE(10685, 166)
   lab←L100041: ;
   if ((list←v10296 != 0)) {
      }
   else {
      goto lab←L100039;
      };
   {
      word this←v10424;
      word next←v10452;
SOURCE(10705, 27)
      this←v10424 = (*  (ptr) list←v10296 );
SOURCE(10734, 6)
      next←v10452 = (* (( (ptr) list←v10296)+1) );
SOURCE(10770, 16)
      (*  (ptr) list←v10296 ) = 0;
SOURCE(10788, 15)
      (* (( (ptr) list←v10296)+1) ) = 0;
SOURCE(10805, 11)
      list←v10296 = next←v10452;
SOURCE(10818, 33)
      if ((0 != (word) ( *( (fPt) ((*  (ptr) keep←v7268 ))))(this←v10424, keep←v7268))) {
SOURCE(10837, 14)
         (void) Store←P1020(x←v7240, this←v10424);
         };
      };
   goto lab←L100041;
   lab←L100039: ;
   }

static void Flush←P1320(x←v7432)
   word x←v7432;
   {
   register ptr gf←c25144 =  (ptr) &globalframe;
   /* Flush: */ 
SOURCE(10866, 476)
   (void) (XR←MonitorEntry(x←v7432));
   {
      word var←c24056;
SOURCE(10910, 220)
      if ( ( ((* (( (ptr) x←v7432)+5) ) != 0) ? (0 == (* (( (ptr) x←v7432)+6) )) : 0 ) ) {
SOURCE(10965, 25)
         {
            word var←c23992;
            var←c23992 = (* (( (ptr) x←v7432)+5) );
            XR←FillWords(&(* (W256Pt) (var←c23992)), 256, 0);
            };
         }
      else {
SOURCE(10999, 25)
         (* (( (ptr) x←v7432)+6) ) = 0;
SOURCE(11026, 82)
         (* (( (ptr) x←v7432)+5) ) = XR←NewObject(1024, (* (( (ptr) gf←c25144)+20) ));
SOURCE(11110, 20)
         (* (( (ptr) x←v7432)+7) ) = 0;
         };
SOURCE(11135, 23)
      (void) EraseInternal←P1200((* ((( (ptr) x←v7432)+8)) ));
SOURCE(11160, 23)
      (void) EraseInternal←P1200((* ((( (ptr) x←v7432)+9)) ));
SOURCE(11185, 26)
      (* (( (ptr) x←v7432)+9) ) = (* (( (ptr) gf←c25144)+5)/* emptyGeneration←v3392 */  );
SOURCE(11213, 129)
      var←c24056 = (*  (ptr) (* (( (ptr) x←v7432)+4) ) );
      if ( ( (var←c24056 <= ((* (( (ptr) (* (( (ptr) x←v7432)+8) ))+1) ) >> 1)) ? 1 : (var←c24056 > (* (( (ptr) (* (( (ptr) x←v7432)+8)
          ))+1) )) ) ) {
SOURCE(11294, 48)
         {
            word var←c24088;
            var←c24088 = (word) NewGeneration←P480((*  (ptr) ((* (( (ptr) x←v7432)+4) )) ));
            (* (( (ptr) x←v7432)+8) ) = var←c24088;
            };
         };
      };
SOURCE(10866, 476)
   (void) (XR←MonitorExit(x←v7432));
   return;
   }

static word GetList←P1380(x←v7492)
   word x←v7492;
   {
   register ptr gf←c25176 =  (ptr) &globalframe;
   word list←v7536;
   /* GetList: */ 
SOURCE(11351, 253)
   (void) (XR←MonitorEntry(x←v7492));
SOURCE(11351, 253)
   list←v7536 = 0;
SOURCE(11436, 168)
   {
      register word g←v10628 = 0;
      lab←L100045: ;
      {
         word gen←v10692;
SOURCE(11463, 26)
         gen←v10692 = (* ((( (ptr) x←v7492)+8)+g←v10628) );
SOURCE(11491, 113)
         {
            register word i←v10736 = 0;
            register word noName←c24120;
            {
               word idx105;
               noName←c24120 = (
                  idx105 = (* (( (ptr) gen←v10692)+1) ),
                  SGNCK(idx105)
                  );
               };
            if (( (int)i←v10736 >=  (int)noName←c24120)) {
               goto lab←L100046;
               };
            lab←L100049: ;
            {
               word c←v10780;
SOURCE(11525, 20)
               {
                  word limit106;
                  c←v10780 = (* ((( (ptr) gen←v10692)+2)+(
                        limit106 = (* (( (ptr) gen←v10692)+1) ),
                        BCK(i←v10736, limit106)
                        )) );
                  };
SOURCE(11547, 57)
               if ( ( (c←v10780 != 0) ? (c←v10780 != (* (( (ptr) gf←c25176)+4)/* nullCharMask←v3364 */  )) : 0 ) ) {
SOURCE(11584, 20)
                  {
                     word var←c24152;
                     var←c24152 = XR←NewObject(8, (* (( (ptr) gf←c25176)+25) ));
                     (*  (ptr) var←c24152 ) = c←v10780;
                     (* (( (ptr) var←c24152)+1) ) = list←v7536;
                     list←v7536 = var←c24152;
                     };
                  };
               };
            i←v10736 = (i←v10736 + 1);
            if (( (int)i←v10736 <  (int)noName←c24120)) {
               goto lab←L100049;
               };
            lab←L100046: ;
            };
         };
      if ((g←v10628 >= 1)) {
         goto lab←L100042;
         };
      g←v10628 = (g←v10628 + 1);
      goto lab←L100045;
      lab←L100042: ;
      };
SOURCE(11351, 253)
   (void) (XR←MonitorExit(x←v7492));
   return(list←v7536);
   }

static word GetNamedCache←P1440(atom←v7680)
   word atom←v7680;
   {
   register ptr gf←c25208 =  (ptr) &globalframe;
   word r←v7724;
   /* GetNamedCache: */ 
SOURCE(11628, 183)
SOURCE(11628, 183)
   r←v7724 = 0;
SOURCE(11695, 44)
   {
      W2 var←c0233;
      word var←c0288;
      {
         word pd107;
         pd107 = (* (( (ptr) (* (( (ptr) gf←c25208)+91)/* var←c21816 */  ))+7) );
         (void) ( *( (fPt) ((*  (ptr) pd107 ))))((word) &var←c0233, (* (( (ptr) gf←c25208)+8)/* cacheTab←v4008 */  ), atom←v7680, pd107)
         ;
         };
      var←c0288 = var←c0233.f1;
      r←v7724 = XR←Narrow(var←c0288, (* (( (ptr) gf←c25208)+11) ));
      };
SOURCE(11741, 70)
   if ((r←v7724 == 0)) {
SOURCE(11759, 14)
      {
         W16 var←c24184;
         (*  (ptr) &var←c24184 ) = 4000;
         (* (( (ptr) &var←c24184)+1) ) = XR←CheckProc(0);
         (* (( (ptr) &var←c24184)+2) ) = (*  (ptr) &fc108 );
         (* (( (ptr) &var←c24184)+3) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+4) ) = (*  (ptr) &fc108 );
         (* (( (ptr) &var←c24184)+5) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+6) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+7) ) = (*  (ptr) &fc110 );
         (* (( (ptr) &var←c24184)+8) ) = (*  (ptr) &fc108 );
         (* (( (ptr) &var←c24184)+9) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+10) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+11) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+12) ) = (*  (ptr) &fc109 );
         (* (( (ptr) &var←c24184)+13) ) = 0;
         (* (( (ptr) &var←c24184)+14) ) = 0;
         (* (( (ptr) &var←c24184)+15) ) = 0;
         r←v7724 = (word) Create←P540(var←c24184);
         };
SOURCE(11775, 36)
      {
         word var←c24216;
         word pd111;
         pd111 = (* (( (ptr) (* (( (ptr) gf←c25208)+91)/* var←c21816 */  ))+9) );
         var←c24216 = (word) ( *( (fPt) ((*  (ptr) pd111 ))))((* (( (ptr) gf←c25208)+8)/* cacheTab←v4008 */  ), atom←v7680, r←v7724, pd111)
         ;
         };
      };
SOURCE(11628, 183)
   return(r←v7724);
   }

static void SetNamedCacheParameters←P1500(formal←c0238)
   word formal←c0238;
   {
   register ptr gf←c25240 =  (ptr) &globalframe;
   word r←v10824;
   /* SetNamedCacheParameters: */ 
SOURCE(11820, 309)
SOURCE(11892, 55)
   {
      W2 var←c0240;
      word var←c0289;
      {
         word pd112;
         pd112 = (* (( (ptr) (* (( (ptr) gf←c25240)+91)/* var←c21816 */  ))+7) );
         (void) ( *( (fPt) ((*  (ptr) pd112 ))))((word) &var←c0240, (* (( (ptr) gf←c25240)+8)/* cacheTab←v4008 */  ), (*  (ptr) formal←c0238/* atom←v7784 */  ), pd112)
         ;
         };
      var←c0289 = var←c0240.f1;
      r←v10824 = XR←Narrow(var←c0289, (* (( (ptr) gf←c25240)+11) ));
      };
SOURCE(11949, 180)
   if ((r←v10824 == 0)) {
SOURCE(11967, 13)
      r←v10824 = (word) Create←P540((*  (W16Pt) ((( (ptr) formal←c0238)+1)/* p←v7812 */ ) ));
SOURCE(11982, 36)
      {
         word var←c24248;
         word pd113;
         pd113 = (* (( (ptr) (* (( (ptr) gf←c25240)+91)/* var←c21816 */  ))+9) );
         var←c24248 = (word) ( *( (fPt) ((*  (ptr) pd113 ))))((* (( (ptr) gf←c25240)+8)/* cacheTab←v4008 */  ), (*  (ptr) formal←c0238/* atom←v7784 */  ), r←v10824, pd113)
         ;
         };
      }
   else {
SOURCE(12027, 104)
SOURCE(12094, 35)
      if (((* (( (ptr) r←v10824)+4) ) != 0)) {
SOURCE(12121, 8)
         {
            word x←v20744;
            x←v20744 = r←v10824;
SOURCE(12121, 8)
            (void) (XR←MonitorEntry(x←v20744));
SOURCE(12073, 18)
            (*  (W16Pt) (* (( (ptr) x←v20744)+4) ) ) = (*  (W16Pt) (( (ptr) formal←c0238)+1)/* p←v7812 */  );
            (void) (XR←MonitorExit(x←v20744));
            };
         };
      };
   }

static void FlushAll←P1560()
   {
   W6 var←c25272;
   register ptr gf←c25304 =  (ptr) &globalframe;
   /* declaration of var←c24280 skipped */ 
   /* FlushAll: */ 
SOURCE(12179, 140)
   {
      word tmpAddr114;
      tmpAddr114 = (word) (( (ptr) &var←c25272)+4)/* var←c24280 */ ;
      (*  (ptr) tmpAddr114 ) = ( ((word)  (fPt) epa←P3024) );
      (* (( (ptr) tmpAddr114) + 1) ) = 1;
      };
SOURCE(12287, 32)
   {
      word var←c24312;
      word pd115;
      pd115 = (* (( (ptr) (* (( (ptr) gf←c25304)+91)/* var←c21816 */  ))+13) );
      var←c24312 = (word) ( *( (fPt) ((*  (ptr) pd115 ))))((* (( (ptr) gf←c25304)+8)/* cacheTab←v4008 */  ), (word) (( (bPt) &var←c25272)+16)
         /* var←c24280 */ , pd115);
      };
   }

static word epa←P3024(key←v11048, val←v11076, formal←c25368)
   word key←v11048;
   word val←v11076;
   word formal←c25368;
   {
   register ptr gf←c25336 =  (ptr) &globalframe;
   word quit←v11132;
   formal←c25368 = (formal←c25368 - 16);
   /* epa: */ 
SOURCE(12208, 76)
SOURCE(12208, 76)
   quit←v11132 = 0;
SOURCE(12266, 18)
   {
      word var←c24344;
      var←c24344 = XR←Narrow(val←v11076, (* (( (ptr) gf←c25336)+11) ));
      (void) Flush←P1320(var←c24344);
      };
SOURCE(12208, 76)
   return(quit←v11132);
   }

static word ObtainSmallCache←P1620(x←v7888)
   word x←v7888;
   {
   register ptr gf←c25400 =  (ptr) &globalframe;
   word var←c7932;
   /* ObtainSmallCache: */ 
SOURCE(12417, 483)
   (void) (XR←MonitorEntry(x←v7888));
SOURCE(12493, 290)
   if ((0 != (* (( (ptr) x←v7888)+6) ))) {
SOURCE(12521, 39)
      (* (( (ptr) x←v7888)+7) ) = ((* (( (ptr) x←v7888)+7) ) + 1);
SOURCE(12562, 221)
      if (((* (( (ptr) x←v7888)+7) ) > (* (( (ptr) gf←c25400)+9)/* smallCacheFailLimit←v4064 */  ))) {
SOURCE(12611, 82)
         (* (( (ptr) x←v7888)+5) ) = XR←NewObject(1024, (* (( (ptr) gf←c25400)+20) ));
SOURCE(12695, 25)
         (* (( (ptr) x←v7888)+6) ) = 0;
SOURCE(12722, 61)
         (* (( (ptr) gf←c25400)+10)/* smallCacheFailureRecoveries←v4092 */  ) = ((* (( (ptr) gf←c25400)+10)/* smallCacheFailureRecoveries←v4092 */  ) + 
         1);
         };
      };
SOURCE(12791, 38)
   if ((0 != (* (( (ptr) x←v7888)+6) ))) {
SOURCE(12817, 12)
      (void) (XR←MonitorExit(x←v7888));
      return(0);
      };
SOURCE(12831, 24)
   (* (( (ptr) x←v7888)+6) ) = 1;
SOURCE(12857, 20)
   (* (( (ptr) x←v7888)+7) ) = 0;
SOURCE(12879, 21)
   {
      word var←c24408;
      var←c24408 = (* (( (ptr) x←v7888)+5) );
      (void) (XR←MonitorExit(x←v7888));
      return(var←c24408);
      };
   }

static void ReleaseSmallCache←P1680(x←v7992, s←v8020)
   word x←v7992;
   word s←v8020;
   {
   /* ReleaseSmallCache: */ 
SOURCE(12906, 185)
   (void) (XR←MonitorEntry(x←v7992));
SOURCE(12977, 114)
   if ( ( (0 != (* (( (ptr) x←v7992)+6) )) ? ((* (( (ptr) x←v7992)+5) ) == s←v8020) : 0 ) ) {
SOURCE(13026, 26)
      (* (( (ptr) x←v7992)+6) ) = 0;
      }
   else {
SOURCE(13061, 30)
      if ((s←v8020 != 0)) {
SOURCE(13077, 14)
         XR←FillWords(&(* (W256Pt) (s←v8020)), 256, 0);
         };
      };
SOURCE(12906, 185)
   (void) (XR←MonitorExit(x←v7992));
   return;
   }

static void NoName←Q3504(formal←c0258, formal←c200000, formal←c200001, formal←c200002, formal←c200003)
   word formal←c0258;
   word formal←c200000;
   word formal←c200001;
   word formal←c200002;
   word formal←c200003;
   {
   if ((formal←c200001 == XR←Unwind)) {
      (void) (XR←MonitorExit(* (( (ptr) formal←c200000)+4) ));
      };
   (*  (ptr) formal←c0258 ) = 0;
   (* (( (ptr) formal←c0258)+1) ) = 0;
   return;
   }

/* file: ImagerMaskCacheImpl, module: ImagerMaskCacheImpl, compiled at: July 28, 1993 10:20:29 am PDT */ 
extern void XR←install←ImagerMaskCacheImpl() {
   NoName←Q3384();
   }
extern void XR←run←ImagerMaskCacheImpl() { XR←Start(&globalframe); }