Revived various of the compatability routines and made them Carbon-compliant. This is needed because the initial carbon-python does not use GUSI.
diff --git a/Mac/Compat/dirent.h b/Mac/Compat/dirent.h
index 44cfc5a..7cfe404 100644
--- a/Mac/Compat/dirent.h
+++ b/Mac/Compat/dirent.h
@@ -9,6 +9,7 @@
 #define DIR  struct _dir
 
 struct _dir {
+	short vrefnum;
 	long dirid;
 	int nextfile;
 };
diff --git a/Mac/Compat/getwd.c b/Mac/Compat/getwd.c
index 16b010a..a58fb6a 100644
--- a/Mac/Compat/getwd.c
+++ b/Mac/Compat/getwd.c
@@ -59,13 +59,18 @@
 		sprintf(cwd, "I/O error %d in PBHGetVolSync", err);
 		return NULL;
 	}
+#ifdef TARGET_API_MAC_CARBON
+	p2cstrcpy(cwd, (StringPtr)cwd);
+	ecwd = strchr(cwd, EOS);
+#else
 	ecwd= strchr((const char *)p2cstr((unsigned char*)cwd), EOS);
+#endif
 	ebuf= buf;
 	*ebuf = EOS;
 	
 	/* Next, if at least we're running HFS, walk up the path. */
 	
-	if (hfsrunning()) {
+	{
 		long dirid= pb.w.ioWDDirID;
 		pb.d.ioVRefNum= pb.w.ioWDVRefNum;
 		while (dirid != ROOTID) {
@@ -78,7 +83,12 @@
 				return NULL;
 			}
 			dirid= pb.d.ioDrParID;
+#ifdef TARGET_API_MAC_CARBON
+			p2cstrcpy(ebuf, (StringPtr)ebuf);
+			ebuf += strlen(ebuf);
+#else
 			ebuf += strlen((const char *)p2cstr((unsigned char *)ebuf));
+#endif
 			/* Should check for buf overflow */
 		}
 	}
diff --git a/Mac/Compat/macstat.c b/Mac/Compat/macstat.c
index 8c67994..ee2c099 100644
--- a/Mac/Compat/macstat.c
+++ b/Mac/Compat/macstat.c
@@ -28,10 +28,7 @@
 	pb.d.ioFDirIndex = 0;
 	pb.d.ioDrDirID = 0;
 	pb.f.ioFVersNum = 0; /* Fix found by Timo! See Tech Note 102 */
-	if (hfsrunning())
-		err = PBGetCatInfoSync((CInfoPBPtr)&pb);
-	else
-		err = PBGetFInfoSync((ParmBlkPtr)&pb);
+	err = PBGetCatInfoSync((CInfoPBPtr)&pb);
 	if (err != noErr) {
 		errno = ENOENT;
 		return -1;
diff --git a/Mac/Compat/opendir.c b/Mac/Compat/opendir.c
index d24f5fd..f803236 100644
--- a/Mac/Compat/opendir.c
+++ b/Mac/Compat/opendir.c
@@ -20,6 +20,31 @@
 opendir(path)
 	char *path;
 {
+#ifdef TARGET_API_MAC_CARBON
+	Str255 ppath;
+	FSSpec fss;
+	int plen;
+	OSErr err;
+	
+	if (opened.nextfile != 0) {
+		errno = EBUSY;
+		return NULL; /* A directory is already open. */
+	}
+	plen = strlen(path);
+	c2pstrcpy(ppath, path);
+	if ( ppath[plen] != ':' )
+		ppath[++plen] = ':';
+	ppath[++plen] = 'x';
+	ppath[0] = plen;
+	if( (err = FSMakeFSSpec(0, 0, ppath, &fss)) < 0 && err != fnfErr ) {
+		errno = EIO;
+		return NULL;
+	}
+	opened.dirid = fss.parID;
+	opened.vrefnum = fss.vRefNum;
+	opened.nextfile = 1;
+	return &opened;
+#else
 	union {
 		WDPBRec d;
 		VolumeParam v;
@@ -34,15 +59,9 @@
 	strncpy(ppath+1, path, ppath[0]= strlen(path));
 	pb.d.ioNamePtr= (unsigned char *)ppath;
 	pb.d.ioVRefNum= 0;
-	if (hfsrunning()) {
-		pb.d.ioWDProcID= 0;
-		pb.d.ioWDDirID= 0;
-		err= PBOpenWD((WDPBPtr)&pb, 0);
-	}
-	else {
-		pb.v.ioVolIndex= 0;
-		err= PBGetVInfo((ParmBlkPtr)&pb, 0);
-	}
+	pb.d.ioWDProcID= 0;
+	pb.d.ioWDDirID= 0;
+	err= PBOpenWD((WDPBPtr)&pb, 0);
 	if (err != noErr) {
 		errno = ENOENT;
 		return NULL;
@@ -50,6 +69,7 @@
 	opened.dirid= pb.d.ioVRefNum;
 	opened.nextfile= 1;
 	return &opened;
+#endif
 }
 
 /*
@@ -60,14 +80,16 @@
 closedir(dirp)
 	DIR *dirp;
 {
-	if (hfsrunning()) {
-		WDPBRec pb;
-		
-		pb.ioVRefNum= dirp->dirid;
-		(void) PBCloseWD(&pb, 0);
-	}
+#ifdef TARGET_API_MAC_CARBON
+	dirp->nextfile = 0;
+#else
+	WDPBRec pb;
+	
+	pb.ioVRefNum= dirp->dirid;
+	(void) PBCloseWD(&pb, 0);
 	dirp->dirid= 0;
 	dirp->nextfile= 0;
+#endif
 }
 
 /*
@@ -88,17 +110,23 @@
 	
 	dir.d_name[0]= 0;
 	pb.d.ioNamePtr= (unsigned char *)dir.d_name;
+#ifdef TARGET_API_MAC_CARBON
+	pb.d.ioVRefNum= dp->vrefnum;
+	pb.d.ioDrDirID= dp->dirid;
+#else
 	pb.d.ioVRefNum= dp->dirid;
-	pb.d.ioFDirIndex= dp->nextfile++;
 	pb.d.ioDrDirID= 0;
-	if (hfsrunning())
-		err= PBGetCatInfo((CInfoPBPtr)&pb, 0);
-	else
-		err= PBGetFInfo((ParmBlkPtr)&pb, 0);
+#endif
+	pb.d.ioFDirIndex= dp->nextfile++;
+	err= PBGetCatInfo((CInfoPBPtr)&pb, 0);
 	if (err != noErr) {
 		errno = EIO;
 		return NULL;
 	}
+#ifdef TARGET_API_MAC_CARBON
+	p2cstrcpy(dir.d_name, (StringPtr)dir.d_name);
+#else
 	(void) p2cstr((unsigned char *)dir.d_name);
+#endif
 	return &dir;
 }