/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: August 31, 1992 9:14:45 am PDT */
/* C2C version: October 16, 1990 (native) */
/* ref-counting: off */
/* file: SafeStorageImpl, module: SafeStorageImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [722927241,3266122908] SafeStorageImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef word (*fPt)();
typedef struct {word f0, f1;} W2;
#define SOURCE(p, l) /* source p, l */
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
static void NoName←Q1992();
static void SafeStorageImpl←P0();
static word GetSystemZone←P60();
static word GetZone←P120();
static word New←P180();
static void Free←P240();
static word GetUntracedZone←P300();
static word UntracedNew←P360();
static word GetPermanentZone←P420();
static word SetCollectionInterval←P480();
static void ReclaimCollectibleObjects←P540();
static word CurrentByteCount←P600();
static word CurrentObjectCount←P660();
static word TotalByteCount←P720();
static word TotalObjectCount←P780();
static word HeapSize←P840();
static word GetCanonicalReferentType←P900();
static word EquivalentTypes←P960();
static word GetCanonicalType←P1020();
static word IsReferentType←P1080();
extern void XR←AssignRef();
extern void XR←AssignRefInit();
extern word XR←NewObject();
extern word XR←NewUntracedObject();
extern word XR←CheckProc();
extern word XR←Narrow();
extern word XR←GetReferentType();
extern void XR←AssignRefComposite();
extern void XR←AssignRefCompositeInit();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\053\026\376\211\300\302\255\024\234\100\164\000\000"};
static struct {unsigned f; char r[4];} string2 = {131074, "\0040\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\277\374\326\303\300\302\136\022\175\100\150\000\000"};
static struct {
   word f0[12]; word f12; word f13; 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; 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[2]; 
   } globalframe = {
   {0}, (word) XR←AssignRefCompositeInit, 0, (word) XR←AssignRefComposite, 
   0, (word) XR←GetReferentType, 0, (word) XR←Narrow, 
   0, (word) XR←CheckProc, 0, (word) XR←NewUntracedObject, 
   0, (word) XR←NewObject, 0, (word) XR←AssignRefInit, 
   0, (word) XR←AssignRef, 0, (word) IsReferentType←P1080, 
   0, (word) GetCanonicalType←P1020, 0, (word) EquivalentTypes←P960, 
   0, (word) GetCanonicalReferentType←P900, 0, (word) HeapSize←P840, 
   0, (word) TotalObjectCount←P780, 0, (word) TotalByteCount←P720, 
   0, (word) CurrentObjectCount←P660, 0, (word) CurrentByteCount←P600, 
   0, (word) ReclaimCollectibleObjects←P540, 0, (word) SetCollectionInterval←P480, 
   0, (word) GetPermanentZone←P420, 0, (word) UntracedNew←P360, 
   0, (word) GetUntracedZone←P300, 0, (word) Free←P240, 
   0, (word) New←P180, 0, (word) GetZone←P120, 
   0, (word) GetSystemZone←P60, 0, (word) SafeStorageImpl←P0, 
   {0}
   };

static void NoName←Q1992()
   {
   register ptr gf←c0116 =  (ptr) &globalframe;
   word var←c11748;
   (void) XR←DeclareGlobalFrame((word) "SafeStorageImpl", &globalframe, (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2)
      , (word) (( (bPt) gf←c0116)+264)/* var←c11236 */ );
   var←c11748 = (word) XR←ExportInterface((word) "SafeStorage", (word) XR←GetTypeIndexS((word) (&string3)), 27);
   (* (( (ptr) gf←c0116)+68)/* var←c11716 */  ) = var←c11748;
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+256)/* var←c11204 */ , 67108864);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+208)/* var←c11012 */ , 67109120);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+224)/* var←c11076 */ , 67109376);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+200)/* var←c10980 */ , 67372545);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+192)/* var←c10948 */ , 526082);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+184)/* var←c10916 */ , 67111680);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+176)/* var←c10884 */ , 67111936);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+168)/* var←c10852 */ , 67112192);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+160)/* var←c10820 */ , 67112448);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+152)/* var←c10788 */ , 67112704);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+64)/* var←c10436 */ , 67375105);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+144)/* var←c10756 */ , 67375361);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+136)/* var←c10724 */ , 67637762);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+128)/* var←c10692 */ , 67375873);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+120)/* var←c10660 */ , 67638274);
   (void) XR←ExportProcS(var←c11748, (word) (( (bPt) gf←c0116)+72)/* var←c10468 */ , 67638530);
   (void) XR←ExportVar(var←c11748, 22, (word) (( (bPt) gf←c0116)+28));
   (void) XR←ExportVar(var←c11748, 23, (word) (( (bPt) gf←c0116)+32));
   (void) XR←ExportVar(var←c11748, 24, (word) (( (bPt) gf←c0116)+36));
   (void) XR←ExportVar(var←c11748, 25, (word) (( (bPt) gf←c0116)+40));
   (void) XR←ExportVar(var←c11748, 26, (word) (( (bPt) gf←c0116)+44));
   }

static void SafeStorageImpl←P0(formal←c036, formal←c035)
   word formal←c036;
   word formal←c035;
   {
   register ptr gf←c11780 =  (ptr) &globalframe;
   /* SafeStorageImpl: */ 
SOURCE(33, 6371)
SOURCE(801, 37)
   (* (( (ptr) gf←c11780)+4)/* systemZone←v2636 */  ) = (word) GetZone←P120((word) (( (bPt) gf←c11780)+240)/* var←c11140 */ , (word) (
         ( (bPt) gf←c11780)+232)/* var←c11108 */ );
   }

static word GetSystemZone←P60()
   {
   register ptr gf←c11812 =  (ptr) &globalframe;
   word var←c4192;
   /* GetSystemZone: */ 
SOURCE(841, 64)
SOURCE(887, 18)
   return((* (( (ptr) gf←c11812)+4)/* systemZone←v2636 */  ));
   }

static word GetZone←P120(new←v4260, free←v4288)
   word new←v4260;
   word free←v4288;
   {
   word var←c4332;
   word zone←v7224;
   /* GetZone: */ 
SOURCE(910, 173)
SOURCE(982, 56)
   zone←v7224 = (word) ( *( (fPt) ((*  (ptr) new←v4260 ))))(0, 8, 0, new←v4260);
SOURCE(1040, 19)
   (*  (ptr) zone←v7224 ) = new←v4260;
   (* (( (ptr) zone←v7224)+1) ) = free←v4288;
SOURCE(1061, 22)
   return(zone←v7224);
   }

static word New←P180(self←v8816, units←v8844, type←v8872)
   word self←v8816;
   word units←v8844;
   word type←v8872;
   {
   word var←c8916;
   /* New: */ 
SOURCE(1087, 73)
SOURCE(1104, 56)
   return((word) XR←NewObject(SGNCK(units←v8844), type←v8872));
   }

static void Free←P240(self←v8976, object←v9004)
   word self←v8976;
   word object←v9004;
   {
   /* Free: */ 
   }

static word GetUntracedZone←P300()
   {
   register ptr gf←c11844 =  (ptr) &globalframe;
   word var←c4408;
   /* GetUntracedZone: */ 
SOURCE(1255, 151)
SOURCE(1309, 45)
   if (((* (( (ptr) gf←c11844)+5)/* untracedZone←v2776 */  ) != 0)) {
SOURCE(1334, 20)
      return((* (( (ptr) gf←c11844)+5)/* untracedZone←v2776 */  ));
      };
SOURCE(1356, 50)
   {
      word var←c11300;
      {
         word var←c11332;
         var←c11332 = (word) GetZone←P120((word) (( (bPt) gf←c11844)+216)/* var←c11044 */ , (word) (( (bPt) gf←c11844)+232)/* var←c11108 */ )
         ;
         (* (( (ptr) gf←c11844)+5)/* untracedZone←v2776 */  ) = var←c11332;
         var←c11300 = var←c11332;
         };
      return(var←c11300);
      };
   }

static word UntracedNew←P360(self←v9064, units←v9092, type←v9120)
   word self←v9064;
   word units←v9092;
   word type←v9120;
   {
   word var←c9164;
   word r←v7268;
   /* UntracedNew: */ 
SOURCE(1412, 191)
SOURCE(1447, 65)
   r←v7268 = (word) XR←NewUntracedObject(SGNCK(units←v9092), type←v9120);
SOURCE(1514, 77)
   (void) Basics←FillWords(r←v7268, (units←v9092 >> 2), 0);
SOURCE(1593, 10)
   return(r←v7268);
   }

static word GetPermanentZone←P420()
   {
   word var←c4476;
   /* GetPermanentZone: */ 
SOURCE(1607, 73)
SOURCE(1656, 24)
   return((word) GetSystemZone←P60());
   }

static word SetCollectionInterval←P480(newInterval←v4544)
   word newInterval←v4544;
   {
   word previous←v4588;
   /* SetCollectionInterval: */ 
SOURCE(1686, 269)
SOURCE(1902, 53)
   previous←v4588 = (word) XR←SetBytesAfterWhichToCollect(newInterval←v4544);
SOURCE(1686, 269)
   return(previous←v4588);
   }

static void ReclaimCollectibleObjects←P540(suspendMe←v4648, traceAndSweep←v4676)
   word suspendMe←v4648;
   word traceAndSweep←v4676;
   {
   /* ReclaimCollectibleObjects: */ 
SOURCE(1961, 179)
SOURCE(2124, 16)
   (void) XR←GCollect();
   }

static word CurrentByteCount←P600()
   {
   word var←c4736;
   /* CurrentByteCount: */ 
SOURCE(2146, 135)
SOURCE(2268, 13)
   return((word) XR←GCCurrentByteCount());
   }

static word CurrentObjectCount←P660()
   {
   word var←c4796;
   /* CurrentObjectCount: */ 
SOURCE(2285, 139)
SOURCE(2411, 13)
   return((word) XR←GCCurrentObjectCount());
   }

static word TotalByteCount←P720()
   {
   word var←c4856;
   /* TotalByteCount: */ 
SOURCE(2428, 131)
SOURCE(2546, 13)
   return((word) XR←GCTotalByteCount());
   }

static word TotalObjectCount←P780()
   {
   word var←c4916;
   /* TotalObjectCount: */ 
SOURCE(2563, 135)
SOURCE(2685, 13)
   return((word) XR←GCTotalObjectCount());
   }

static word HeapSize←P840()
   {
   word var←c4976;
   /* HeapSize: */ 
SOURCE(2701, 119)
SOURCE(2807, 13)
   return((word) XR←GCHeapSize());
   }

static word GetCanonicalReferentType←P900(ref←v5036)
   word ref←v5036;
   {
   word type←v5092;
   /* GetCanonicalReferentType: */ 
SOURCE(2897, 116)
SOURCE(2985, 28)
   type←v5092 = (word) XR←GetReferentType(ref←v5036);
SOURCE(2897, 116)
   return(type←v5092);
   }

static word EquivalentTypes←P960(t1←v5152, t2←v5180)
   word t1←v5152;
   word t2←v5180;
   {
   word var←c5224;
   /* EquivalentTypes: */ 
SOURCE(3017, 124)
SOURCE(3090, 51)
   return(((word) GetCanonicalType←P1020(t1←v5152) == (word) GetCanonicalType←P1020(t2←v5180)));
   }

static word GetCanonicalType←P1020(type←v5284)
   word type←v5284;
   {
   word var←c5328;
   /* GetCanonicalType: */ 
SOURCE(3147, 97)
SOURCE(3232, 12)
   return(type←v5284);
   }

static word IsReferentType←P1080(ref←v5388, type←v5416)
   word ref←v5388;
   word type←v5416;
   {
   word var←c5472;
   /* IsReferentType: */ 
SOURCE(3250, 152)
SOURCE(3334, 30)
   if ((ref←v5388 == 0)) {
SOURCE(3352, 12)
      return(1);
      };
SOURCE(3366, 36)
   return((type←v5416 == (word) XR←GetReferentType(ref←v5388)));
   }

extern void XR←AssignRef(dstPtr←v5800, src←v5828)
   word dstPtr←v5800;
   word src←v5828;
   {
   /* XRAssignRef: */ 
SOURCE(3691, 112)
SOURCE(3789, 14)
   (*  (ptr) dstPtr←v5800 ) = src←v5828;
   }

extern void XR←AssignRefInit(dstPtr←v5924, src←v5952)
   word dstPtr←v5924;
   word src←v5952;
   {
   /* XRAssignRefInit: */ 
SOURCE(3807, 120)
SOURCE(3913, 14)
   (*  (ptr) dstPtr←v5924 ) = src←v5952;
   }

extern word XR←NewObject(nAddressingUnits←v6048, type←v6076)
   word nAddressingUnits←v6048;
   word type←v6076;
   {
   register ptr gf←c11876 =  (ptr) &globalframe;
   word new←v6120;
   word ptr←v8080;
   /* XRNewObject: */ 
SOURCE(3931, 362)
SOURCE(3931, 362)
   new←v6120 = 0;
SOURCE(4134, 54)
   ptr←v8080 = (word) GC←malloc((nAddressingUnits←v6048 + 8));
SOURCE(4190, 37)
   if ((ptr←v8080 == 0)) {
SOURCE(4206, 21)
      (void) XR←RaiseError((word) (( (bPt) gf←c11876)+28), 0);
      };
SOURCE(4229, 38)
   new←v6120 = (ptr←v8080 + 8);
SOURCE(4269, 24)
   {
      word ref←v10292;
      ref←v10292 = new←v6120;
      {
         word p←v8624;
         p←v8624 = (ref←v10292 - 4);
SOURCE(5938, 9)
         (*  (ptr) p←v8624 ) = type←v6076;
         };
      };
SOURCE(3931, 362)
   return(new←v6120);
   }

extern word XR←NewUntracedObject(nAddressingUnits←v6192, type←v6220)
   word nAddressingUnits←v6192;
   word type←v6220;
   {
   register ptr gf←c11908 =  (ptr) &globalframe;
   word new←v6264;
   word ptr←v8268;
   /* XRNewUntracedObject: */ 
SOURCE(4297, 398)
SOURCE(4297, 398)
   new←v6264 = 0;
SOURCE(4530, 60)
   ptr←v8268 = (word) GC←malloc←atomic((nAddressingUnits←v6192 + 8));
SOURCE(4592, 37)
   if ((ptr←v8268 == 0)) {
SOURCE(4608, 21)
      (void) XR←RaiseError((word) (( (bPt) gf←c11908)+28), 0);
      };
SOURCE(4631, 38)
   new←v6264 = (ptr←v8268 + 8);
SOURCE(4671, 24)
   {
      word ref←v10216;
      ref←v10216 = new←v6264;
      {
         word p←v10248;
         p←v10248 = (ref←v10216 - 4);
SOURCE(5938, 9)
         (*  (ptr) p←v10248 ) = type←v6220;
         };
      };
SOURCE(4297, 398)
   return(new←v6264);
   }

extern word XR←CheckProc(proc←v6336)
   word proc←v6336;
   {
   register ptr gf←c11940 =  (ptr) &globalframe;
   word var←c6396;
   word x←v8456;
   /* XRCheckProc: */ 
SOURCE(4699, 254)
SOURCE(4819, 40)
   x←v8456 = proc←v6336;
SOURCE(4861, 62)
   if ( ( (x←v8456 != 0) ? ((* (( (ptr) x←v8456)+1) ) == 1) : 0 ) ) {
SOURCE(4890, 33)
      {
         word var←c095;
         var←c095 = proc←v6336;
         (void) (XR←RaiseSignal((word) (( (bPt) gf←c11940)+40), 0, (word) &var←c095));
         };
      };
SOURCE(4925, 28)
   return(proc←v6336);
   }

extern word XR←Narrow(ref←v6456, type←v6484)
   word ref←v6456;
   word type←v6484;
   {
   register ptr gf←c11972 =  (ptr) &globalframe;
   word var←c6540;
   word var←c11620;
   word ref←v10168;
   /* NarrowRef: */ 
SOURCE(4959, 202)
SOURCE(5055, 27)
   if ((ref←v6456 == 0)) {
SOURCE(5071, 11)
      return(ref←v6456);
      };
SOURCE(5084, 44)
   ref←v10168 = ref←v6456;
   {
      word p←v8584;
      p←v8584 = (ref←v10168 - 4);
SOURCE(5760, 12)
      var←c11620 = (*  (ptr) p←v8584 );
      };
   if ((type←v6484 == var←c11620)) {
SOURCE(5117, 11)
      return(ref←v6456);
      };
SOURCE(5130, 31)
   {
      W2 var←c0102;
      (*  (ptr) (word) &var←c0102 ) = ref←v6456;
      (* (( (ptr) (word) &var←c0102) + 1) ) = type←v6484;
      (void) XR←RaiseError((word) (( (bPt) gf←c11972)+36), (word) &var←c0102);
      };
   }

extern word XR←GetReferentType(ref←v6612)
   word ref←v6612;
   {
   word var←c6668;
   /* GetReferentType: */ 
SOURCE(5167, 158)
SOURCE(5267, 29)
   if ((ref←v6612 == 0)) {
SOURCE(5283, 13)
      return(0);
      };
SOURCE(5298, 27)
   {
      word var←c11684;
      word ref←v10092;
      ref←v10092 = ref←v6612;
      {
         word p←v10124;
         p←v10124 = (ref←v10092 - 4);
SOURCE(5760, 12)
         var←c11684 = (*  (ptr) p←v10124 );
         };
      return(var←c11684);
      };
   }

extern void XR←AssignRefComposite(dst←v6944, src←v6972, type←v7000, size←v7028)
   word dst←v6944;
   word src←v6972;
   word type←v7000;
   word size←v7028;
   {
   /* XRAssignRefComposite: */ 
SOURCE(5953, 210)
SOURCE(6094, 69)
   (void) Basics←CopyWords(dst←v6944, src←v6972, size←v7028);
   }

extern void XR←AssignRefCompositeInit(dst←v7100, src←v7128, type←v7156, size←v7184)
   word dst←v7100;
   word src←v7128;
   word type←v7156;
   word size←v7184;
   {
   /* XRAssignRefCompositeInit: */ 
SOURCE(6169, 214)
SOURCE(6314, 69)
   (void) Basics←CopyWords(dst←v7100, src←v7128, size←v7184);
   }

/* file: SafeStorageImpl, module: SafeStorageImpl, compiled at: August 31, 1992 9:14:44 am PDT */ 
extern void XR←install←SafeStorageImpl() {
   NoName←Q1992();
   }
extern void XR←run←SafeStorageImpl() { XR←Start(&globalframe); }