/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1992 by Xerox Corporation.  All rights reserved. */
/* time: February 21, 1992 11:44:58 pm PST */
/* C2C version: October 16, 1990 (native) */
/* ref-counting: off */
/* file: UnixDirectoryImpl, module: UnixDirectoryImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [3733482609,980103212] UnixDirectoryImpl";
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 struct {W8 f; W8 r;} W16;
#define SOURCE(p, l) /* source p, l */
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
static void NoName←Q480();
static void UnixDirectoryImpl←P0();
static word OpenDir←P60();
static word CloseDir←P120();
static word ReadDir←P180();
static word TellDir←P240();
static void SeekDir←P300();
static void RewindDir←P360();
static word NameFromDirEntP←P420();
static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\336\210\154\161\300\072\153\060\054\100\200\000\000"};
static struct {unsigned f; char r[16];} string2 = {851984, "\257\300\336\210lq\300:k0,@t\000\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\211\056\077\074\300\127\047\310\242\100\150\000\000"};
static struct {unsigned f; char r[16];} string4 = {851984, "\257\300\220\270\074\115\300\121\012\115\357\100\150\000\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\177\003\016\022\300\223\057\020\003\100\150\000\000"};
static struct {unsigned f; char r[20];} string6 = {1245204, "\211\007\006\104\151\162\122\145\160\300\177\003\016\022\300\223\057\020\003"};
static struct {
   word f0[5]; word f5; word f6; word f7; 
   word f8; word f9; word f10; word f11; 
   word f12; word f13; word f14; word f15; 
   word f16; word f17; word f18; word f19; 
   word f20[4]; 
   } globalframe = {
   {0}, (word) NameFromDirEntP←P420, 0, (word) RewindDir←P360, 
   0, (word) SeekDir←P300, 0, (word) TellDir←P240, 
   0, (word) ReadDir←P180, 0, (word) CloseDir←P120, 
   0, (word) OpenDir←P60, 0, (word) UnixDirectoryImpl←P0, 
   {0}
   };

static void NoName←Q480()
   {
   register ptr gf←c048 =  (ptr) &globalframe;
   word var←c9480;
   (* (( (ptr) gf←c048)+4) ) = (word) XR←GetTypeIndexS((word) (&string1));
   (void) XR←DeclareGlobalFrame((word) "UnixDirectoryImpl", &globalframe, (word) XR←GetTypeIndexS((word) (&string2)), (word) (
         ( (bPt) gf←c048)+76)/* var←c9160 */ );
   var←c9480 = (word) XR←ImportInterface((word) "UnixSysCalls", (word) XR←GetTypeIndexS((word) (&string3)), 77);
   (* (( (ptr) gf←c048)+21)/* var←c9192 */  ) = var←c9480;
   (void) XR←ImportProcS(var←c9480, 67904515);
   (void) XR←ImportProcS(var←c9480, 67897859);
   (void) XR←ImportProcS(var←c9480, 67372289);
   (void) XR←ImportProcS(var←c9480, 67650050);
   (void) XR←ImportProcS(var←c9480, 67906563);
   var←c9480 = (word) XR←ImportInterface((word) "UXStrings", (word) XR←GetTypeIndexS((word) (&string4)), 9);
   (* (( (ptr) gf←c048)+22)/* var←c9352 */  ) = var←c9480;
   (void) XR←ImportProcS(var←c9480, 67633922);
   (void) XR←ImportProcS(var←c9480, 67371521);
   var←c9480 = (word) XR←ExportInterface((word) "UnixDirectory", (word) XR←GetTypeIndexS((word) (&string5)), 8);
   (* (( (ptr) gf←c048)+23)/* var←c9512 */  ) = var←c9480;
   (void) XR←ExportType((word) "DirRep", (word) XR←GetTypeIndexS((word) (&string6)), (word) XR←GetTypeIndexS((word) (&string1))
      );
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+68)/* var←c9128 */ , 67371265);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+52)/* var←c9064 */ , 67371521);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+44)/* var←c9032 */ , 67371777);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+36)/* var←c9000 */ , 525314);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+28)/* var←c8968 */ , 263425);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+60)/* var←c9096 */ , 67372545);
   (void) XR←ExportProcS(var←c9480, (word) (( (bPt) gf←c048)+20)/* var←c8936 */ , 67372801);
   }

static void UnixDirectoryImpl←P0(formal←c015, formal←c014)
   word formal←c015;
   word formal←c014;
   {
   /* UnixDirectoryImpl: */ 
   }

static word OpenDir←P60(fileName←v3344)
   word fileName←v3344;
   {
   register ptr gf←c9544 =  (ptr) &globalframe;
   word dirp←v3388;
   word mode←v4008 = 0;
   word fd←v4036;
   W16 stat←v4064;
   word buf←v4092;
   /* OpenDir: */ 
SOURCE(768, 638)
SOURCE(768, 638)
   dirp←v3388 = 0;
SOURCE(913, 68)
   {
      word pd7;
      pd7 = (* (( (ptr) (* (( (ptr) gf←c9544)+21)/* var←c9192 */  ))+48) );
      fd←v4036 = (word) ( *( (fPt) ((*  (ptr) pd7 ))))(fileName←v3344, 0, mode←v4008, pd7);
      };
SOURCE(983, 20)
   XR←FillWords(&stat←v4064, 16, 0);
SOURCE(1005, 30)
   buf←v4092 = (word) &stat←v4064;
SOURCE(1037, 31)
   if ((fd←v4036 ==  (word) -1)) {
SOURCE(1056, 12)
      return(0);
      };
SOURCE(1070, 89)
   {
      word pd8;
      pd8 = (* (( (ptr) (* (( (ptr) gf←c9544)+21)/* var←c9192 */  ))+70) );
      if (((word) ( *( (fPt) ((*  (ptr) pd8 ))))(fd←v4036, buf←v4092, pd8) ==  (word) -1)) {
SOURCE(1118, 27)
         {
            word var←c9256;
            word pd9;
            pd9 = (* (( (ptr) (* (( (ptr) gf←c9544)+21)/* var←c9192 */  ))+9) );
            var←c9256 = (word) ( *( (fPt) ((*  (ptr) pd9 ))))(fd←v4036, pd9);
            };
SOURCE(1147, 12)
         return(0);
         };
      };
SOURCE(1164, 99)
   if ((( * (bPt) (( (bPt) buf←v4092)+8) >> 4) != 4)) {
SOURCE(1193, 27)
      (void) XR←SetErrno(20);
SOURCE(1222, 27)
      {
         word var←c9288;
         word pd10;
         pd10 = (* (( (ptr) (* (( (ptr) gf←c9544)+21)/* var←c9192 */  ))+9) );
         var←c9288 = (word) ( *( (fPt) ((*  (ptr) pd10 ))))(fd←v4036, pd10);
         };
SOURCE(1251, 12)
      return(0);
      };
SOURCE(1268, 123)
   {
      word var←c9320;
      word var←c9384;
      {
         word pd11;
         word idx12;
         pd11 = (* (( (ptr) (* (( (ptr) gf←c9544)+22)/* var←c9352 */  ))+6) );
         var←c9320 = (word) ( *( (fPt) ((*  (ptr) pd11 ))))((
               idx12 = (* (( (ptr) buf←v4092)+12) ),
               SGNCK(idx12)
               ), pd11);
         };
      var←c9384 = XR←NewObject(24, (* (( (ptr) gf←c9544)+4) ));
      (*  (ptr) var←c9384 ) = var←c9320;
      {
         word idx13;
         (* (( (ptr) var←c9384)+1) ) = (
            idx13 = (* (( (ptr) buf←v4092)+12) ),
            SGNCK(idx13)
            );
         };
      (* (( (ptr) var←c9384)+2) ) = fd←v4036;
      dirp←v3388 = var←c9384;
      };
SOURCE(1393, 13)
   return(dirp←v3388);
   }

static word CloseDir←P120(dirp←v3448)
   word dirp←v3448;
   {
   register ptr gf←c9576 =  (ptr) &globalframe;
   word var←c3492;
   word fd←v4136;
   /* CloseDir: */ 
SOURCE(1411, 135)
SOURCE(1466, 16)
   fd←v4136 = (* (( (ptr) dirp←v3448)+2) );
SOURCE(1484, 15)
   (* (( (ptr) dirp←v3448)+2) ) =  (word) -1;
SOURCE(1501, 12)
   (* (( (ptr) dirp←v3448)+3) ) = 0;
SOURCE(1515, 31)
   {
      word pd14;
      pd14 = (* (( (ptr) (* (( (ptr) gf←c9576)+21)/* var←c9192 */  ))+9) );
      return((word) ( *( (fPt) ((*  (ptr) pd14 ))))(fd←v4136, pd14));
      };
   }

static word ReadDir←P180(dirp←v3552)
   word dirp←v3552;
   {
   register ptr gf←c9608 =  (ptr) &globalframe;
   word var←c3596;
   word dp←v4180;
   word fd←v4208;
   word buffer←v4236;
   word bsize←v4264;
   word saveloc←v4292 = 0;
   word recLen←v4320;
   word fileNo←v4348;
   /* ReadDir: */ 
SOURCE(1552, 783)
SOURCE(1627, 16)
   fd←v4208 = (* (( (ptr) dirp←v3552)+2) );
SOURCE(1645, 29)
   buffer←v4236 = (*  (ptr) dirp←v3552 );
SOURCE(1676, 23)
   bsize←v4264 = (* (( (ptr) dirp←v3552)+1) );
SOURCE(1747, 526)
   lab←L100002: ;
SOURCE(1761, 137)
   if (( (int)(* (( (ptr) dirp←v3552)+4) ) !=  (int)0)) {
SOURCE(1785, 18)
      saveloc←v4292 = (* (( (ptr) dirp←v3552)+3) );
SOURCE(1813, 55)
SOURCE(1815, 31)
      dp←v4180 = (buffer←v4236 + saveloc←v4292);
SOURCE(1848, 18)
      recLen←v4320 = (* (( (hPt) dp←v4180)+4) );
SOURCE(1871, 27)
      (* (( (ptr) dirp←v3552)+3) ) = (saveloc←v4292 + recLen←v4320);
      };
SOURCE(1903, 56)
   if (( (int)(* (( (ptr) dirp←v3552)+3) ) >=  (int)(* (( (ptr) dirp←v3552)+4) ))) {
SOURCE(1935, 24)
      (* (( (ptr) dirp←v3552)+4) ) = 0;
      (* (( (ptr) dirp←v3552)+3) ) = 0;
      };
SOURCE(1964, 164)
   if (( (int)(* (( (ptr) dirp←v3552)+4) ) ==  (int)0)) {
SOURCE(1996, 53)
SOURCE(1997, 52)
      {
         word pd15;
         pd15 = (* (( (ptr) (* (( (ptr) gf←c9608)+21)/* var←c9192 */  ))+14) );
         (* (( (ptr) dirp←v3552)+4) ) = (word) ( *( (fPt) ((*  (ptr) pd15 ))))(fd←v4208, buffer←v4236, bsize←v4264, pd15);
         };
SOURCE(2052, 40)
      if (( (int)(* (( (ptr) dirp←v3552)+4) ) ==  (int)0)) {
SOURCE(2074, 18)
         (* (( (ptr) dirp←v3552)+3) ) = saveloc←v4292;
         };
SOURCE(2094, 34)
      if (( (int)(* (( (ptr) dirp←v3552)+4) ) <=  (int)0)) {
SOURCE(2116, 12)
         return(0);
         };
      };
SOURCE(2141, 76)
SOURCE(2143, 32)
   dp←v4180 = (buffer←v4236 + (* (( (ptr) dirp←v3552)+3) ));
SOURCE(2177, 18)
   recLen←v4320 = (* (( (hPt) dp←v4180)+4) );
SOURCE(2197, 18)
   fileNo←v4348 = (* (( (ptr) dp←v4180)+1) );
SOURCE(2220, 32)
   if ((recLen←v4320 <= 0)) {
SOURCE(2240, 12)
      return(0);
      };
SOURCE(2254, 19)
   if ((fileNo←v4348 != 0)) {
SOURCE(2273, 4)
      goto lab←L100001;
      };
   goto lab←L100002;
   lab←L100001: ;
SOURCE(2296, 24)
SOURCE(2297, 23)
   (* (( (ptr) dirp←v3552)+5) ) = (*  (ptr) dp←v4180 );
SOURCE(2324, 11)
   return(dp←v4180);
   }

static word TellDir←P240(dirp←v3656)
   word dirp←v3656;
   {
   word var←c3700;
   /* TellDir: */ 
SOURCE(2341, 74)
SOURCE(2395, 20)
   return((* (( (ptr) dirp←v3656)+5) ));
   }

static void SeekDir←P300(dirp←v3760, loc←v3788)
   word dirp←v3760;
   word loc←v3788;
   {
   register ptr gf←c9640 =  (ptr) &globalframe;
   word currentLocation←v4392;
   word fd←v4420;
   /* SeekDir: */ 
SOURCE(2421, 248)
SOURCE(2471, 34)
   currentLocation←v4392 = (* (( (ptr) dirp←v3760)+5) );
SOURCE(2507, 16)
   fd←v4420 = (* (( (ptr) dirp←v3760)+2) );
SOURCE(2525, 38)
   if (( (int)currentLocation←v4392 ==  (int)loc←v3788)) {
SOURCE(2557, 6)
      return;
      };
SOURCE(2565, 12)
   (* (( (ptr) dirp←v3760)+3) ) = 0;
SOURCE(2579, 13)
   (* (( (ptr) dirp←v3760)+4) ) = 0;
SOURCE(2594, 56)
   {
      word var←c9448;
      word pd16;
      pd16 = (* (( (ptr) (* (( (ptr) gf←c9640)+21)/* var←c9192 */  ))+40) );
      var←c9448 = (word) ( *( (fPt) ((*  (ptr) pd16 ))))(fd←v4420, loc←v3788, 0, pd16);
      };
SOURCE(2652, 17)
   (* (( (ptr) dirp←v3760)+5) ) = loc←v3788;
   }

static void RewindDir←P360(dirp←v3848)
   word dirp←v3848;
   {
   /* RewindDir: */ 
SOURCE(2675, 90)
SOURCE(2739, 26)
   (void) SeekDir←P300(dirp←v3848, 0);
   }

static word NameFromDirEntP←P420(dp←v3908)
   word dp←v3908;
   {
   register ptr gf←c9672 =  (ptr) &globalframe;
   word name←v3952;
   /* NameFromDirEntP: */ 
SOURCE(2771, 123)
SOURCE(2771, 123)
   name←v3952 = 0;
SOURCE(2849, 45)
   {
      word pd17;
      pd17 = (* (( (ptr) (* (( (ptr) gf←c9672)+22)/* var←c9352 */  ))+7) );
      name←v3952 = (word) ( *( (fPt) ((*  (ptr) pd17 ))))((word) (( (bPt) dp←v3908)+12), 2147483647, pd17);
      };
SOURCE(2771, 123)
   return(name←v3952);
   }

/* file: UnixDirectoryImpl, module: UnixDirectoryImpl, compiled at: February 21, 1992 11:44:57 pm PST */ 
extern void XR←install←UnixDirectoryImpl() {
   NoName←Q480();
   }
extern void XR←run←UnixDirectoryImpl() { XR←Start(&globalframe); }