Think 6.0 version
diff --git a/Mac/fopenRF.c b/Mac/fopenRF.c
index f18f7d9..04f192e 100644
--- a/Mac/fopenRF.c
+++ b/Mac/fopenRF.c
@@ -1,21 +1,19 @@
 
 /*
- *  fopenRF.c -- Clone of fopen.c to open Mac resource forks.
+ *  fopen.c
  *
- *  Copyright (c) 1989 Symantec Corporation.  All rights reserved.
+ *  Copyright (c) 1991 Symantec Corporation.  All rights reserved.
  *
  */
 
+#include <MacHeaders>
+
 #include "stdio.h"
 #include "errno.h"
 #include "string.h"
 #include "ansi_private.h"
 
-FILE *fopenRF(char *, char *);
-FILE *freopenRF(char *, char *, FILE *);
-FILE *__openRF(char *, int, int, FILE *);
-
-#include <Files.h>
+extern long _ftype, _fcreator;
 
 #define fcbVPtr(fcb)		(* (VCB **) (fcb + 20))
 #define fcbDirID(fcb)		(* (long *) (fcb + 58))
@@ -27,20 +25,18 @@
 static int close(FILE *);
 static void replace(unsigned char *, size_t, int, int);
 
+FILE *freopenRF();
+FILE *__openRF();
 
 FILE *
-fopenRF(filename, mode)
-char *filename, *mode;
+fopenRF(const char *filename, const char *mode)
 {
 	return(freopenRF(filename, mode, __getfile()));
 }
 
 
 FILE *
-freopenRF(filename, mode, fp)
-char *filename;
-register char *mode;
-register FILE *fp;
+freopenRF(const char *filename, const char *mode, FILE *fp)
 {
 	int omode, oflag;
 	
@@ -83,12 +79,9 @@
 
 
 FILE *
-__openRF(filename, omode, oflag, fp)
-char *filename;
-int omode, oflag;
-register FILE *fp;
+__openRF(const char *filename, int omode, int oflag, FILE *fp)
 {
-	ioParam pb;
+	IOParam pb;
 	char pname[FILENAME_MAX];
 
 	if (fp == NULL)
@@ -106,10 +99,7 @@
 		/*  create file  */
 
 	if (oflag & F_CREAT) {
-		asm {
-			lea		pb,a0
-			_PBCreate
-		}
+		PBCreateSync((ParmBlkPtr)&pb);
 		if (pb.ioResult == noErr)
 			oflag &= ~F_TRUNC;
 		else if (pb.ioResult == dupFNErr && !(oflag & F_EXCL))
@@ -120,32 +110,23 @@
 		}
 	}
 	
-		/*  open resource file  */
+		/*  open file  */
 		
-	asm {
-		lea		pb,a0
-		_PBOpenRF
-	}
+	PBOpenRFSync((ParmBlkPtr)&pb);
 	if (pb.ioResult) {
 		errno = pb.ioResult;
-		if (oflag & F_CREAT) asm {
-			lea		pb,a0
-			_PBDelete
-		}
+		if (oflag & F_CREAT)
+			PBDeleteSync((ParmBlkPtr)&pb);
 		return(NULL);
 	}
 	fp->refnum = pb.ioRefNum;
 	
 		/*  get/set file length  */
 		
-	if (oflag & F_TRUNC) asm {
-		lea		pb,a0
-		_PBSetEOF
-	}
-	else if (!(oflag & F_CREAT)) asm {
-		lea		pb,a0
-		_PBGetEOF
-	}
+	if (oflag & F_TRUNC)
+		PBSetEOFSync((ParmBlkPtr)&pb);
+	else if (!(oflag & F_CREAT))
+		PBGetEOFSync((ParmBlkPtr)&pb);
 	fp->len = (fpos_t) pb.ioMisc;
 		
 		/*  initialize rest of FILE structure  */
@@ -177,28 +158,22 @@
  */
 
 static void
-setfiletype(name, oflag)
-StringPtr name;
-int oflag;
+setfiletype(StringPtr name, int oflag)
 {
-	fileParam pb;
+	FileParam pb;
 	
 	pb.ioNamePtr = name;
 	pb.ioVRefNum = 0;
 	pb.ioFVersNum = 0;
 	pb.ioFDirIndex = 0;
-	asm {
-		lea		pb,a0
-		_PBGetFInfo
-		bmi.s	@1
+	if (PBGetFInfoSync((ParmBlkPtr)&pb) == noErr) {
+		if (oflag & F_BINARY)
+			pb.ioFlFndrInfo.fdType = _ftype;
+		else
+			pb.ioFlFndrInfo.fdType = 'TEXT';
+		pb.ioFlFndrInfo.fdCreator = _fcreator;
+		PBSetFInfoSync((ParmBlkPtr)&pb);
 	}
-	pb.ioFlFndrInfo.fdType = pb.ioFlFndrInfo.fdCreator = '????';
-	if (!(oflag & F_BINARY))
-		pb.ioFlFndrInfo.fdType = 'TEXT';
-	asm {
-		lea		pb,a0
-		_PBSetFInfo
-@1	}
 }
 
 
@@ -208,7 +183,7 @@
  */
 
 static void
-stdio_exit()
+stdio_exit(void)
 {
 	register FILE *fp;
 	int n;
@@ -224,11 +199,9 @@
  */
 
 static int
-fileio(fp, i)
-register FILE *fp;
-int i;
+fileio(FILE *fp, int i)
 {
-	ioParam pb;
+	IOParam pb;
 	
 	pb.ioRefNum = fp->refnum;
 	switch (i) {
@@ -240,10 +213,7 @@
 			pb.ioReqCount = fp->cnt;
 			pb.ioPosMode = fp->refnum > 0 ? fsFromStart : fsAtMark;
 			pb.ioPosOffset = fp->pos - fp->cnt;
-			asm {
-				lea		pb,a0
-				_PBRead
-			}
+			PBReadSync((ParmBlkPtr)&pb);
 			if (pb.ioResult == eofErr) {
 				fp->pos = pb.ioPosOffset;
 				if (fp->cnt = pb.ioActCount)
@@ -253,11 +223,7 @@
 					return(EOF);
 				}
 			}
-			if (pb.ioResult) {
-				fp->pos -= fp->cnt;
-				fp->cnt = 0;
-			}
-			else if (!fp->binary)
+			if (!pb.ioResult && !fp->binary)
 				replace(fp->ptr, fp->cnt, '\r', '\n');
 			break;
 			
@@ -269,23 +235,13 @@
 			pb.ioPosMode = fp->refnum > 0 ? fsFromStart : fsAtMark;
 			if ((pb.ioPosOffset = fp->pos - fp->cnt) > fp->len) {
 				pb.ioMisc = (Ptr) pb.ioPosOffset;
-				asm {
-					lea		pb,a0
-					_PBSetEOF
-					bmi.s	@1
-				}
+				if (PBSetEOFSync((ParmBlkPtr)&pb) != noErr)
+					break;
 			}
 			if (!fp->binary)
 				replace(fp->ptr, fp->cnt, '\n', '\r');
-			asm {
-				lea		pb,a0
-				_PBWrite
-@1			}
-			if (pb.ioResult) {
-				fp->pos -= fp->cnt;
-				fp->cnt = 0;
-			}
-			else if (pb.ioPosOffset > fp->len)
+			PBWriteSync((ParmBlkPtr)&pb);
+			if (!pb.ioResult && pb.ioPosOffset > fp->len)
 				fp->len = pb.ioPosOffset;
 			break;
 			
@@ -299,6 +255,10 @@
 		/*  done  */
 		
 	if (pb.ioResult) {
+		if (i < 2) {
+			fp->pos -= fp->cnt;
+			fp->cnt = 0;
+		}
 		fp->err = 1;
 		errno = pb.ioResult;
 		return(EOF);
@@ -308,73 +268,52 @@
 
 
 static int
-close(fp)
-register FILE *fp;
+close(FILE *fp)
 {
 	HFileParam pb;
 	Str255 buf;
 	register char *fcb = FCBSPtr + fp->refnum;
 	VCB *vcb = fcbVPtr(fcb);
 	register char *s;
+	enum { none, MFS, HFS } del = none;
 	
-	pb.ioNamePtr = buf;
-	pb.ioFRefNum = fp->refnum;
 	pb.ioVRefNum = vcb->vcbVRefNum;
-	pb.ioFVersNum = 0;
+	if (fp->remove) {
+		pb.ioNamePtr = buf;
+		pb.ioFVersNum = 0;
 	
-		/*  close temporary file - HFS  */
+			/*  close temporary file - HFS  */
+			
+		if (vcb->vcbSigWord == 0x4244) {
+			pb.ioDirID = fcbDirID(fcb);
+			s = fcbCName(fcb);
+			memcpy(buf, s, Length(s) + 1);
+			del = HFS;
+		}
 		
-	if (fp->delete && vcb->vcbSigWord == 0x4244) {
-		pb.ioDirID = fcbDirID(fcb);
-		s = fcbCName(fcb);
-		asm {
-			lea		buf,a0
-			moveq	#0,d0
-			move.b	(s),d0
-@1			move.b	(s)+,(a0)+
-			dbra	d0,@1
-			lea		pb,a0
-			_PBClose
-			bmi.s	@9
-			_PBHDelete
+			/*  close temporary file - MFS  */
+			
+		else if (vcb->vcbSigWord == 0xD2D7) {
+			for (pb.ioFDirIndex = 1; PBGetFInfoSync((ParmBlkPtr)&pb) == noErr; pb.ioFDirIndex++) {
+				if (pb.ioFRefNum == fp->refnum) {
+					del = MFS;
+					break;
+				}
+			}
 		}
 	}
 	
-		/*  close temporary file - MFS  */
-		
-	else if (fp->delete && vcb->vcbSigWord == 0xD2D7) {
-		pb.ioFDirIndex = 1;
-		do asm {
-			lea		pb,a0
-			_PBGetFInfo
-			bmi.s	@2
-			addq.w	#1,pb.ioFDirIndex
-		} while (pb.ioFRefNum != fp->refnum);
-		asm {
-			lea		pb,a0
-			_PBClose
-			bmi.s	@9
-			_PBDelete
-		}
-	}
+		/*  close file and flush volume buffer  */
 	
-		/*  normal case - just close file  */
-		
-	else {
-		asm {
-@2			lea		pb,a0
-			_PBClose
-			bmi.s	@9
-		}
+	pb.ioFRefNum = fp->refnum;
+	if (PBCloseSync((ParmBlkPtr)&pb) == noErr) {
+		if (del == MFS)
+			PBDeleteSync((ParmBlkPtr)&pb);
+		else if (del == HFS)
+			PBHDeleteSync((HParmBlkPtr)&pb);
+		pb.ioNamePtr = 0;
+		PBFlushVolSync((ParmBlkPtr)&pb);
 	}
-	
-		/*  flush volume buffer  */
-		
-	pb.ioNamePtr = 0;
-	asm {
-		lea		pb,a0
-		_PBFlshVol
-@9	}
 	return(pb.ioResult);
 }
 
@@ -385,11 +324,9 @@
  */
 
 static void
-replace(s, n, c1, c2)
-register unsigned char *s;
-register size_t n;
-register int c1, c2;
+replace(register unsigned char *s, register size_t n, register int c1, register int c2)
 {
+#pragma options(honor_register)
 	register unsigned char *t;
 	
 	for (; n && (t = memchr(s, c1, n)); s = t) {