/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: April 21, 1992 12:40:51 pm PDT */
/* C2C version: October 16, 1990 (native) */
/* ref-counting: off */
/* file: XlAsciiImpl, module: XlAsciiImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [979983888,1315612870] XlAsciiImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef word (*fPt)();
typedef struct {word f0, f1, f2, f3, f4, f5, f6, f7;} W8;
typedef W8 *W8Pt;
#define SOURCE(p, l) /* source p, l */
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
static void NoName←Q660();
static void XlAsciiImpl←P0();
static word AsciiFromKeySym←P60();
static word KeySymFromAscii←P120();
static void Convert←P180();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\072\151\136\020\300\116\152\250\306\100\164\000\000"};
static struct {unsigned f; char r[16];} string2 = {851984, "\257\300\351\237\222\220\300\366\064\160\223\100\150\000\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\003\153\243\146\300\005\107\115\327\100\150\000\000"};
static struct {unsigned f; char r[16];} string4 = {851984, "\257\300\351\276\264\273\300\115\104\320\264\100\164\000\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\072\360\036\365\300\334\030\146\334\100\150\000\000"};
static struct {
   word f0[8]; word f8; word f9; word f10; 
   word f11; word f12; word f13; word f14; 
   word f15[5]; 
   } globalframe = {
   {0}, (word) Convert←P180, 0, (word) KeySymFromAscii←P120, 
   0, (word) AsciiFromKeySym←P60, 0, (word) XlAsciiImpl←P0, 
   {0}
   };

static void NoName←Q660()
   {
   register ptr gf←c037 =  (ptr) &globalframe;
   word var←c7300;
   (void) XR←DeclareGlobalFrame((word) "XlAsciiImpl", &globalframe, (word) XR←GetTypeIndexS((word) (&string1)), (word) (( (bPt) gf←c037)+56)
      /* var←c7140 */ );
   var←c7300 = (word) XR←ImportInterface((word) "KeyChars", (word) XR←GetTypeIndexS((word) (&string2)), 2);
   (* (( (ptr) gf←c037)+16)/* var←c7172 */  ) = var←c7300;
   (void) XR←ImportProcS(var←c7300, 67371265);
   (void) XR←ImportProcS(var←c7300, 67371009);
   var←c7300 = (word) XR←ImportInterface((word) "KeyMapping", (word) XR←GetTypeIndexS((word) (&string3)), 6);
   (* (( (ptr) gf←c037)+18)/* var←c7236 */  ) = var←c7300;
   (void) XR←ImportProcS(var←c7300, 67895555);
   var←c7300 = (word) XR←ImportInterface((word) "Xl", (word) XR←GetTypeIndexS((word) (&string4)), 218);
   (* (( (ptr) gf←c037)+17)/* var←c7204 */  ) = var←c7300;
   (void) XR←ImportProcS(var←c7300, 67401729);
   (void) XR←ImportProcS(var←c7300, 67401985);
   var←c7300 = (word) XR←ExportInterface((word) "XlAscii", (word) XR←GetTypeIndexS((word) (&string5)), 3);
   (* (( (ptr) gf←c037)+19)/* var←c7332 */  ) = var←c7300;
   (void) XR←ExportProcS(var←c7300, (word) (( (bPt) gf←c037)+32)/* var←c7044 */ , 269484036);
   (void) XR←ExportProcS(var←c7300, (word) (( (bPt) gf←c037)+48)/* var←c7108 */ , 67371265);
   (void) XR←ExportProcS(var←c7300, (word) (( (bPt) gf←c037)+40)/* var←c7076 */ , 67371521);
   }

static void XlAsciiImpl←P0(formal←c012, formal←c011)
   word formal←c012;
   word formal←c011;
   {
   /* XlAsciiImpl: */ 
   }

static word AsciiFromKeySym←P60(keysym←v2856)
   word keysym←v2856;
   {
   register ptr gf←c7364 =  (ptr) &globalframe;
   word char←v2900;
   /* AsciiFromKeySym: */ 
SOURCE(190, 150)
SOURCE(190, 150)
   char←v2900 = 0;
SOURCE(269, 38)
   {
      word pd6;
      pd6 = (* (( (ptr) (* (( (ptr) gf←c7364)+16)/* var←c7172 */  ))+4) );
      char←v2900 = (word) ( *( (fPt) ((*  (ptr) pd6 ))))(keysym←v2856, pd6);
      };
SOURCE(309, 31)
   if ((char←v2900 > 127)) {
SOURCE(331, 9)
      char←v2900 = 0;
      };
SOURCE(190, 150)
   return(char←v2900);
   }

static word KeySymFromAscii←P120(char←v2960)
   word char←v2960;
   {
   register ptr gf←c7396 =  (ptr) &globalframe;
   word keysym←v3004;
   /* KeySymFromAscii: */ 
SOURCE(347, 112)
SOURCE(421, 38)
   {
      word pd7;
      pd7 = (* (( (ptr) (* (( (ptr) gf←c7396)+16)/* var←c7172 */  ))+5) );
      keysym←v3004 = (word) ( *( (fPt) ((*  (ptr) pd7 ))))(char←v2960, pd7);
      };
SOURCE(347, 112)
   return(keysym←v3004);
   }

static void Convert←P180(formal←c036, connection←v3064, keyCode←v3092, state←v3120, matchKeys←v3148)
   word formal←c036;
   word connection←v3064;
   word keyCode←v3092;
   word state←v3120;
   word matchKeys←v3148;
   {
   register ptr gf←c7428 =  (ptr) &globalframe;
   word char←v3276;
   word keysym←v3304;
   word matched←v3332;
   word isModifier←v3360;
   word modmap←v3388;
   word mapping←v3416;
   /* Convert: */ 
SOURCE(465, 1798)
SOURCE(465, 1798)
   char←v3276 = 0;
SOURCE(465, 1798)
   keysym←v3304 = 0;
SOURCE(465, 1798)
   matched←v3332 = 0;
SOURCE(465, 1798)
   isModifier←v3360 = 0;
SOURCE(710, 62)
   {
      word pd8;
      pd8 = (* (( (ptr) (* (( (ptr) gf←c7428)+17)/* var←c7204 */  ))+125) );
      modmap←v3388 = (word) ( *( (fPt) ((*  (ptr) pd8 ))))(connection←v3064, pd8);
      };
SOURCE(774, 63)
   {
      word pd9;
      pd9 = (* (( (ptr) (* (( (ptr) gf←c7428)+17)/* var←c7204 */  ))+124) );
      mapping←v3416 = (word) ( *( (fPt) ((*  (ptr) pd9 ))))(connection←v3064, pd9);
      };
SOURCE(839, 84)
   {
      register word m←v3460 = 0;
      lab←L100004: ;
SOURCE(876, 47)
      {
         word limit10;
         if (((* (( (ptr) (( (W8Pt) (( (ptr) modmap←v3388)+1))+(
                  limit10 = (*  (ptr) modmap←v3388 ),
                  BCK(0, limit10)
                  )))+BCK(m←v3460, 8)) ) == keyCode←v3092)) {
SOURCE(906, 17)
            isModifier←v3360 = 1;
SOURCE(925, 4)
            goto lab←L100002;
            };
         };
      if ((m←v3460 >= 7)) {
         goto lab←L100001;
         };
      m←v3460 = (m←v3460 + 1);
      goto lab←L100004;
      lab←L100001: ;
      lab←L100002: ;
      };
SOURCE(942, 1321)
   if ((0 != isModifier←v3360)) {
SOURCE(964, 50)
      {
         word pd11;
         pd11 = (* (( (ptr) (* (( (ptr) gf←c7428)+18)/* var←c7236 */  ))+5) );
         keysym←v3304 = (word) ( *( (fPt) ((*  (ptr) pd11 ))))(mapping←v3416, keyCode←v3092, 0, pd11);
         };
SOURCE(1016, 30)
      char←v3276 = (word) AsciiFromKeySym←P60(keysym←v3304);
      }
   else {
SOURCE(1055, 1216)
      {
         word ks0←v3504;
         word ks1←v3532;
         word ks2←v3560;
         word ks3←v3588;
SOURCE(1057, 58)
         {
            word pd12;
            pd12 = (* (( (ptr) (* (( (ptr) gf←c7428)+18)/* var←c7236 */  ))+5) );
            ks0←v3504 = (word) ( *( (fPt) ((*  (ptr) pd12 ))))(mapping←v3416, keyCode←v3092, 0, pd12);
            };
SOURCE(1117, 58)
         {
            word pd13;
            pd13 = (* (( (ptr) (* (( (ptr) gf←c7428)+18)/* var←c7236 */  ))+5) );
            ks1←v3532 = (word) ( *( (fPt) ((*  (ptr) pd13 ))))(mapping←v3416, keyCode←v3092, 1, pd13);
            };
SOURCE(1177, 58)
         {
            word pd14;
            pd14 = (* (( (ptr) (* (( (ptr) gf←c7428)+18)/* var←c7236 */  ))+5) );
            ks2←v3560 = (word) ( *( (fPt) ((*  (ptr) pd14 ))))(mapping←v3416, keyCode←v3092, 2, pd14);
            };
SOURCE(1237, 58)
         {
            word pd15;
            pd15 = (* (( (ptr) (* (( (ptr) gf←c7428)+18)/* var←c7236 */  ))+5) );
            ks3←v3588 = (word) ( *( (fPt) ((*  (ptr) pd15 ))))(mapping←v3416, keyCode←v3092, 3, pd15);
            };
SOURCE(1297, 136)
         {
            register word list←v3632;
            list←v3632 = matchKeys←v3148;
            lab←L100008: ;
            if ((list←v3632 != 0)) {
               }
            else {
               goto lab←L100005;
               };
SOURCE(1367, 66)
            {
               word var←c7268;
               var←c7268 = (*  (ptr) list←v3632 );
               if ((((var←c7268 == ks0←v3504) || (var←c7268 == ks1←v3532)) || (var←c7268 == ks2←v3560)) || (var←c7268 == ks3←v3588)) {
SOURCE(1413, 20)
                  matched←v3332 = (*  (ptr) list←v3632 );
SOURCE(1435, 4)
                  goto lab←L100006;
                  };
               };
            list←v3632 = (* (( (ptr) list←v3632)+1) );
            goto lab←L100008;
            lab←L100005: ;
            lab←L100006: ;
            };
         if (((state←v3120 & 04) && (state←v3120 & 1))) {
SOURCE(1519, 12)
            keysym←v3304 = ks3←v3588;
SOURCE(1533, 80)
            if ((keysym←v3304 == 0)) {
SOURCE(1561, 12)
               keysym←v3304 = ks1←v3532;
SOURCE(1575, 38)
               if ((keysym←v3304 == 0)) {
SOURCE(1601, 12)
                  keysym←v3304 = ks0←v3504;
                  };
               };
SOURCE(1618, 27)
            char←v3276 = (word) AsciiFromKeySym←P60(ks1←v3532);
SOURCE(1647, 26)
            if (((char←v3276 - 65) <= 25)) {
               char←v3276 = (char←v3276 - 64);
               }
            else {
               /* removed bogus assignment */ 
               };
            }
         else {
            if (state←v3120 & 04) {
SOURCE(1697, 12)
               keysym←v3304 = ks2←v3560;
SOURCE(1711, 38)
               if ((keysym←v3304 == 0)) {
SOURCE(1737, 12)
                  keysym←v3304 = ks0←v3504;
                  };
SOURCE(1751, 27)
               char←v3276 = (word) AsciiFromKeySym←P60(ks0←v3504);
SOURCE(1780, 26)
               if (((char←v3276 - 65) <= 25)) {
                  char←v3276 = (char←v3276 - 64);
                  }
               else {
                  /* removed bogus assignment */ 
                  };
               }
            else {
               if (state←v3120 & 1) {
SOURCE(1828, 12)
                  keysym←v3304 = ks1←v3532;
SOURCE(1842, 148)
                  if ((keysym←v3304 != 0)) {
SOURCE(1869, 34)
                     char←v3276 = (word) AsciiFromKeySym←P60(ks1←v3532);
                     }
                  else {
SOURCE(1905, 27)
                     char←v3276 = (word) AsciiFromKeySym←P60(ks0←v3504);
SOURCE(1934, 24)
                     if (((char←v3276 - 97) <= 25)) {
                        char←v3276 = (char←v3276 - 32);
                        }
                     else {
                        /* removed bogus assignment */ 
                        };
SOURCE(1960, 30)
                     keysym←v3304 = (word) KeySymFromAscii←P120(char←v3276);
                     };
                  }
               else {
                  if (state←v3120 & 02) {
SOURCE(2012, 107)
                     {
                        word char1←v3760;
SOURCE(2014, 34)
                        char1←v3760 = (word) AsciiFromKeySym←P60(ks0←v3504);
SOURCE(2050, 25)
                        if (((char1←v3760 - 97) <= 25)) {
                           char←v3276 = (char1←v3760 - 32);
                           }
                        else {
                           char←v3276 = char1←v3760;
                           };
SOURCE(2077, 40)
                        if ((char1←v3760 == char←v3276)) {
                           keysym←v3304 = ks0←v3504;
                           }
                        else {
                           keysym←v3304 = ks1←v3532;
                           };
                        };
                     }
                  else {
SOURCE(2133, 135)
                     {
                        word char1←v3804;
SOURCE(2135, 34)
                        char1←v3804 = (word) AsciiFromKeySym←P60(ks0←v3504);
SOURCE(2171, 12)
                        keysym←v3304 = ks0←v3504;
SOURCE(2185, 25)
                        if (((char1←v3804 - 65) <= 25)) {
                           char←v3276 = (char1←v3804 + 32);
                           }
                        else {
                           char←v3276 = char1←v3804;
                           };
SOURCE(2212, 51)
                        if ((char←v3276 != char1←v3804)) {
SOURCE(2233, 30)
                           keysym←v3304 = (word) KeySymFromAscii←P120(char←v3276);
                           };
                        };
                     };
                  };
               };
            };
         };
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c036 ) = char←v3276;
   (* (( (ptr) formal←c036)+1) ) = keysym←v3304;
   (* (( (ptr) formal←c036)+2) ) = matched←v3332;
   (* (( (ptr) formal←c036)+3) ) = isModifier←v3360;
   return;
   }

/* file: XlAsciiImpl, module: XlAsciiImpl, compiled at: April 21, 1992 12:40:51 pm PDT */ 
extern void XR←install←XlAsciiImpl() {
   NoName←Q660();
   }
extern void XR←run←XlAsciiImpl() { XR←Start(&globalframe); }