/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: December 9, 1992 4:41:22 pm PST */
/* C2C version: October 7, 1992 (native) */
/* ref-counting: off */
/* file: RopeOtherImpl, module: RopeOtherImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [2700058451,2909426187] RopeOtherImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef word (*fPt)();
#define SOURCE(p, l) /* source p, l */
#define MAX(cast, x, y)  ( ( cast x) > ( cast y) ? (x) : (y) )
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
static void NoName←Q2100();
static void RopeOtherImpl←P0();
static word ReserveChars←P60();
static word Append←P120();
static word AppendChar←P180();
static word AppendRope←P240();
static word New←P300();
static word ObtainScratch←P360();
static void ReleaseScratch←P420();
static word ObtainInternal←P480();
static void ReleaseInternal←P540();
static word CreatePool←P600();
static word FromRefText←P660();
static word FromRope←P720();
static void Init←P780();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\240\357\237\123\300\255\152\122\013\100\214\000\000"};
static struct {unsigned f; char r[12];} string2 = {589833, "\011\000\004\100\300\040\000\034\001\000\000"};
static struct {unsigned f; char r[44];} string3 = {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[16];} string4 = {851984, "\257\300\240\357\237\123\300\255\152\122\013\100\200\000\000"};
static struct {unsigned f; char r[4];} string5 = {196611, "\004A\360"};
static struct {unsigned f; char r[16];} string6 = {851984, "\257\300\122\171\164\025\300\243\020\252\320\100\164\000\000"};
static struct {unsigned f; char r[12];} string7 = {1382377044, "extExtras"};
static struct {unsigned f; char r[16];} string8 = {851984, "\257\300\353\320\266\116\300\006\152\040\366\100\150\000\000"};
static struct {unsigned f; char r[16];} string9 = {851984, "\257\300\363\223\326\161\300\017\164\046\072\100\150\000\000"};
static struct {unsigned f; char r[16];} string10 = {851984, "\257\300\277\374\326\303\300\302\136\022\175\100\150\000\000"};
static struct {unsigned f; char r[16];} string11 = {851984, "\257\300\332\223\177\020\300\304\076\102\260\100\164\000\000"};
static struct {unsigned f; char r[24];} string12 = {1310744, "\211\010\007\120\157\157\154\117\142\152\300\353\320\266\116\300\006\152\040\366\000\000\000"};
static struct {unsigned f; char r[16];} string13 = {851984, "\257\300\070\313\200\317\300\150\067\321\062\100\150\000\000"};
static struct {
   word f0[14]; word f14; word f15; word f16; 
   word f17; word f18; word f19; word f20; 
   word f21; 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[6]; 
   } globalframe = {
   {0}, (word) Init←P780, 0, (word) FromRope←P720, 
   0, (word) FromRefText←P660, 0, (word) CreatePool←P600, 
   0, (word) ReleaseInternal←P540, 0, (word) ObtainInternal←P480, 
   0, (word) ReleaseScratch←P420, 0, (word) ObtainScratch←P360, 
   0, (word) New←P300, 0, (word) AppendRope←P240, 
   0, (word) AppendChar←P180, 0, (word) Append←P120, 
   0, (word) ReserveChars←P60, 0, (word) RopeOtherImpl←P0, 
   {0}
   };

static void NoName←Q2100()
   {
   register ptr gf←c0115 =  (ptr) &globalframe;
   word var←c13304;
   (* (( (ptr) gf←c0115)+9) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2);
   (* (( (ptr) gf←c0115)+12) ) = (word) XR←GetTypeIndexS((word) (&string3));
   (void) XR←DeclareGlobalFrame((word) "RopeOtherImpl", &globalframe, (word) XR←GetTypeIndex((word) &string4, 0, (word) &string5)
      , (word) (( (bPt) gf←c0115)+160)/* var←c12312 */ );
   var←c13304 = (word) XR←ImportInterface((word) "Checksum", (word) XR←GetTypeIndexS((word) (&string6)), 3);
   (* (( (ptr) gf←c0115)+44)/* var←c13080 */  ) = var←c13304;
   (void) XR←ImportProcS(var←c13304, 68157444);
   var←c13304 = (word) XR←ImportInterface((word) &string7, (word) XR←GetTypeIndexS((word) (&string8)), 16);
   (* (( (ptr) gf←c0115)+43)/* var←c12696 */  ) = var←c13304;
   (void) XR←ImportProcS(var←c13304, 528130);
   (void) XR←ImportProcS(var←c13304, 67374593);
   var←c13304 = (word) XR←ImportInterface((word) "Rope", (word) XR←GetTypeIndexS((word) (&string9)), 43);
   (* (( (ptr) gf←c0115)+42)/* var←c12472 */  ) = var←c13304;
   (void) XR←ImportProcS(var←c13304, 67634434);
   (void) XR←ImportProcS(var←c13304, 68166660);
   (void) XR←ImportProcS(var←c13304, 67373825);
   var←c13304 = (word) XR←ImportInterface((word) "SafeStorage", (word) XR←GetTypeIndexS((word) (&string10)), 27);
   (* (( (ptr) gf←c0115)+45)/* var←c13272 */  ) = var←c13304;
   (void) XR←ImportProcS(var←c13304, 67109376);
   var←c13304 = (word) XR←ExportInterface((word) "RefText", (word) XR←GetTypeIndexS((word) (&string11)), 26);
   (* (( (ptr) gf←c0115)+46)/* var←c13336 */  ) = var←c13304;
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+120)/* var←c12152 */ , 67371009);
   (void) XR←ExportVar(var←c13304, 1, (word) (( (bPt) gf←c0115)+52)/* var←c11864 */ );
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+112)/* var←c12120 */ , 67371521);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+104)/* var←c12088 */ , 262913);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+144)/* var←c12248 */ , 68158468);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+128)/* var←c12184 */ , 68158980);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+136)/* var←c12216 */ , 67634946);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+152)/* var←c12280 */ , 67635458);
   var←c13304 = (word) XR←ExportInterface((word) &string7, (word) XR←GetTypeIndexS((word) (&string8)), 16);
   (* (( (ptr) gf←c0115)+46)/* var←c13336 */  ) = var←c13304;
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+80)/* var←c11992 */ , 67635202);
   (void) XR←ExportType((word) "PoolObj", (word) XR←GetTypeIndexS((word) (&string12)), (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2)
      );
   (void) XR←ExportVar(var←c13304, 10, (word) (( (bPt) gf←c0115)+20)/* pool16←v3448 */ );
   (void) XR←ExportVar(var←c13304, 11, (word) (( (bPt) gf←c0115)+24)/* pool100←v3476 */ );
   (void) XR←ExportVar(var←c13304, 12, (word) (( (bPt) gf←c0115)+28)/* pool512←v3504 */ );
   (void) XR←ExportVar(var←c13304, 13, (word) (( (bPt) gf←c0115)+32)/* pool8192←v3532 */ );
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+96)/* var←c12056 */ , 67374593);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+88)/* var←c12024 */ , 528130);
   var←c13304 = (word) XR←ExportInterface((word) "RopeHash", (word) XR←GetTypeIndexS((word) (&string13)), 2);
   (* (( (ptr) gf←c0115)+46)/* var←c13336 */  ) = var←c13304;
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+72)/* var←c11960 */ , 67633154);
   (void) XR←ExportProcS(var←c13304, (word) (( (bPt) gf←c0115)+64)/* var←c11928 */ , 68419845);
   }

static void RopeOtherImpl←P0(formal←c029, formal←c028)
   word formal←c029;
   word formal←c028;
   {
   /* RopeOtherImpl: */ 
SOURCE(307, 7925)
SOURCE(8226, 6)
   (void) Init←P780();
   }

static word ReserveChars←P60(to←v3840, nChars←v3868)
   word to←v3840;
   word nChars←v3868;
   {
   register ptr gf←c13368 =  (ptr) &globalframe;
   word var←c3924;
   word newMinLength←v5676;
   /* ReserveChars: */ 
SOURCE(711, 635)
SOURCE(794, 48)
   newMinLength←v5676 = ((*  (hPt) to←v3840 ) + nChars←v3868);
SOURCE(876, 48)
   if (( (int)newMinLength←v5676 <=  (int)(* (( (hPt) to←v3840)+1) ))) {
SOURCE(913, 11)
      return(to←v3840);
      };
SOURCE(926, 91)
   if (( (int)newMinLength←v5676 >  (int)32767)) { goto then014;};
   if (((*  (hPt) to←v3840 ) > (* (( (hPt) to←v3840)+1) ))) {
      then014: ;
SOURCE(992, 25)
      (void) XR←RaiseBoundsFault();
      };
SOURCE(1019, 329)
   {
      word expandBy←v5720;
      word newLength←v5748;
      word newText←v5776;
SOURCE(1021, 51)
      {
         word x15;
         word x16;
         expandBy←v5720 = (x15 = (* (( (hPt) to←v3840)+1) ),
            x16 = MAX( (unsigned) , 16, x15),
            MAX( (unsigned) , x16, nChars←v3868));
         };
SOURCE(1074, 111)
      {
         word tc17;
         if ((expandBy←v5720 > (32767 - (* (( (hPt) to←v3840)+1) )))) {
            tc17 =  (word) 32767;
            }
         else {
            tc17 =  (word) (expandBy←v5720 + (* (( (hPt) to←v3840)+1) ));
            };
         newLength←v5748 = tc17;
         };
SOURCE(1187, 53)
      {
         word var←c12344;
         word var←c12376;
         var←c12344 = ((word) ((word) (newLength←v5748 + 3) >> 2) << 2);
         {
            word pd18;
            pd18 = (*  (ptr) (* (( (ptr) gf←c13368)+4)/* untracedZone←v3420 */  ) );
            var←c12376 = (word) ( *( (fPt) ((*  (ptr) pd18 ))))((* (( (ptr) gf←c13368)+4)/* untracedZone←v3420 */  ), (4 + var←c12344), (* (
                  ( (ptr) gf←c13368)+12) ), pd18);
            };
         (* (( (hPt) var←c12376)+1) ) = newLength←v5748;
         newText←v5776 = var←c12376;
         };
SOURCE(1242, 58)
      {
         register word i←v5832 = 0;
         register word noName←c12408;
         noName←c12408 = (*  (hPt) to←v3840 );
         if ((i←v5832 >= noName←c12408)) {
            goto lab←L100000;
            };
         lab←L100003: ;
SOURCE(1274, 26)
         {
            word limit19;
            word limit20;
            (* ((( (bPt) newText←v5776)+4)+(
                  limit19 = (word) (* (( (hPt) newText←v5776)+1) ),
                  BCK(i←v5832, limit19)
                  )) ) = (word) (* ((( (bPt) to←v3840)+4)+(
                  limit20 = (word) (* (( (hPt) to←v3840)+1) ),
                  BCK(i←v5832, limit20)
                  )) );
            };
         i←v5832 = (i←v5832 + 1);
         if ((i←v5832 < noName←c12408)) {
            goto lab←L100003;
            };
         lab←L100000: ;
         };
SOURCE(1302, 26)
      (*  (hPt) newText←v5776 ) = (*  (hPt) to←v3840 );
SOURCE(1330, 16)
      return(newText←v5776);
      };
   }

static word Append←P120(to←v3996, from←v4024, start←v4052, len←v4080)
   word to←v3996;
   word from←v4024;
   word start←v4052;
   word len←v4080;
   {
   word var←c4148;
   /* Append: */ 
SOURCE(1354, 176)
SOURCE(1479, 51)
   return((word) AppendRope←P240(to←v3996, from←v4024, start←v4052, len←v4080));
   }

static word AppendChar←P180(to←v4220, from←v4248)
   word to←v4220;
   word from←v4248;
   {
   word var←c4304;
   /* AppendChar: */ 
SOURCE(1536, 231)
SOURCE(1610, 92)
   if (((*  (hPt) to←v4220 ) >= (* (( (hPt) to←v4220)+1) ))) {
SOURCE(1678, 24)
      to←v4220 = (word) ReserveChars←P60(to←v4220, 1);
      };
SOURCE(1707, 20)
   {
      word idx21;
      word limit22;
      (* ((( (bPt) to←v4220)+4)+(
            idx21 = (word) (*  (hPt) to←v4220 ),
            limit22 = (word) (* (( (hPt) to←v4220)+1) ),
            BCK(idx21, limit22)
            )) ) = from←v4248;
      };
SOURCE(1729, 25)
   {
      word idx23;
      (*  (hPt) to←v4220 ) = (
         idx23 = (word) ((*  (hPt) to←v4220 ) + 1),
         BCK(idx23, 32768)
         );
      };
SOURCE(1756, 11)
   return(to←v4220);
   }

static word AppendRope←P240(to←v4376, from←v4404, start←v4432, len←v4460)
   word to←v4376;
   word from←v4404;
   word start←v4432;
   word len←v4460;
   {
   register ptr gf←c13400 =  (ptr) &globalframe;
   word var←c4516;
   word rem←v5876;
   /* AppendRope: */ 
SOURCE(1773, 328)
SOURCE(1875, 34)
   {
      word pd24;
      pd24 = (* (( (ptr) (* (( (ptr) gf←c13400)+42)/* var←c12472 */  ))+15) );
      rem←v5876 = ((word) ( *( (fPt) ((*  (ptr) pd24 ))))(from←v4404, pd24) - start←v4432);
      };
SOURCE(1911, 54)
   if (( (int)start←v4432 <  (int)0) || ( (int)rem←v5876 <  (int)0)) {
SOURCE(1940, 25)
      (void) XR←RaiseBoundsFault();
      };
SOURCE(1967, 27)
   if (( (int)len←v4460 <  (int)rem←v5876)) {
SOURCE(1985, 9)
      rem←v5876 = len←v4460;
      };
SOURCE(1996, 89)
   if (( (int)rem←v5876 >  (int)0)) {
SOURCE(2014, 26)
      to←v4376 = (word) ReserveChars←P60(to←v4376, BCK(rem←v5876, 32768));
SOURCE(2042, 43)
      {
         word var←c12504;
         word pd25;
         pd25 = (* (( (ptr) (* (( (ptr) gf←c13400)+42)/* var←c12472 */  ))+40) );
         var←c12504 = (word) ( *( (fPt) ((*  (ptr) pd25 ))))(to←v4376, from←v4404, start←v4432, rem←v5876, pd25);
         };
      };
SOURCE(2090, 11)
   return(to←v4376);
   }

static word New←P300(nChars←v4588)
   word nChars←v4588;
   {
   register ptr gf←c13432 =  (ptr) &globalframe;
   word var←c4632;
   word text←v5920 = 0;
   word maxLength←v5948;
   /* New: */ 
SOURCE(2107, 273)
SOURCE(2183, 67)
   maxLength←v5948 = ((word) ((word) (((word) nChars←v4588 << 3) + 31) >> 5) << 2);
SOURCE(2252, 55)
   if ((maxLength←v5948 > 32767)) {
SOURCE(2284, 23)
      maxLength←v5948 = 32767;
      };
SOURCE(2309, 40)
   {
      word var←c12536;
      word var←c12568;
      word var←c12600;
      var←c12536 = BCK(maxLength←v5948, 32768);
      var←c12568 = ((word) ((word) (var←c12536 + 3) >> 2) << 2);
      {
         word pd26;
         pd26 = (*  (ptr) (* (( (ptr) gf←c13432)+4)/* untracedZone←v3420 */  ) );
         var←c12600 = (word) ( *( (fPt) ((*  (ptr) pd26 ))))((* (( (ptr) gf←c13432)+4)/* untracedZone←v3420 */  ), (4 + var←c12568), (* (
               ( (ptr) gf←c13432)+12) ), pd26);
         };
      (* (( (hPt) var←c12600)+1) ) = var←c12536;
      text←v5920 = var←c12600;
      };
SOURCE(2351, 15)
   (*  (hPt) text←v5920 ) = 0;
SOURCE(2368, 12)
   return(text←v5920);
   }

static word ObtainScratch←P360(nChars←v4764)
   word nChars←v4764;
   {
   register ptr gf←c13464 =  (ptr) &globalframe;
   word var←c4808;
   /* ObtainScratch: */ 
SOURCE(2439, 309)
SOURCE(2524, 224)
   if ((nChars←v4764 > 512)) {
SOURCE(2544, 95)
      if ((nChars←v4764 > 8192)) {
SOURCE(2565, 26)
         return((word) New←P300(nChars←v4764));
         }
      else {
SOURCE(2591, 48)
         {
            word pd27;
            pd27 = (* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+18) );
            return((word) ( *( (fPt) ((*  (ptr) pd27 ))))((*  (ptr) ((* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+17) )) ), pd27)
            );
            };
         };
      }
   else {
SOURCE(2639, 109)
      if ((nChars←v4764 > 100)) {
SOURCE(2659, 47)
         {
            word pd28;
            pd28 = (* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+18) );
            return((word) ( *( (fPt) ((*  (ptr) pd28 ))))((*  (ptr) ((* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+16) )) ), pd28)
            );
            };
         }
      else {
SOURCE(2706, 42)
         {
            word pd29;
            pd29 = (* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+18) );
            return((word) ( *( (fPt) ((*  (ptr) pd29 ))))((*  (ptr) ((* (( (ptr) (* (( (ptr) gf←c13464)+43)/* var←c12696 */  ))+15) )) ), pd29)
            );
            };
         };
      };
   }

static void ReleaseScratch←P420(t←v4880)
   word t←v4880;
   {
   register ptr gf←c13496 =  (ptr) &globalframe;
   /* ReleaseScratch: */ 
SOURCE(2752, 240)
SOURCE(2798, 194)
   {
      word var←c12792;
      var←c12792 = (* (( (hPt) t←v4880)+1) );
      switch (var←c12792) {
         case 16: 
SOURCE(2828, 33)
            {
               word t←v11720;
               t←v11720 = t←v4880;
               {
                  word pd30;
                  pd30 = (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+19) );
                  (void) ( *( (fPt) ((*  (ptr) pd30 ))))((*  (ptr) (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+14) ) ), t←v11720, pd30)
                  ;
                  };
               };
            break;
         case 100: 
SOURCE(2870, 34)
            {
               word t←v11672;
               t←v11672 = t←v4880;
               {
                  word pd31;
                  pd31 = (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+19) );
                  (void) ( *( (fPt) ((*  (ptr) pd31 ))))((*  (ptr) (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+15) ) ), t←v11672, pd31)
                  ;
                  };
               };
            break;
         case 512: 
SOURCE(2913, 34)
            {
               word t←v11624;
               t←v11624 = t←v4880;
               {
                  word pd32;
                  pd32 = (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+19) );
                  (void) ( *( (fPt) ((*  (ptr) pd32 ))))((*  (ptr) (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+16) ) ), t←v11624, pd32)
                  ;
                  };
               };
            break;
         case 8192: 
SOURCE(2957, 35)
            {
               word t←v11576;
               t←v11576 = t←v4880;
               {
                  word pd33;
                  pd33 = (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+19) );
                  (void) ( *( (fPt) ((*  (ptr) pd33 ))))((*  (ptr) (* (( (ptr) (* (( (ptr) gf←c13496)+43)/* var←c12696 */  ))+17) ) ), t←v11576, pd33)
                  ;
                  };
               };
            break;
         };
      };
   }

static word ObtainInternal←P480(pool←v4952)
   word pool←v4952;
   {
   register ptr gf←c13528 =  (ptr) &globalframe;
   word var←c12856;
   word var←c12888;
   word thisText←v4996;
   /* ObtainInternal: */ 
SOURCE(3088, 333)
   (void) (XR←MonitorEntry(pool←v4952));
SOURCE(3088, 333)
   thisText←v4996 = 0;
SOURCE(3168, 253)
   if (( (int)(* (( (ptr) pool←v4952)+5) ) ==  (int) (word) -1)) {
SOURCE(3200, 53)
      {
         word var←c12824;
         {
            word idx34;
            var←c12824 = (word) New←P300((
                  idx34 = (* (( (ptr) pool←v4952)+4) ),
                  BCK(idx34, 32768)
                  ));
            };
         (void) (XR←MonitorExit(pool←v4952));
         return(var←c12824);
         };
      }
   else {
SOURCE(3255, 41)
      {
         word idx35;
         word limit36;
         thisText←v4996 = (* ((( (ptr) pool←v4952)+7)+(
               idx35 = (* (( (ptr) pool←v4952)+5) ),
               limit36 = (* (( (ptr) pool←v4952)+6) ),
               BCK(idx35, limit36)
               )) );
         };
SOURCE(3298, 42)
      (* (( (ptr) pool←v4952)+5) ) = ((* (( (ptr) pool←v4952)+5) ) - 1);
SOURCE(3342, 79)
      if (((*  (hPt) thisText←v4996 ) != 0)) {
SOURCE(3370, 51)
         var←c12856 = (word) (( (bPt) gf←c13528)+52)/* var←c11864 */ ;
         var←c12888 = 0;
         (void) (XR←MonitorExit(pool←v4952));
         goto lab←L100004;
         };
      };
SOURCE(3088, 333)
   (void) (XR←MonitorExit(pool←v4952));
   return(thisText←v4996);
   /* c2c skipped dead code */ 
   lab←L100004: ;
SOURCE(3370, 51)
   {
      word var←c076;
      var←c076 = var←c12888;
      (void) XR←RaiseError(var←c12856, (word) &var←c076);
      };
   }

static void ReleaseInternal←P540(pool←v5068, t←v5096)
   word pool←v5068;
   word t←v5096;
   {
   /* ReleaseInternal: */ 
SOURCE(3430, 255)
   (void) (XR←MonitorEntry(pool←v5068));
SOURCE(3495, 22)
   if ((t←v5096 == 0)) {
SOURCE(3511, 6)
      (void) (XR←MonitorExit(pool←v5068));
      return;
      };
SOURCE(3519, 12)
   (*  (hPt) t←v5096 ) = 0;
SOURCE(3533, 152)
   if (( (int)(* (( (ptr) pool←v5068)+5) ) ==  (int)((* (( (ptr) pool←v5068)+6) ) - 1))) {
SOURCE(3576, 28)
      (void) (XR←MonitorExit(pool←v5068));
      return;
      }
   else {
SOURCE(3606, 43)
      (* (( (ptr) pool←v5068)+5) ) = ((* (( (ptr) pool←v5068)+5) ) + 1);
SOURCE(3651, 34)
      {
         word idx37;
         word limit38;
         (* ((( (ptr) pool←v5068)+7)+(
               idx37 = (* (( (ptr) pool←v5068)+5) ),
               limit38 = (* (( (ptr) pool←v5068)+6) ),
               BCK(idx37, limit38)
               )) ) = t←v5096;
         };
      };
SOURCE(3430, 255)
   (void) (XR←MonitorExit(pool←v5068));
   return;
   }

static word CreatePool←P600(charsPerText←v5168, textsInPool←v5196)
   word charsPerText←v5168;
   word textsInPool←v5196;
   {
   register ptr gf←c13560 =  (ptr) &globalframe;
   word pool←v5240;
   /* CreatePool: */ 
SOURCE(3694, 262)
SOURCE(3694, 262)
   pool←v5240 = 0;
SOURCE(3783, 32)
   {
      word var←c12920;
      word var←c12952;
      word var←c12984;
      var←c12920 = BCK(textsInPool←v5196, 67108863);
      var←c12952 = ((word) var←c12920 << 2);
      var←c12984 = XR←NewObject((28 + var←c12952), (* (( (ptr) gf←c13560)+9) ));
      (* (( (ptr) var←c12984)+6) ) = var←c12920;
      (* (( (ptr) var←c12984)+5) ) =  (word) -1;
      pool←v5240 = var←c12984;
      };
SOURCE(3817, 32)
   (* (( (ptr) pool←v5240)+4) ) = SGNCK(charsPerText←v5168);
SOURCE(3851, 36)
   (* (( (ptr) pool←v5240)+5) ) = (textsInPool←v5196 - 1);
SOURCE(3889, 67)
   {
      register word i←v6004 = 0;
      register word noName←c13016;
      noName←c13016 = textsInPool←v5196;
      if ((i←v6004 >= noName←c13016)) {
         goto lab←L100006;
         };
      lab←L100009: ;
SOURCE(3923, 33)
      {
         word var←c13048;
         var←c13048 = (word) New←P300(BCK(charsPerText←v5168, 32768));
         {
            word limit39;
            (* ((( (ptr) pool←v5240)+7)+(
                  limit39 = (* (( (ptr) pool←v5240)+6) ),
                  BCK(i←v6004, limit39)
                  )) ) = var←c13048;
            };
         };
      i←v6004 = (i←v6004 + 1);
      if ((i←v6004 < noName←c13016)) {
         goto lab←L100009;
         };
      lab←L100006: ;
      };
SOURCE(3694, 262)
   return(pool←v5240);
   }

static word FromRefText←P660(text←v5336, seed←v5364)
   word text←v5336;
   word seed←v5364;
   {
   register ptr gf←c13592 =  (ptr) &globalframe;
   word hash←v5408;
   word len←v6048;
   word nLeft←v6076;
   word nWhole←v6104;
   word p←v6132;
   /* FromRefText: */ 
SOURCE(6402, 625)
SOURCE(6506, 28)
   len←v6048 = (*  (hPt) text←v5336 );
SOURCE(6536, 37)
   nLeft←v6076 = (len←v6048 & 1);
SOURCE(6575, 25)
   nWhole←v6104 = (len←v6048 - nLeft←v6076);
SOURCE(6602, 57)
   p←v6132 = (text←v5336 + 4);
SOURCE(6661, 11)
   hash←v5408 = seed←v5364;
SOURCE(6674, 102)
   if ((nWhole←v6104 >= 2)) {
SOURCE(6711, 65)
      {
         word pd40;
         pd40 = (* (( (ptr) (* (( (ptr) gf←c13592)+44)/* var←c13080 */  ))+4) );
         hash←v5408 = (word) ( *( (fPt) ((*  (ptr) pd40 ))))(BCK(hash←v5408, 65536), ((word) nWhole←v6104 >> 1), p←v6132, 0, pd40)
         ;
         };
      };
SOURCE(6781, 246)
   if ((nLeft←v6076 != 0)) {
SOURCE(6807, 222)
      {
         word leftovers←v6200 = 0;
SOURCE(6847, 79)
         {
            register word j←v6244 = 0;
            if ((j←v6244 >= nLeft←v6076)) {
               goto lab←L100010;
               };
            lab←L100013: ;
SOURCE(6875, 51)
            {
               word var←c13112;
               {
                  word pd41;
                  pd41 = (* (( (ptr) (* (( (ptr) gf←c13592)+42)/* var←c12472 */  ))+9) );
                  var←c13112 = (word) ( *( (fPt) ((*  (ptr) pd41 ))))(text←v5336, SGNCK((nWhole←v6104 + j←v6244)), pd41);
                  };
               (* (( (bPt) &leftovers←v6200)+(BCK(j←v6244, 2) + 2)) ) = var←c13112;
               };
            j←v6244 = (j←v6244 + 1);
            if ((j←v6244 < nLeft←v6076)) {
               goto lab←L100013;
               };
            lab←L100010: ;
            };
SOURCE(6937, 90)
         {
            word pd42;
            pd42 = (* (( (ptr) (* (( (ptr) gf←c13592)+44)/* var←c13080 */  ))+4) );
            hash←v5408 = (word) ( *( (fPt) ((*  (ptr) pd42 ))))(BCK(hash←v5408, 65536), 1, (word) &leftovers←v6200, 0, pd42);
            };
         };
      };
SOURCE(6402, 625)
   return(hash←v5408);
   }

static word FromRope←P720(rope←v5468, case←v5496, start←v5524, len←v5552, seed←v5580)
   word rope←v5468;
   word case←v5496;
   word start←v5524;
   word len←v5552;
   word seed←v5580;
   {
   register ptr gf←c13624 =  (ptr) &globalframe;
   word hash←v5624;
   word rem←v6288;
   /* FromRope: */ 
SOURCE(7049, 867)
SOURCE(7171, 74)
   {
      word x←v11816;
      {
         word pd43;
         pd43 = (* (( (ptr) (* (( (ptr) gf←c13624)+42)/* var←c12472 */  ))+15) );
         x←v11816 = ((word) ( *( (fPt) ((*  (ptr) pd43 ))))(rope←v5468, pd43) - start←v5524);
         };
      rem←v6288 = SGNCK(x←v11816);
      };
SOURCE(7247, 27)
   if (( (int)rem←v6288 <  (int)len←v5552)) {
SOURCE(7265, 9)
      len←v5552 = rem←v6288;
      };
SOURCE(7276, 124)
   if ( (  ( (0 != case←v5496) ? ( (int)start←v5524 ==  (int)0) : 0 )  ? ( (int)rem←v6288 ==  (int)len←v5552) : 0 ) ) {
SOURCE(7317, 83)
      {
         word var←c13176;
         var←c13176 = rope←v5468;
         if ((var←c13176 == 0)) {
            goto lab←L100015;
            };
         if (((*(( short *)var←c13176 + 1)<0) == 0)) {
            {
               word text←v6332;
               text←v6332 = var←c13176;
SOURCE(7359, 41)
               return((word) FromRefText←P660(text←v6332, seed←v5580));
               };
            }
         else {
            lab←L100015: ;
            };
         };
      };
SOURCE(7411, 507)
   {
      word buf←v6376;
      word p←v6404;
      word bytes←v6432 = 0;
SOURCE(7413, 38)
      buf←v6376 = (word) ObtainScratch←P360(256);
SOURCE(7453, 61)
      p←v6404 = (buf←v6376 + 4);
SOURCE(7532, 11)
      hash←v5624 = seed←v5580;
SOURCE(7545, 326)
      lab←L100018: ;
      if (( (int)len←v5552 >  (int)0)) {
         }
      else {
         goto lab←L100016;
         };
SOURCE(7562, 14)
      (*  (hPt) buf←v6376 ) = 0;
SOURCE(7578, 47)
      {
         word pd44;
         pd44 = (* (( (ptr) (* (( (ptr) gf←c13624)+42)/* var←c12472 */  ))+40) );
         bytes←v6432 = (word) ( *( (fPt) ((*  (ptr) pd44 ))))(buf←v6376, rope←v5468, start←v5524, len←v5552, pd44);
         };
SOURCE(7627, 162)
      if ((0 == case←v5496)) {
SOURCE(7644, 145)
         {
            register word i←v6512 = 0;
            register word noName←c13240;
            noName←c13240 = bytes←v6432;
            if ((i←v6512 >= noName←c13240)) {
               goto lab←L100019;
               };
            lab←L100022: ;
            {
               word c←v6556;
SOURCE(7672, 38)
               {
                  word pd45;
                  pd45 = (* (( (ptr) (* (( (ptr) gf←c13624)+42)/* var←c12472 */  ))+9) );
                  c←v6556 = (word) ( *( (fPt) ((*  (ptr) pd45 ))))(buf←v6376, i←v6512, pd45);
                  };
SOURCE(7712, 77)
               if ( ( (c←v6556 <= 90) ? (c←v6556 >= 65) : 0 ) ) {
SOURCE(7740, 49)
                  {
                     word c←v11768;
                     c←v11768 = BCK((c←v6556 + 32), 256);
                     (* ((( (bPt) buf←v6376)+4)+i←v6512) ) = c←v11768;
                     };
                  };
               };
            i←v6512 = (i←v6512 + 1);
            if ((i←v6512 < noName←c13240)) {
               goto lab←L100022;
               };
            lab←L100019: ;
            };
         };
SOURCE(7800, 29)
      hash←v5624 = (word) FromRefText←P660(buf←v6376, hash←v5624);
SOURCE(7831, 21)
      start←v5524 = (start←v5524 + bytes←v6432);
SOURCE(7854, 17)
      len←v5552 = (len←v5552 - bytes←v6432);
      goto lab←L100018;
      lab←L100016: ;
SOURCE(7882, 19)
      (void) ReleaseScratch←P420(buf←v6376);
SOURCE(7903, 13)
      return(hash←v5624);
      };
   }

static void Init←P780()
   {
   register ptr gf←c13656 =  (ptr) &globalframe;
   /* Init: */ 
SOURCE(8030, 190)
SOURCE(8053, 45)
SOURCE(8054, 44)
   {
      word pd46;
      pd46 = (* (( (ptr) (* (( (ptr) gf←c13656)+45)/* var←c13272 */  ))+6) );
      (* (( (ptr) gf←c13656)+4)/* untracedZone←v3420 */  ) = (word) ( *( (fPt) ((*  (ptr) pd46 ))))(pd46);
      };
SOURCE(8101, 27)
   (* (( (ptr) gf←c13656)+5)/* pool16←v3448 */  ) = (word) CreatePool←P600(16, 10);
SOURCE(8130, 28)
   (* (( (ptr) gf←c13656)+6)/* pool100←v3476 */  ) = (word) CreatePool←P600(100, 4);
SOURCE(8160, 28)
   (* (( (ptr) gf←c13656)+7)/* pool512←v3504 */  ) = (word) CreatePool←P600(512, 4);
SOURCE(8190, 30)
   (* (( (ptr) gf←c13656)+8)/* pool8192←v3532 */  ) = (word) CreatePool←P600(8192, 4);
   }

/* file: RopeOtherImpl, module: RopeOtherImpl, compiled at: December 9, 1992 4:41:21 pm PST */ 
extern void XR←install←RopeOtherImpl() {
   NoName←Q2100();
   }
extern void XR←run←RopeOtherImpl() { XR←Start(&globalframe); }