Compare commits

...

9 Commits

Author SHA1 Message Date
Jonathan Schleifer 7d6c75d737
Merge ad0dce421b into 1ed09307a7 2024-04-12 10:29:23 -05:00
Wolfgang Thaller 1ed09307a7
Merge pull request #235 from agoode/cpp
Define "macintosh" and "Macintosh"
2024-04-12 09:29:11 -06:00
Wolfgang Thaller 99de31d45a
Merge pull request #240 from agoode/flush
Call FlushVol on close()
2024-04-11 22:25:44 -06:00
Adam Goode 5157624174 Call FlushVol on close()
This is recommended by Inside Macintosh.
2024-04-11 17:48:22 -04:00
Adam Goode 05a3f397e1 Update to latest multiversal 2024-04-11 17:48:18 -04:00
Wolfgang Thaller f31e9d99ff
Merge pull request #239 from agoode/glue
Delete glue.c
2024-04-07 02:40:47 +02:00
Adam Goode 9ea4529d12 Delete glue.c
It hasn't been used since
0e11f298ba.

The actual glue.c is in multiversal.
2024-04-05 23:31:27 -04:00
Adam Goode 085ef7e333 Define "macintosh" and "Macintosh"
See https://sourceforge.net/p/predef/wiki/OperatingSystems/.
2024-03-18 21:47:22 -04:00
Jonathan Schleifer ad0dce421b
Build cc1obj
This does not build libobjc, as it is broken in several ways. However,
it doesn't matter, since libobjc is basically not used by anyone anyway
and everybody uses a different runtime such as the ObjFW runtime.
2022-11-24 23:36:04 +01:00
9 changed files with 24 additions and 504 deletions

View File

@ -237,7 +237,7 @@ if [ $SKIP_THIRDPARTY != true ]; then
cd gcc-build cd gcc-build
export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose" export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose"
$SRC/gcc/configure --target=m68k-apple-macos --prefix=$PREFIX \ $SRC/gcc/configure --target=m68k-apple-macos --prefix=$PREFIX \
--enable-languages=c,c++ --with-arch=m68k --with-cpu=m68000 \ --enable-languages=c,c++,objc,obj-c++ --with-arch=m68k --with-cpu=m68000 \
--disable-libssp MAKEINFO=missing --disable-libssp MAKEINFO=missing
# There seems to be a build failure in parallel builds; ignore any errors and try again without -j8. # There seems to be a build failure in parallel builds; ignore any errors and try again without -j8.
make -j8 || make make -j8 || make
@ -280,7 +280,7 @@ if [ $SKIP_THIRDPARTY != true ]; then
cd gcc-build-ppc cd gcc-build-ppc
export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose" export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose"
$SRC/gcc/configure --target=powerpc-apple-macos --prefix=$PREFIX \ $SRC/gcc/configure --target=powerpc-apple-macos --prefix=$PREFIX \
--enable-languages=c,c++ --disable-libssp --disable-lto MAKEINFO=missing --enable-languages=c,c++,objc,obj-c++ --disable-libssp --disable-lto MAKEINFO=missing
make -j8 make -j8
make install make install
unset target_configargs unset target_configargs

View File

@ -21,11 +21,11 @@
"multiversal": { "multiversal": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1703617805, "lastModified": 1712682701,
"narHash": "sha256-GngLWR9i+hC7hJ+ZkKlRK4K63lIJ4D/CMXZwefcVAqw=", "narHash": "sha256-/bHk7tU3+xxIs4YGLUyJVG9RsVO23ek41R//eO1F22Q=",
"owner": "autc04", "owner": "autc04",
"repo": "multiversal", "repo": "multiversal",
"rev": "27c08c654bbd48d23f025741e3a584b59374904a", "rev": "32dff28d1d618972cc2f544c86ee017b6464fa89",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@ -1126,7 +1126,6 @@ configure-target: \
maybe-configure-target-libbacktrace \ maybe-configure-target-libbacktrace \
maybe-configure-target-libquadmath \ maybe-configure-target-libquadmath \
maybe-configure-target-libgfortran \ maybe-configure-target-libgfortran \
maybe-configure-target-libobjc \
maybe-configure-target-libgo \ maybe-configure-target-libgo \
maybe-configure-target-libphobos \ maybe-configure-target-libphobos \
maybe-configure-target-libtermcap \ maybe-configure-target-libtermcap \
@ -1316,7 +1315,6 @@ all-target: maybe-all-target-libbacktrace
@endif target-libbacktrace-no-bootstrap @endif target-libbacktrace-no-bootstrap
all-target: maybe-all-target-libquadmath all-target: maybe-all-target-libquadmath
all-target: maybe-all-target-libgfortran all-target: maybe-all-target-libgfortran
all-target: maybe-all-target-libobjc
all-target: maybe-all-target-libgo all-target: maybe-all-target-libgo
@if target-libphobos-no-bootstrap @if target-libphobos-no-bootstrap
all-target: maybe-all-target-libphobos all-target: maybe-all-target-libphobos
@ -1419,7 +1417,6 @@ info-target: maybe-info-target-libgcc
info-target: maybe-info-target-libbacktrace info-target: maybe-info-target-libbacktrace
info-target: maybe-info-target-libquadmath info-target: maybe-info-target-libquadmath
info-target: maybe-info-target-libgfortran info-target: maybe-info-target-libgfortran
info-target: maybe-info-target-libobjc
info-target: maybe-info-target-libgo info-target: maybe-info-target-libgo
info-target: maybe-info-target-libphobos info-target: maybe-info-target-libphobos
info-target: maybe-info-target-libtermcap info-target: maybe-info-target-libtermcap
@ -1509,7 +1506,6 @@ dvi-target: maybe-dvi-target-libgcc
dvi-target: maybe-dvi-target-libbacktrace dvi-target: maybe-dvi-target-libbacktrace
dvi-target: maybe-dvi-target-libquadmath dvi-target: maybe-dvi-target-libquadmath
dvi-target: maybe-dvi-target-libgfortran dvi-target: maybe-dvi-target-libgfortran
dvi-target: maybe-dvi-target-libobjc
dvi-target: maybe-dvi-target-libgo dvi-target: maybe-dvi-target-libgo
dvi-target: maybe-dvi-target-libphobos dvi-target: maybe-dvi-target-libphobos
dvi-target: maybe-dvi-target-libtermcap dvi-target: maybe-dvi-target-libtermcap
@ -1599,7 +1595,6 @@ pdf-target: maybe-pdf-target-libgcc
pdf-target: maybe-pdf-target-libbacktrace pdf-target: maybe-pdf-target-libbacktrace
pdf-target: maybe-pdf-target-libquadmath pdf-target: maybe-pdf-target-libquadmath
pdf-target: maybe-pdf-target-libgfortran pdf-target: maybe-pdf-target-libgfortran
pdf-target: maybe-pdf-target-libobjc
pdf-target: maybe-pdf-target-libgo pdf-target: maybe-pdf-target-libgo
pdf-target: maybe-pdf-target-libphobos pdf-target: maybe-pdf-target-libphobos
pdf-target: maybe-pdf-target-libtermcap pdf-target: maybe-pdf-target-libtermcap
@ -1689,7 +1684,6 @@ html-target: maybe-html-target-libgcc
html-target: maybe-html-target-libbacktrace html-target: maybe-html-target-libbacktrace
html-target: maybe-html-target-libquadmath html-target: maybe-html-target-libquadmath
html-target: maybe-html-target-libgfortran html-target: maybe-html-target-libgfortran
html-target: maybe-html-target-libobjc
html-target: maybe-html-target-libgo html-target: maybe-html-target-libgo
html-target: maybe-html-target-libphobos html-target: maybe-html-target-libphobos
html-target: maybe-html-target-libtermcap html-target: maybe-html-target-libtermcap
@ -1779,7 +1773,6 @@ TAGS-target: maybe-TAGS-target-libgcc
TAGS-target: maybe-TAGS-target-libbacktrace TAGS-target: maybe-TAGS-target-libbacktrace
TAGS-target: maybe-TAGS-target-libquadmath TAGS-target: maybe-TAGS-target-libquadmath
TAGS-target: maybe-TAGS-target-libgfortran TAGS-target: maybe-TAGS-target-libgfortran
TAGS-target: maybe-TAGS-target-libobjc
TAGS-target: maybe-TAGS-target-libgo TAGS-target: maybe-TAGS-target-libgo
TAGS-target: maybe-TAGS-target-libphobos TAGS-target: maybe-TAGS-target-libphobos
TAGS-target: maybe-TAGS-target-libtermcap TAGS-target: maybe-TAGS-target-libtermcap
@ -1869,7 +1862,6 @@ install-info-target: maybe-install-info-target-libgcc
install-info-target: maybe-install-info-target-libbacktrace install-info-target: maybe-install-info-target-libbacktrace
install-info-target: maybe-install-info-target-libquadmath install-info-target: maybe-install-info-target-libquadmath
install-info-target: maybe-install-info-target-libgfortran install-info-target: maybe-install-info-target-libgfortran
install-info-target: maybe-install-info-target-libobjc
install-info-target: maybe-install-info-target-libgo install-info-target: maybe-install-info-target-libgo
install-info-target: maybe-install-info-target-libphobos install-info-target: maybe-install-info-target-libphobos
install-info-target: maybe-install-info-target-libtermcap install-info-target: maybe-install-info-target-libtermcap
@ -2049,7 +2041,6 @@ install-pdf-target: maybe-install-pdf-target-libgcc
install-pdf-target: maybe-install-pdf-target-libbacktrace install-pdf-target: maybe-install-pdf-target-libbacktrace
install-pdf-target: maybe-install-pdf-target-libquadmath install-pdf-target: maybe-install-pdf-target-libquadmath
install-pdf-target: maybe-install-pdf-target-libgfortran install-pdf-target: maybe-install-pdf-target-libgfortran
install-pdf-target: maybe-install-pdf-target-libobjc
install-pdf-target: maybe-install-pdf-target-libgo install-pdf-target: maybe-install-pdf-target-libgo
install-pdf-target: maybe-install-pdf-target-libphobos install-pdf-target: maybe-install-pdf-target-libphobos
install-pdf-target: maybe-install-pdf-target-libtermcap install-pdf-target: maybe-install-pdf-target-libtermcap
@ -2139,7 +2130,6 @@ install-html-target: maybe-install-html-target-libgcc
install-html-target: maybe-install-html-target-libbacktrace install-html-target: maybe-install-html-target-libbacktrace
install-html-target: maybe-install-html-target-libquadmath install-html-target: maybe-install-html-target-libquadmath
install-html-target: maybe-install-html-target-libgfortran install-html-target: maybe-install-html-target-libgfortran
install-html-target: maybe-install-html-target-libobjc
install-html-target: maybe-install-html-target-libgo install-html-target: maybe-install-html-target-libgo
install-html-target: maybe-install-html-target-libphobos install-html-target: maybe-install-html-target-libphobos
install-html-target: maybe-install-html-target-libtermcap install-html-target: maybe-install-html-target-libtermcap
@ -2229,7 +2219,6 @@ installcheck-target: maybe-installcheck-target-libgcc
installcheck-target: maybe-installcheck-target-libbacktrace installcheck-target: maybe-installcheck-target-libbacktrace
installcheck-target: maybe-installcheck-target-libquadmath installcheck-target: maybe-installcheck-target-libquadmath
installcheck-target: maybe-installcheck-target-libgfortran installcheck-target: maybe-installcheck-target-libgfortran
installcheck-target: maybe-installcheck-target-libobjc
installcheck-target: maybe-installcheck-target-libgo installcheck-target: maybe-installcheck-target-libgo
installcheck-target: maybe-installcheck-target-libphobos installcheck-target: maybe-installcheck-target-libphobos
installcheck-target: maybe-installcheck-target-libtermcap installcheck-target: maybe-installcheck-target-libtermcap
@ -2319,7 +2308,6 @@ mostlyclean-target: maybe-mostlyclean-target-libgcc
mostlyclean-target: maybe-mostlyclean-target-libbacktrace mostlyclean-target: maybe-mostlyclean-target-libbacktrace
mostlyclean-target: maybe-mostlyclean-target-libquadmath mostlyclean-target: maybe-mostlyclean-target-libquadmath
mostlyclean-target: maybe-mostlyclean-target-libgfortran mostlyclean-target: maybe-mostlyclean-target-libgfortran
mostlyclean-target: maybe-mostlyclean-target-libobjc
mostlyclean-target: maybe-mostlyclean-target-libgo mostlyclean-target: maybe-mostlyclean-target-libgo
mostlyclean-target: maybe-mostlyclean-target-libphobos mostlyclean-target: maybe-mostlyclean-target-libphobos
mostlyclean-target: maybe-mostlyclean-target-libtermcap mostlyclean-target: maybe-mostlyclean-target-libtermcap
@ -2409,7 +2397,6 @@ clean-target: maybe-clean-target-libgcc
clean-target: maybe-clean-target-libbacktrace clean-target: maybe-clean-target-libbacktrace
clean-target: maybe-clean-target-libquadmath clean-target: maybe-clean-target-libquadmath
clean-target: maybe-clean-target-libgfortran clean-target: maybe-clean-target-libgfortran
clean-target: maybe-clean-target-libobjc
clean-target: maybe-clean-target-libgo clean-target: maybe-clean-target-libgo
clean-target: maybe-clean-target-libphobos clean-target: maybe-clean-target-libphobos
clean-target: maybe-clean-target-libtermcap clean-target: maybe-clean-target-libtermcap
@ -2499,7 +2486,6 @@ distclean-target: maybe-distclean-target-libgcc
distclean-target: maybe-distclean-target-libbacktrace distclean-target: maybe-distclean-target-libbacktrace
distclean-target: maybe-distclean-target-libquadmath distclean-target: maybe-distclean-target-libquadmath
distclean-target: maybe-distclean-target-libgfortran distclean-target: maybe-distclean-target-libgfortran
distclean-target: maybe-distclean-target-libobjc
distclean-target: maybe-distclean-target-libgo distclean-target: maybe-distclean-target-libgo
distclean-target: maybe-distclean-target-libphobos distclean-target: maybe-distclean-target-libphobos
distclean-target: maybe-distclean-target-libtermcap distclean-target: maybe-distclean-target-libtermcap
@ -2589,7 +2575,6 @@ maintainer-clean-target: maybe-maintainer-clean-target-libgcc
maintainer-clean-target: maybe-maintainer-clean-target-libbacktrace maintainer-clean-target: maybe-maintainer-clean-target-libbacktrace
maintainer-clean-target: maybe-maintainer-clean-target-libquadmath maintainer-clean-target: maybe-maintainer-clean-target-libquadmath
maintainer-clean-target: maybe-maintainer-clean-target-libgfortran maintainer-clean-target: maybe-maintainer-clean-target-libgfortran
maintainer-clean-target: maybe-maintainer-clean-target-libobjc
maintainer-clean-target: maybe-maintainer-clean-target-libgo maintainer-clean-target: maybe-maintainer-clean-target-libgo
maintainer-clean-target: maybe-maintainer-clean-target-libphobos maintainer-clean-target: maybe-maintainer-clean-target-libphobos
maintainer-clean-target: maybe-maintainer-clean-target-libtermcap maintainer-clean-target: maybe-maintainer-clean-target-libtermcap
@ -2737,7 +2722,6 @@ check-target: \
maybe-check-target-libbacktrace \ maybe-check-target-libbacktrace \
maybe-check-target-libquadmath \ maybe-check-target-libquadmath \
maybe-check-target-libgfortran \ maybe-check-target-libgfortran \
maybe-check-target-libobjc \
maybe-check-target-libgo \ maybe-check-target-libgo \
maybe-check-target-libphobos \ maybe-check-target-libphobos \
maybe-check-target-libtermcap \ maybe-check-target-libtermcap \
@ -2929,7 +2913,6 @@ install-target: \
maybe-install-target-libbacktrace \ maybe-install-target-libbacktrace \
maybe-install-target-libquadmath \ maybe-install-target-libquadmath \
maybe-install-target-libgfortran \ maybe-install-target-libgfortran \
maybe-install-target-libobjc \
maybe-install-target-libgo \ maybe-install-target-libgo \
maybe-install-target-libphobos \ maybe-install-target-libphobos \
maybe-install-target-libtermcap \ maybe-install-target-libtermcap \
@ -3039,7 +3022,6 @@ install-strip-target: \
maybe-install-strip-target-libbacktrace \ maybe-install-strip-target-libbacktrace \
maybe-install-strip-target-libquadmath \ maybe-install-strip-target-libquadmath \
maybe-install-strip-target-libgfortran \ maybe-install-strip-target-libgfortran \
maybe-install-strip-target-libobjc \
maybe-install-strip-target-libgo \ maybe-install-strip-target-libgo \
maybe-install-strip-target-libphobos \ maybe-install-strip-target-libphobos \
maybe-install-strip-target-libtermcap \ maybe-install-strip-target-libtermcap \

View File

@ -16,3 +16,11 @@
#undef CPP_SPEC #undef CPP_SPEC
#define CPP_SPEC "-Wno-trigraphs" #define CPP_SPEC "-Wno-trigraphs"
#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
builtin_define ("macintosh"); \
builtin_define ("Macintosh"); \
} \
while (0)

View File

@ -152,6 +152,8 @@
builtin_define ("__PPC__"); \ builtin_define ("__PPC__"); \
builtin_define ("__POWERPC__"); \ builtin_define ("__POWERPC__"); \
builtin_define ("__NATURAL_ALIGNMENT__"); \ builtin_define ("__NATURAL_ALIGNMENT__"); \
builtin_define ("macintosh"); \
builtin_define ("Macintosh"); \
builtin_assert ("system=macos"); \ builtin_assert ("system=macos"); \
builtin_assert ("cpu=powerpc"); \ builtin_assert ("cpu=powerpc"); \
builtin_assert ("machine=powerpc"); \ builtin_assert ("machine=powerpc"); \

View File

@ -30,7 +30,6 @@ if(CMAKE_SYSTEM_NAME MATCHES Retro68)
PoorMansDebugging.h PoorMansDebugging.h
MultiSegApp.c MultiSegApp.c
LoadSeg.s LoadSeg.s
# glue.c
qdglobals.c qdglobals.c
Retro68.r Retro68.r
Retro68APPL.r Retro68APPL.r

View File

@ -1,477 +0,0 @@
/*
Copyright 2015 Wolfgang Thaller.
This file is part of Retro68.
Retro68 is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Retro68 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>.
*/
#include <MacMemory.h>
#include <Files.h>
#include <string.h>
#include <Files.h>
#include <Devices.h>
#include <Resources.h>
#include <SegLoad.h>
#include <LowMem.h>
#pragma parameter __D0 _GetPtrSize(__A0)
pascal long _GetPtrSize(Ptr ptr) = { 0xA021 };
pascal Size GetPtrSize(Ptr ptr)
{
long tmp = _GetPtrSize(ptr);
if(tmp > 0)
return (Size) tmp;
else
return 0;
}
#pragma parameter __D0 _GetHandleSize(__A0)
pascal long _GetHandleSize(Handle h) = { 0xA025 };
pascal Size GetHandleSize(Handle h)
{
long tmp = _GetHandleSize(h);
if(tmp > 0)
return (Size) tmp;
else
return 0;
}
#pragma parameter __A0 _PtrToHand(__A0, __D0)
pascal Handle _PtrToHand(const void *srcPtr, long size) = { 0xA9E3 };
EXTERN_API( OSErr )
PtrToHand(
const void * srcPtr,
Handle * dstHndl,
long size)
{
*dstHndl = _PtrToHand(srcPtr, size);
return MemError();
}
#pragma parameter __A0 _HandToHand(__A0)
pascal Handle _HandToHand(Handle h) = { 0xA9E1 };
EXTERN_API( OSErr )
HandToHand(Handle * theHndl)
{
*theHndl = _HandToHand(*theHndl);
return MemError();
}
#pragma parameter __D0 _StringToNum(__A0)
pascal long _StringToNum(ConstStr255Param theString) = { 0x3F3C, 0x0001, 0xA9EE };
EXTERN_API( void )
StringToNum(
ConstStr255Param theString,
long * theNum)
{
*theNum = _StringToNum(theString);
}
#pragma parameter _NumToString(__D0, __A0)
pascal long _NumToString(long theNum, ConstStr255Param theString) = { 0x4267, 0xA9EE };
EXTERN_API( void )
NumToString(
long theNum,
Str255 theString)
{
_NumToString(theNum, theString);
}
#pragma parameter __D0 _CmpString(__A0, __A1, __D0)
pascal long _CmpString(const char *a, const char *b, long lens) = { 0xA03C };
#pragma parameter __D0 _CmpStringCase(__A0, __A1, __D0)
pascal long _CmpStringCase(const char *a, const char *b, long lens) = { 0xA43C };
#pragma parameter __D0 _CmpStringMarks(__A0, __A1, __D0)
pascal long _CmpStringMarks(const char *a, const char *b, long lens) = { 0xA23C };
#pragma parameter __D0 _CmpStringCaseMarks(__A0, __A1, __D0)
pascal long _CmpStringCaseMarks(const char *a, const char *b, long lens) = { 0xA63C };
EXTERN_API( Boolean )
EqualString(
ConstStr255Param str1,
ConstStr255Param str2,
Boolean caseSensitive,
Boolean diacSensitive)
{
long lens = (str1[0] << 16) | str2[0];
long result;
if(caseSensitive)
{
if(diacSensitive)
result = _CmpStringCase(str1+1, str2+1, lens);
else
result = _CmpStringCaseMarks(str1+1, str2+1, lens);
}
else
{
if(diacSensitive)
result = _CmpString(str1+1, str2+1, lens);
else
result = _CmpStringMarks(str1+1, str2+1, lens);
}
return result == 0;
}
pascal void GetIndString(Str255 theString, short strListID, short index)
{
Handle h = GetResource('STR#', strListID);
theString[0] = 0;
if(index > *(short*)*h)
return;
unsigned char *p = ((unsigned char*) *h) + 2;
while(--index > 0)
p += *p + 1;
if(index == 0)
memcpy(theString, p, p[0]+1);
}
EXTERN_API( UniversalProcPtr )
NGetTrapAddress(
UInt16 trapNum,
TrapType tTyp)
{
if(tTyp == kOSTrapType)
return GetOSTrapAddress(trapNum);
else
return GetToolTrapAddress(trapNum);
}
EXTERN_API( void )
CountAppFiles(
short * message,
short * count)
{
Handle h = LMGetAppParmHandle();
if(!GetHandleSize(h))
return;
*message = ((short*)*h)[0];
*count = ((short*)*h)[1];
}
static AppFile* AppFilePtr(short index)
{
Handle h = LMGetAppParmHandle();
if(!GetHandleSize(h))
return NULL;
short count = ((short*)*h)[1];
if(index < 1 || index > count)
return NULL;
index--;
Ptr p = *h + 4;
while(index)
{
AppFile *f = (AppFile*) p;
p += (8 + 1 + f->fName[0] + 1) & ~1;
}
return (AppFile*) p;
}
EXTERN_API( void )
GetAppFiles(
short index,
AppFile * theFile)
{
AppFile *ptr = AppFilePtr(index);
if(ptr)
memcpy(theFile, ptr, 8 + 1 + ptr->fName[0]);
}
EXTERN_API( void )
ClrAppFiles(short index)
{
AppFile *ptr = AppFilePtr(index);
if(ptr)
ptr->fType = 0;
}
pascal OSErr SetVol (ConstStr63Param volName, short vRefNum)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.volumeParam.ioNamePtr = (StringPtr)volName;
pb.volumeParam.ioVRefNum = vRefNum;
return PBSetVolSync(&pb);
}
EXTERN_API( OSErr )
GetVol(
StringPtr volName,
short * vRefNum)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.volumeParam.ioNamePtr = volName;
OSErr err = PBGetVolSync(&pb);
*vRefNum = pb.volumeParam.ioVRefNum;
return err;
}
pascal OSErr UnmountVol (ConstStr63Param volName, short vRefNum)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.volumeParam.ioNamePtr = (StringPtr)volName;
pb.volumeParam.ioVRefNum = vRefNum;
return PBUnmountVolImmed(&pb);
}
pascal OSErr Eject (ConstStr63Param volName, short vRefNum)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.volumeParam.ioNamePtr = (StringPtr)volName;
pb.volumeParam.ioVRefNum = vRefNum;
return PBEject(&pb);
}
pascal OSErr FSOpen (ConstStr255Param fileName, short vRefNum, short *refNum)
{
OSErr err;
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioNamePtr = (StringPtr)fileName;
pb.ioParam.ioVRefNum = vRefNum;
// Try newer OpenDF first, because it does not open drivers
err = PBOpenDFSync(&pb);
if (err == paramErr) {
// OpenDF not implemented, so use regular Open.
err = PBOpenSync(&pb);
}
*refNum = pb.ioParam.ioRefNum;
return err;
}
pascal OSErr OpenDF (ConstStr255Param fileName, short vRefNum, short *refNum)
{
return FSOpen(fileName, vRefNum, refNum);
}
pascal OSErr FSClose (short refNum)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
return PBCloseSync(&pb);
}
pascal OSErr FSRead (short refNum, long *count, void *buffPtr)
{
OSErr err;
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
pb.ioParam.ioBuffer = buffPtr;
pb.ioParam.ioReqCount = *count;
err = PBReadSync(&pb);
*count = pb.ioParam.ioActCount;
return err;
}
pascal OSErr FSWrite (short refNum, long *count, const void *buffPtr)
{
OSErr err;
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
pb.ioParam.ioBuffer = (void *)buffPtr;
pb.ioParam.ioReqCount = *count;
err = PBWriteSync(&pb);
*count = pb.ioParam.ioActCount;
return err;
}
pascal OSErr GetEOF (short refNum, long *logEOF)
{
OSErr err;
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
err = PBGetEOFSync(&pb);
*logEOF = (long)pb.ioParam.ioMisc;
return err;
}
pascal OSErr SetEOF (short refNum, long logEOF)
{
OSErr err;
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
pb.ioParam.ioMisc = (Ptr)logEOF;
return PBGetEOFSync(&pb);
}
pascal OSErr GetFPos (short refNum, long *filePos)
{
OSErr err;
ParamBlockRec pb;
pb.ioParam.ioRefNum = refNum;
err = PBGetFPosSync(&pb);
*filePos = pb.ioParam.ioPosOffset;
return err;
}
pascal OSErr SetFPos (short refNum, short posMode, long posOff)
{
ParamBlockRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioRefNum = refNum;
pb.ioParam.ioPosMode = posMode;
pb.ioParam.ioPosOffset = posOff;
return PBSetFPosSync(&pb);
}
pascal OSErr Create (ConstStr255Param fileName, short vRefNum, OSType creator,
OSType fileType)
{
ParamBlockRec pb;
OSErr err;
memset(&pb, 0, sizeof(pb));
pb.fileParam.ioVRefNum = vRefNum;
pb.fileParam.ioNamePtr = (StringPtr)fileName;
// create the file
err = PBCreateSync(&pb);
if (err != noErr) return err;
// get previous finder info
err = PBGetFInfoSync(&pb);
if (err != noErr) return err;
// clear directory index
pb.fileParam.ioFDirIndex = 0;
// copy finder info words
pb.fileParam.ioFlFndrInfo.fdType = fileType;
pb.fileParam.ioFlFndrInfo.fdCreator = creator;
// save finder info
return PBSetFInfoSync(&pb);
}
pascal OSErr GetWDInfo(short wdRefNum, short *vRefNum, long *dirID,
long *procID)
{
OSErr err;
WDPBRec pb;
memset(&pb, 0, sizeof(pb));
pb.ioVRefNum = wdRefNum;
err = PBGetWDInfo(&pb, false);
*vRefNum = pb.ioWDVRefNum;
*dirID = pb.ioWDDirID;
*procID = pb.ioWDProcID;
return err;
}
EXTERN_API( OSErr )
GetFInfo(
ConstStr255Param fileName,
short vRefNum,
FInfo * fndrInfo)
{
ParamBlockRec pb;
OSErr err;
memset(&pb, 0, sizeof(pb));
pb.fileParam.ioVRefNum = vRefNum;
pb.fileParam.ioNamePtr = (StringPtr)fileName;
err = PBGetFInfoSync(&pb);
*fndrInfo = pb.fileParam.ioFlFndrInfo;
return err;
}
EXTERN_API( OSErr )
HDelete(
short vRefNum,
long dirID,
ConstStr255Param fileName)
{
HParamBlockRec pb;
pb.fileParam.ioVRefNum = vRefNum;
pb.fileParam.ioNamePtr = (StringPtr)fileName;
pb.fileParam.ioDirID = dirID;
pb.fileParam.ioFVersNum = 0; // ???
return PBHDeleteSync(&pb);
}
EXTERN_API( OSErr )
HGetFInfo(
short vRefNum,
long dirID,
ConstStr255Param fileName,
FInfo * fndrInfo)
{
HParamBlockRec pb;
OSErr err;
pb.fileParam.ioVRefNum = vRefNum;
pb.fileParam.ioNamePtr = (StringPtr)fileName;
pb.fileParam.ioFVersNum = 0; // ???
pb.fileParam.ioFDirIndex = 0;
pb.fileParam.ioDirID = dirID;
err = PBHGetFInfoSync(&pb);
*fndrInfo = pb.fileParam.ioFlFndrInfo;
return err;
}
EXTERN_API( OSErr )
HSetFInfo(
short vRefNum,
long dirID,
ConstStr255Param fileName,
const FInfo * fndrInfo)
{
HParamBlockRec pb;
OSErr err;
pb.fileParam.ioVRefNum = vRefNum;
pb.fileParam.ioNamePtr = (StringPtr)fileName;
pb.fileParam.ioFVersNum = 0; // ???
pb.fileParam.ioFDirIndex = 0;
pb.fileParam.ioDirID = dirID;
pb.fileParam.ioFlFndrInfo = *fndrInfo;
return PBHSetFInfoSync(&pb);
}
pascal OSErr OpenDriver(ConstStr255Param name, short *drvrRefNum)
{
ParamBlockRec pb;
OSErr err;
memset(&pb, 0, sizeof(pb));
pb.ioParam.ioNamePtr = (StringPtr)name;
err = PBOpenSync(&pb);
*drvrRefNum = pb.ioParam.ioRefNum;
return err;
}
pascal OSErr CloseDriver(short refNum)
{
return FSClose(refNum);
}

View File

@ -135,8 +135,14 @@ int _open_r(struct _reent *reent, const char* name, int flags, int mode)
int _close_r(struct _reent *reent, int fd) int _close_r(struct _reent *reent, int fd)
{ {
if(fd >= kMacRefNumOffset) if(fd >= kMacRefNumOffset) {
FSClose(fd - kMacRefNumOffset); short refNum = fd - kMacRefNumOffset;
short vRefNum;
OSErr err = GetVRefNum(refNum, &vRefNum);
FSClose(refNum);
if (err == noErr)
FlushVol(NULL, vRefNum);
}
return 0; return 0;
} }

@ -1 +1 @@
Subproject commit 27c08c654bbd48d23f025741e3a584b59374904a Subproject commit 32dff28d1d618972cc2f544c86ee017b6464fa89