/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: February 21, 1992 9:04:27 pm PST */
/* C2C version: October 16, 1990 (native) */
/* ref-counting: off */
/* file: RealImpl, module: RealImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [1771183207,2133754398] RealImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef struct {word f0, f1;} W2;
typedef struct {word f0, f1, f2;} W3;
typedef struct {word f0, f1, f2, f3;} W4;
#define SOURCE(p, l) /* source p, l */
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
static float fc7 = 0.0;
static float fc10 = 256.0;
#define INEG(x)  ( (word) ( - ((int) (word) (x)) ) )
static float fc17 = 2.0;
static float fc30 = 1e1;
static float fc31 = 1e2;
static float fc32 = 1e3;
static float fc33 = 1e4;
static float fc34 = 1e5;
static float fc35 = 1e6;
static float fc36 = 1e7;
static float fc37 = 1e8;
static float fc38 = 1e9;
static float fc39 = 1e10;
static float fc40 = 1e11;
static float fc41 = 1e12;
static float fc42 = 1e13;
static float fc43 = 1e14;
static float fc44 = 1e15;
static float fc45 = 1e16;
static float fc46 = 1e17;
static float fc47 = 1e18;
static float fc48 = 1e19;
static float fc49 = 1e20;
static float fc55 = 10.0;
static void NoName←Q1008();
static void RealImpl←P0();
static word FScale←P60();
static word RangeError←P120();
static word Fix←P180();
static word Round←P240();
static word Ceiling←P300();
static word Floor←P360();
static word PairToReal←P420();
static word PowersOfTen←P480();
static void RealToPair←P540();
static void CVExtended←P600();
static word Pack←P660();
static word UsualPack←P720();
static void Unpack←P780();
static struct {unsigned f; char r[8];} string1 = {393224, "\205\210\242\000\024\256\000"};
static struct {unsigned f; char r[16];} string2 = {851984, "\257\300\151\222\034\147\300\177\056\202\036\100\164\000\000"};
static struct {unsigned f; char r[4];} string3 = {131074, "\003\004\000"};
static struct {unsigned f; char r[16];} string4 = {851984, "\257\300\246\205\220\035\300\344\000\142\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\144\134\241\012\300\120\263\151\115\100\164\000\000"};
static struct {
   word f0[9]; word f9; word f10; word f11; 
   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[2]; 
   } globalframe = {
   {0}, (word) Unpack←P780, 0, (word) UsualPack←P720, 
   0, (word) Pack←P660, 0, (word) CVExtended←P600, 
   0, (word) RealToPair←P540, 0, (word) PowersOfTen←P480, 
   0, (word) PairToReal←P420, 0, (word) Floor←P360, 
   0, (word) Ceiling←P300, 0, (word) Round←P240, 
   0, (word) Fix←P180, 0, (word) RangeError←P120, 
   0, (word) FScale←P60, 0, (word) RealImpl←P0, 
   {0}
   };

static void NoName←Q1008()
   {
   register ptr gf←c067 =  (ptr) &globalframe;
   word var←c7780;
   (* (( (ptr) gf←c067)+6) ) = (word) XR←GetTypeIndexS((word) (&string1));
   (void) XR←DeclareGlobalFrame((word) "RealImpl", &globalframe, (word) XR←GetTypeIndex((word) &string2, 0, (word) &string3)
      , (word) (( (bPt) gf←c067)+140)/* var←c7524 */ );
   var←c7780 = (word) XR←ExportInterface((word) "Real", (word) XR←GetTypeIndexS((word) (&string4)), 11);
   (* (( (ptr) gf←c067)+37)/* var←c7748 */  ) = var←c7780;
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+132)/* var←c7492 */ , 67633154);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+116)/* var←c7428 */ , 67371265);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+108)/* var←c7396 */ , 67371521);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+100)/* var←c7364 */ , 67371777);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+92)/* var←c7332 */ , 67372033);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+84)/* var←c7300 */ , 67634434);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+68)/* var←c7236 */ , 201852418);
   (void) XR←ExportVar(var←c7780, 7, (word) (( (bPt) gf←c067)+28));
   (void) XR←ExportVar(var←c7780, 8, (word) (( (bPt) gf←c067)+32));
   var←c7780 = (word) XR←ExportInterface((word) "Ieee", (word) XR←GetTypeIndexS((word) (&string5)), 31);
   (* (( (ptr) gf←c067)+37)/* var←c7748 */  ) = var←c7780;
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+36)/* var←c7108 */ , 201590529);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+52)/* var←c7172 */ , 67373057);
   (void) XR←ExportProcS(var←c7780, (word) (( (bPt) gf←c067)+60)/* var←c7204 */ , 269228545);
   }

static void RealImpl←P0(formal←c021, formal←c020)
   word formal←c021;
   word formal←c020;
   {
   register ptr gf←c7812 =  (ptr) &globalframe;
   /* RealImpl: */ 
SOURCE(36, 3095)
SOURCE(1936, 43)
   (* (( (ptr) gf←c7812)+4)/* tenToThe←v2748 */  ) = (word) PowersOfTen←P480();
   }

static word FScale←P60(a←v3212, scale←v3240)
   word a←v3212;
   word scale←v3240;
   {
   word var←c3284;
   word r←v4700;
   word exp←v4728;
   /* FScale: */ 
SOURCE(259, 499)
SOURCE(324, 32)
   r←v4700 = a←v3212;
SOURCE(358, 28)
   exp←v4728 = ((((unsigned)r←v4700 << 1) >> 24) + scale←v3240);
SOURCE(388, 370)
   if ( (  ( ( (int)exp←v4728 >  (int)0) ? ( (int)exp←v4728 <  (int)255) : 0 )  ? (((((unsigned)r←v4700 << 1) >> 24) - 1) <= 253) : 0 ) ) {
SOURCE(438, 11)
      r←v4700 = (r←v4700 & 2155872255) | (((BCK(exp←v4728, 256))) << 23);
SOURCE(451, 21)
      return(r←v4700);
      }
   else {
SOURCE(481, 26)
      {
         word x6;
         word x8;
         if (((
            x6 = a←v3212,  *(float*)&x6
            ) == (
            x8 = (*  (ptr) &fc7 ),  *(float*)&x8
            ))) {
SOURCE(497, 10)
            return(a←v3212);
            };
         };
SOURCE(509, 60)
      lab←L100002: ;
      if (( (int)scale←v3240 >=  (int)8)) {
         }
      else {
         goto lab←L100000;
         };
SOURCE(529, 17)
      scale←v3240 = (scale←v3240 - 8);
SOURCE(548, 21)
      {
         word x9;
         word x11;
         *(float*)&a←v3212 = (
            x9 = a←v3212,  *(float*)&x9
            ) * (
            x11 = (*  (ptr) &fc10 ),  *(float*)&x11
            );
         };
      goto lab←L100002;
      lab←L100000: ;
SOURCE(571, 53)
      lab←L100005: ;
      if (( (int)scale←v3240 >  (int)0)) {
         }
      else {
         goto lab←L100003;
         };
SOURCE(590, 17)
      scale←v3240 = (scale←v3240 - 1);
SOURCE(609, 15)
      {
         word x12;
         word x13;
         *(float*)&a←v3212 = (
            x12 = a←v3212,  *(float*)&x12
            ) + (
            x13 = a←v3212,  *(float*)&x13
            );
         };
      goto lab←L100005;
      lab←L100003: ;
SOURCE(626, 61)
      lab←L100008: ;
      if (( (int)INEG(scale←v3240) >=  (int)8)) {
         }
      else {
         goto lab←L100006;
         };
SOURCE(647, 17)
      scale←v3240 = (scale←v3240 + 8);
SOURCE(666, 21)
      {
         word x14;
         word x15;
         *(float*)&a←v3212 = (
            x14 = a←v3212,  *(float*)&x14
            ) / (
            x15 = (*  (ptr) &fc10 ),  *(float*)&x15
            );
         };
      goto lab←L100008;
      lab←L100006: ;
SOURCE(689, 56)
      lab←L100011: ;
      if (( (int)INEG(scale←v3240) >  (int)0)) {
         }
      else {
         goto lab←L100009;
         };
SOURCE(709, 17)
      scale←v3240 = (scale←v3240 + 1);
SOURCE(728, 17)
      {
         word x16;
         word x18;
         *(float*)&a←v3212 = (
            x16 = a←v3212,  *(float*)&x16
            ) / (
            x18 = (*  (ptr) &fc17 ),  *(float*)&x18
            );
         };
      goto lab←L100011;
      lab←L100009: ;
SOURCE(747, 11)
      return(a←v3212);
      };
   }

static word RangeError←P120(a←v3344)
   word a←v3344;
   {
   register ptr gf←c7844 =  (ptr) &globalframe;
   word var←c3388;
   word flags←v4772 = 0;
   word vp←v4800 = 0;
   W2 var←c031;
   word var←c032;
   /* RangeError: */ 
SOURCE(765, 277)
SOURCE(935, 25)
   flags←v4772 = (flags←v4772 & 4294967263) | (((1)) << 5);
SOURCE(962, 53)
   (*  (ptr) (word) &var←c031 ) = flags←v4772;
   (* (( (ptr) (word) &var←c031) + 1) ) = vp←v4800;
   (void) (XR←RaiseSignal((word) (( (bPt) gf←c7844)+28), (word) &var←c032, (word) &var←c031));
   if ((0 != var←c032)) {
      };
SOURCE(1031, 11)
   return(a←v3344);
   }

static word Fix←P180(a←v3448)
   word a←v3448;
   {
   word var←c3492;
   /* Fix: */ 
SOURCE(1046, 128)
SOURCE(1091, 51)
   if (((((unsigned)a←v3448 << 1) >> 24) == 255)) {
SOURCE(1125, 17)
      a←v3448 = (word) RangeError←P120(a←v3448);
      };
SOURCE(1145, 29)
   return((word) XR←REAL32←Fix(a←v3448));
   }

static word Round←P240(a←v3552)
   word a←v3552;
   {
   word var←c3596;
   /* Round: */ 
SOURCE(1178, 132)
SOURCE(1225, 51)
   if (((((unsigned)a←v3552 << 1) >> 24) == 255)) {
SOURCE(1259, 17)
      a←v3552 = (word) RangeError←P120(a←v3552);
      };
SOURCE(1279, 31)
   return((word) XR←REAL32←Round(a←v3552));
   }

static word Ceiling←P300(a←v3656)
   word a←v3656;
   {
   word var←c3700;
   /* Ceiling: */ 
SOURCE(1314, 136)
SOURCE(1363, 51)
   if (((((unsigned)a←v3656 << 1) >> 24) == 255)) {
SOURCE(1397, 17)
      a←v3656 = (word) RangeError←P120(a←v3656);
      };
SOURCE(1417, 33)
   return((word) XR←REAL32←Ceiling(a←v3656));
   }

static word Floor←P360(a←v3760)
   word a←v3760;
   {
   word var←c3804;
   /* Floor: */ 
SOURCE(1454, 132)
SOURCE(1501, 51)
   if (((((unsigned)a←v3760 << 1) >> 24) == 255)) {
SOURCE(1535, 17)
      a←v3760 = (word) RangeError←P120(a←v3760);
      };
SOURCE(1555, 31)
   return((word) XR←REAL32←Floor(a←v3760));
   }

static word PairToReal←P420(fr←v3864, exp10←v3892)
   word fr←v3864;
   word exp10←v3892;
   {
   register ptr gf←c7876 =  (ptr) &globalframe;
   word var←c3936;
   word a←v4856;
   word i←v4884;
   /* PairToReal: */ 
SOURCE(1590, 331)
SOURCE(1659, 12)
   {
      float tf19;
      a←v4856 = (
         tf19 = (float)(int)fr←v3864,  *(word*)&tf19
         );
      };
SOURCE(1673, 18)
   i←v4884 = exp10←v3892;
SOURCE(1729, 192)
   lab←L100014: ;
SOURCE(1732, 168)
   {
      word var←c7684;
      var←c7684 = i←v4884;
      if (( (int)var←c7684 >  (int)20)) {
SOURCE(1756, 19)
         {
            word x21;
            word x22;
            *(float*)&a←v4856 = (
               x21 = a←v4856,  *(float*)&x21
               ) * (
               x22 = (* (( (ptr) (* (( (ptr) gf←c7876)+4)/* tenToThe←v2748 */  ))+20) ),  *(float*)&x22
               );
            };
SOURCE(1777, 11)
         i←v4884 = (i←v4884 - 20);
SOURCE(1790, 4)
         goto lab←L100014;
         };
      if (( (int)var←c7684 <  (int) (word) -20)) {
SOURCE(1808, 19)
         {
            word x23;
            word x24;
            *(float*)&a←v4856 = (
               x23 = a←v4856,  *(float*)&x23
               ) / (
               x24 = (* (( (ptr) (* (( (ptr) gf←c7876)+4)/* tenToThe←v2748 */  ))+20) ),  *(float*)&x24
               );
            };
SOURCE(1829, 11)
         i←v4884 = (i←v4884 + 20);
SOURCE(1842, 4)
         goto lab←L100014;
         };
      if (( (int)var←c7684 >  (int)0)) {
SOURCE(1856, 17)
         {
            word x25;
            word x26;
            *(float*)&a←v4856 = (
               x25 = a←v4856,  *(float*)&x25
               ) * (
               x26 = (* (( (ptr) (* (( (ptr) gf←c7876)+4)/* tenToThe←v2748 */  ))+BCK(i←v4884, 21)) ),  *(float*)&x26
               );
            };
         goto endif020;
         };
      if (( (int)var←c7684 <  (int)0)) {
SOURCE(1882, 18)
         {
            word x27;
            word idx28;
            word x29;
            *(float*)&a←v4856 = (
               x27 = a←v4856,  *(float*)&x27
               ) / (
               x29 = (* (( (ptr) (* (( (ptr) gf←c7876)+4)/* tenToThe←v2748 */  ))+(
                     idx28 = (word) INEG(i←v4884),
                     BCK(idx28, 21)
                     )) ),  *(float*)&x29
               );
            };
         goto endif020;
         };
      endif020: ;
      };
SOURCE(1911, 10)
   return(a←v4856);
   /* c2c skipped dead code */ 
   }

static word PowersOfTen←P480()
   {
   register ptr gf←c7908 =  (ptr) &globalframe;
   word var←c4044;
   word t←v4956;
   /* PowersOfTen: */ 
SOURCE(2073, 223)
SOURCE(2123, 160)
   t←v4956 = XR←NewObject(84, (* (( (ptr) gf←c7908)+6) ));
   (*  (ptr) t←v4956 ) = (*  (ptr) &fc7 );
   (* (( (ptr) t←v4956)+1) ) = (*  (ptr) &fc30 );
   (* (( (ptr) t←v4956)+2) ) = (*  (ptr) &fc31 );
   (* (( (ptr) t←v4956)+3) ) = (*  (ptr) &fc32 );
   (* (( (ptr) t←v4956)+4) ) = (*  (ptr) &fc33 );
   (* (( (ptr) t←v4956)+5) ) = (*  (ptr) &fc34 );
   (* (( (ptr) t←v4956)+6) ) = (*  (ptr) &fc35 );
   (* (( (ptr) t←v4956)+7) ) = (*  (ptr) &fc36 );
   (* (( (ptr) t←v4956)+8) ) = (*  (ptr) &fc37 );
   (* (( (ptr) t←v4956)+9) ) = (*  (ptr) &fc38 );
   (* (( (ptr) t←v4956)+10) ) = (*  (ptr) &fc39 );
   (* (( (ptr) t←v4956)+11) ) = (*  (ptr) &fc40 );
   (* (( (ptr) t←v4956)+12) ) = (*  (ptr) &fc41 );
   (* (( (ptr) t←v4956)+13) ) = (*  (ptr) &fc42 );
   (* (( (ptr) t←v4956)+14) ) = (*  (ptr) &fc43 );
   (* (( (ptr) t←v4956)+15) ) = (*  (ptr) &fc44 );
   (* (( (ptr) t←v4956)+16) ) = (*  (ptr) &fc45 );
   (* (( (ptr) t←v4956)+17) ) = (*  (ptr) &fc46 );
   (* (( (ptr) t←v4956)+18) ) = (*  (ptr) &fc47 );
   (* (( (ptr) t←v4956)+19) ) = (*  (ptr) &fc48 );
   (* (( (ptr) t←v4956)+20) ) = (*  (ptr) &fc49 );
SOURCE(2285, 11)
   return(t←v4956);
   }

static void RealToPair←P540(formal←c056, r←v4116, precision←v4144)
   word formal←c056;
   word r←v4116;
   word precision←v4144;
   {
   register ptr gf←c7940 =  (ptr) &globalframe;
   word type←v4188;
   word fr←v4216;
   word exp10←v4244;
   word rep←v5012;
   /* RealToPair: */ 
SOURCE(2300, 831)
SOURCE(2441, 34)
   rep←v5012 = r←v4116;
SOURCE(2477, 79)
   if ((precision←v4144 > 20)) {
SOURCE(2521, 35)
      precision←v4144 = 20;
      };
   if (((((unsigned)rep←v5012 << 1) >> 24) < 255)) {
SOURCE(2592, 290)
      {
         word a←v5056;
SOURCE(2594, 27)
         a←v5056 = ( (((unsigned)r←v4116 << 1) >> 1) );
SOURCE(2623, 53)
         {
            word x50;
            word x51;
            if (((
               x50 = a←v5056,  *(float*)&x50
               ) <= (
               x51 = (*  (ptr) &fc7 ),  *(float*)&x51
               ))) {
SOURCE(2640, 36)
               type←v4188 = 1;
               fr←v4216 = 0;
               exp10←v4244 = 0;
               goto lab←L100015;
               };
            };
SOURCE(2678, 9)
         exp10←v4244 = 0;
SOURCE(2689, 13)
         type←v4188 = 0;
SOURCE(2704, 68)
         lab←L100018: ;
         {
            word x52;
            word x53;
            if (((
               x52 = a←v5056,  *(float*)&x52
               ) < (
               x53 = (* (( (ptr) (* (( (ptr) gf←c7940)+4)/* tenToThe←v2748 */  ))+BCK(precision←v4144, 21)) ),  *(float*)&x53
               ))) {
               }
            else {
               goto lab←L100016;
               };
            };
SOURCE(2737, 10)
         {
            word x54;
            word x56;
            *(float*)&a←v5056 = (
               x54 = a←v5056,  *(float*)&x54
               ) * (
               x56 = (*  (ptr) &fc55 ),  *(float*)&x56
               );
            };
SOURCE(2749, 23)
         exp10←v4244 = (exp10←v4244 - 1);
         goto lab←L100018;
         lab←L100016: ;
SOURCE(2774, 69)
         lab←L100021: ;
         {
            word x57;
            word x58;
            if (((
               x57 = a←v5056,  *(float*)&x57
               ) >= (
               x58 = (* (( (ptr) (* (( (ptr) gf←c7940)+4)/* tenToThe←v2748 */  ))+BCK(precision←v4144, 21)) ),  *(float*)&x58
               ))) {
               }
            else {
               goto lab←L100019;
               };
            };
SOURCE(2808, 10)
         {
            word x59;
            word x60;
            *(float*)&a←v5056 = (
               x59 = a←v5056,  *(float*)&x59
               ) / (
               x60 = (*  (ptr) &fc55 ),  *(float*)&x60
               );
            };
SOURCE(2820, 23)
         exp10←v4244 = (exp10←v4244 + 1);
         goto lab←L100021;
         lab←L100019: ;
SOURCE(2845, 35)
         {
            word x61;
            word x62;
            word x63;
            float tf64;
            if (((
               x61 = r←v4116,  *(float*)&x61
               ) < (
               x62 = (*  (ptr) &fc7 ),  *(float*)&x62
               ))) {
               fr←v4216 = (word) Round←P240((
                     tf64 =  - (
                        x63 = a←v5056,  *(float*)&x63
                        ),  *(word*)&tf64
                     ));
               }
            else {
               fr←v4216 = (word) Round←P240(a←v5056);
               };
            };
         };
      }
   else {
      if ((rep←v5012 == 2139095040)) {
SOURCE(2922, 58)
         type←v4188 = 2;
         fr←v4216 = 2147483647;
         exp10←v4244 = 2147483647;
         goto lab←L100015;
         }
      else {
         if ((rep←v5012 == 4286578688)) {
SOURCE(3020, 59)
            type←v4188 = 2;
            fr←v4216 = 2147483648;
            exp10←v4244 = 2147483647;
            goto lab←L100015;
            }
         else {
SOURCE(3092, 39)
            type←v4188 = 3;
            fr←v4216 = ( (((unsigned)rep←v5012 << 9) >> 9) );
            exp10←v4244 = 0;
            goto lab←L100015;
            };
         };
      };
   /* removed tail goto */ 
   lab←L100015: ;
   (*  (ptr) formal←c056 ) = type←v4188;
   (* (( (ptr) formal←c056)+1) ) = fr←v4216;
   (* (( (ptr) formal←c056)+2) ) = exp10←v4244;
   return;
   }

static void CVExtended←P600(formal←c059, z←v4304)
   word formal←c059;
   W3 z←v4304;
   {
   W4 var←c4348;
   /* CVExtended: */ 
SOURCE(3137, 25)
SOURCE(3203, 5)
   (void) XR←RaiseUnnamedError();
   }

static word Pack←P660(z←v4408)
   word z←v4408;
   {
   word r←v4464;
   /* Pack: */ 
SOURCE(3237, 19)
SOURCE(3302, 5)
   (void) XR←RaiseUnnamedError();
   }

static word UsualPack←P720(z←v4524)
   W3 z←v4524;
   {
   word var←c4568;
   /* UsualPack: */ 
SOURCE(3336, 24)
SOURCE(3392, 5)
   (void) XR←RaiseUnnamedError();
   }

static void Unpack←P780(formal←c066, r←v4628)
   word formal←c066;
   word r←v4628;
   {
   W3 z←v4672;
   /* Unpack: */ 
SOURCE(3426, 21)
SOURCE(3482, 5)
   (void) XR←RaiseUnnamedError();
   }

/* file: RealImpl, module: RealImpl, compiled at: February 21, 1992 9:04:27 pm PST */ 
extern void XR←install←RealImpl() {
   NoName←Q1008();
   }
extern void XR←run←RealImpl() { XR←Start(&globalframe); }