new system types on darwin: updated bootstrap binary. -- noch.

Former-commit-id: 63a0f765a7
This commit is contained in:
norayr 2015-03-17 17:24:05 +08:00
parent d4acb76183
commit 73369a589f
6 changed files with 153 additions and 151 deletions

View file

@ -1 +1 @@
/opt/voc-1.1/lib /Users/noch/local/voc-1.1/lib

View file

@ -76,21 +76,21 @@ stage2:
stage3: stage3:
$(VOCSTATIC0) -siapxPS SYSTEM.Mod $(VOCSTATIC0) -siapxPS SYSTEM.Mod
$(VOCSTATIC0) -sPS Args.Mod Console.Mod Unix.Mod $(VOCSTATIC0) -sPFS Args.Mod Console.Mod Unix.Mod
sed -i.tmp "s#/opt#$(PRF)#g" src/voc/prf.Mod sed -i.tmp "s#/opt#$(PRF)#g" src/voc/prf.Mod
$(VOCSTATIC0) -sPS prf.Mod $(VOCSTATIC0) -sPFS prf.Mod
$(VOCSTATIC0) -sPS Strings.Mod architecture.Mod version.Mod Kernel0.Mod Modules.Mod $(VOCSTATIC0) -sPFS Strings.Mod architecture.Mod version.Mod Kernel0.Mod Modules.Mod
$(VOCSTATIC0) -sxPS Files0.Mod $(VOCSTATIC0) -sxPFS Files0.Mod
$(VOCSTATIC0) -sPS Reals.Mod Texts0.Mod $(VOCSTATIC0) -sPFS Reals.Mod Texts0.Mod
$(VOCSTATIC0) -sPS vt100.Mod $(VOCSTATIC0) -sPFS vt100.Mod
# build the compiler # build the compiler
stage4: stage4:
$(VOCSTATIC0) -sPS errors.Mod $(VOCSTATIC0) -sPFS errors.Mod
$(VOCSTATIC0) -sPS extTools.Mod $(VOCSTATIC0) -sPFS extTools.Mod
$(VOCSTATIC0) -sPS OPM.cmdln.Mod $(VOCSTATIC0) -sPFS OPM.cmdln.Mod
$(VOCSTATIC0) -sxPS OPS.Mod $(VOCSTATIC0) -sxPFS OPS.Mod
$(VOCSTATIC0) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod $(VOCSTATIC0) -sPFS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod
$(VOCSTATIC0) -smPS voc.Mod $(VOCSTATIC0) -smPS voc.Mod
$(VOCSTATIC0) -smPS BrowserCmd.Mod $(VOCSTATIC0) -smPS BrowserCmd.Mod
$(VOCSTATIC0) -smPS OCatCmd.Mod $(VOCSTATIC0) -smPS OCatCmd.Mod
@ -118,27 +118,27 @@ stage5:
# build all library files # build all library files
stage6: stage6:
#v4 libs #v4 libs
$(VOCSTATIC) -sP Kernel.Mod $(VOCSTATIC) -sPF Kernel.Mod
$(VOCSTATIC) -sP Files.Mod $(VOCSTATIC) -sPF Files.Mod
$(VOCSTATIC) -sP Texts.Mod $(VOCSTATIC) -sPF Texts.Mod
$(VOCSTATIC) -sP Printer.Mod $(VOCSTATIC) -sPF Printer.Mod
$(VOCSTATIC) -sP Strings.Mod $(VOCSTATIC) -sPF Strings.Mod
$(VOCSTATIC) -sP Sets.Mod $(VOCSTATIC) -sPF Sets.Mod
$(VOCSTATIC) -sP Sets0.Mod $(VOCSTATIC) -sPF Sets0.Mod
$(VOCSTATIC) -sP Oberon.Mod $(VOCSTATIC) -sPF Oberon.Mod
#ooc libs #ooc libs
$(VOCSTATIC) -sP oocAscii.Mod $(VOCSTATIC) -sPF oocAscii.Mod
$(VOCSTATIC) -sP oocStrings.Mod $(VOCSTATIC) -sPF oocStrings.Mod
$(VOCSTATIC) -sP oocStrings2.Mod $(VOCSTATIC) -sPF oocStrings2.Mod
$(VOCSTATIC) -sP oocOakStrings.Mod $(VOCSTATIC) -sPF oocOakStrings.Mod
$(VOCSTATIC) -sP oocCharClass.Mod $(VOCSTATIC) -sPF oocCharClass.Mod
$(VOCSTATIC) -sP oocConvTypes.Mod $(VOCSTATIC) -sPF oocConvTypes.Mod
$(VOCSTATIC) -sP oocIntConv.Mod $(VOCSTATIC) -sPF oocIntConv.Mod
$(VOCSTATIC) -sP oocIntStr.Mod $(VOCSTATIC) -sPF oocIntStr.Mod
$(VOCSTATIC) -sP oocSysClock.Mod $(VOCSTATIC) -sPF oocSysClock.Mod
$(VOCSTATIC) -sP oocTime.Mod $(VOCSTATIC) -sPF oocTime.Mod
$(VOCSTATIC) -sP oocRandomNumbers.Mod $(VOCSTATIC) -sPF oocRandomNumbers.Mod
# $(VOCSTATIC) -s oocLongStrings.Mod # $(VOCSTATIC) -s oocLongStrings.Mod
# $(CC) oocLongStrings.c # $(CC) oocLongStrings.c
# $(VOCSTATIC) -s oocMsg.Mod # $(VOCSTATIC) -s oocMsg.Mod
@ -146,115 +146,115 @@ stage6:
#ooc2 libs #ooc2 libs
$(VOCSTATIC) -sP ooc2Strings.Mod $(VOCSTATIC) -sPF ooc2Strings.Mod
$(VOCSTATIC) -sP ooc2Ascii.Mod $(VOCSTATIC) -sPF ooc2Ascii.Mod
$(VOCSTATIC) -sP ooc2CharClass.Mod $(VOCSTATIC) -sPF ooc2CharClass.Mod
$(VOCSTATIC) -sP ooc2ConvTypes.Mod $(VOCSTATIC) -sPF ooc2ConvTypes.Mod
$(VOCSTATIC) -sP ooc2IntConv.Mod $(VOCSTATIC) -sPF ooc2IntConv.Mod
$(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sPF ooc2IntStr.Mod
$(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sPF ooc2Real0.Mod
#ooc libs #ooc libs
$(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod $(VOCSTATIC) -sPF oocLowReal.Mod oocLowLReal.Mod
$(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sPF oocRealMath.Mod oocOakMath.Mod
$(VOCSTATIC) -sP oocLRealMath.Mod $(VOCSTATIC) -sPF oocLRealMath.Mod
$(VOCSTATIC) -sP oocLongInts.Mod $(VOCSTATIC) -sPF oocLongInts.Mod
$(VOCSTATIC) -sP oocComplexMath.Mod oocLComplexMath.Mod $(VOCSTATIC) -sPF oocComplexMath.Mod oocLComplexMath.Mod
$(VOCSTATIC) -sP oocLRealConv.Mod oocLRealStr.Mod $(VOCSTATIC) -sPF oocLRealConv.Mod oocLRealStr.Mod
$(VOCSTATIC) -sP oocRealConv.Mod oocRealStr.Mod $(VOCSTATIC) -sPF oocRealConv.Mod oocRealStr.Mod
$(VOCSTATIC) -sP oocMsg.Mod oocChannel.Mod $(VOCSTATIC) -sPF oocMsg.Mod oocChannel.Mod
$(VOCSTATIC) -sP oocStrings2.Mod oocRts.Mod oocFilenames.Mod $(VOCSTATIC) -sPF oocStrings2.Mod oocRts.Mod oocFilenames.Mod
$(VOCSTATIC) -sP oocTextRider.Mod oocBinaryRider.Mod oocJulianDay.Mod $(VOCSTATIC) -sPF oocTextRider.Mod oocBinaryRider.Mod oocJulianDay.Mod
$(VOCSTATIC) -sP oocFilenames.Mod $(VOCSTATIC) -sPF oocFilenames.Mod
$(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sPF oocwrapperlibc.Mod
$(VOCSTATIC) -sP oocC.Mod $(VOCSTATIC) -sPF oocC.Mod
#Ulm's Oberon system libs #Ulm's Oberon system libs
$(VOCSTATIC) -sP ulmSys.Mod $(VOCSTATIC) -sPF ulmSys.Mod
$(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sPF ulmSYSTEM.Mod
$(VOCSTATIC) -sP ulmASCII.Mod $(VOCSTATIC) -sPF ulmASCII.Mod
$(VOCSTATIC) -sP ulmSets.Mod $(VOCSTATIC) -sPF ulmSets.Mod
$(VOCSTATIC) -sP ulmObjects.Mod $(VOCSTATIC) -sPF ulmObjects.Mod
$(VOCSTATIC) -sP ulmDisciplines.Mod $(VOCSTATIC) -sPF ulmDisciplines.Mod
$(VOCSTATIC) -sP ulmPriorities.Mod $(VOCSTATIC) -sPF ulmPriorities.Mod
$(VOCSTATIC) -sP ulmServices.Mod $(VOCSTATIC) -sPF ulmServices.Mod
$(VOCSTATIC) -sP ulmEvents.Mod $(VOCSTATIC) -sPF ulmEvents.Mod
$(VOCSTATIC) -sP ulmResources.Mod $(VOCSTATIC) -sPF ulmResources.Mod
$(VOCSTATIC) -sP ulmForwarders.Mod $(VOCSTATIC) -sPF ulmForwarders.Mod
$(VOCSTATIC) -sP ulmRelatedEvents.Mod $(VOCSTATIC) -sPF ulmRelatedEvents.Mod
$(VOCSTATIC) -sP ulmIO.Mod $(VOCSTATIC) -sPF ulmIO.Mod
$(VOCSTATIC) -sP ulmProcess.Mod $(VOCSTATIC) -sPF ulmProcess.Mod
$(VOCSTATIC) -sP ulmTypes.Mod $(VOCSTATIC) -sPF ulmTypes.Mod
$(VOCSTATIC) -sP ulmStreams.Mod $(VOCSTATIC) -sPF ulmStreams.Mod
$(VOCSTATIC) -sP ulmAssertions.Mod $(VOCSTATIC) -sPF ulmAssertions.Mod
$(VOCSTATIC) -sP ulmIndirectDisciplines.Mod $(VOCSTATIC) -sPF ulmIndirectDisciplines.Mod
$(VOCSTATIC) -sP ulmStreamDisciplines.Mod $(VOCSTATIC) -sPF ulmStreamDisciplines.Mod
$(VOCSTATIC) -sP ulmIEEE.Mod $(VOCSTATIC) -sPF ulmIEEE.Mod
$(VOCSTATIC) -sP ulmMC68881.Mod $(VOCSTATIC) -sPF ulmMC68881.Mod
$(VOCSTATIC) -sP ulmReals.Mod $(VOCSTATIC) -sPF ulmReals.Mod
$(VOCSTATIC) -sP ulmPrint.Mod $(VOCSTATIC) -sPF ulmPrint.Mod
$(VOCSTATIC) -sP ulmWrite.Mod $(VOCSTATIC) -sPF ulmWrite.Mod
$(VOCSTATIC) -sP ulmTexts.Mod $(VOCSTATIC) -sPF ulmTexts.Mod
$(VOCSTATIC) -sP ulmStrings.Mod $(VOCSTATIC) -sPF ulmStrings.Mod
$(VOCSTATIC) -sP ulmConstStrings.Mod $(VOCSTATIC) -sPF ulmConstStrings.Mod
$(VOCSTATIC) -sP ulmPlotters.Mod $(VOCSTATIC) -sPF ulmPlotters.Mod
$(VOCSTATIC) -sP ulmSysTypes.Mod $(VOCSTATIC) -sPF ulmSysTypes.Mod
$(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sPF ulmSysConversions.Mod
$(VOCSTATIC) -sP ulmErrors.Mod $(VOCSTATIC) -sPF ulmErrors.Mod
$(VOCSTATIC) -sP ulmSysErrors.Mod $(VOCSTATIC) -sPF ulmSysErrors.Mod
$(VOCSTATIC) -sP ulmSysIO.Mod $(VOCSTATIC) -sPF ulmSysIO.Mod
$(VOCSTATIC) -sP ulmLoader.Mod $(VOCSTATIC) -sPF ulmLoader.Mod
$(VOCSTATIC) -sP ulmNetIO.Mod $(VOCSTATIC) -sPF ulmNetIO.Mod
$(VOCSTATIC) -sP ulmPersistentObjects.Mod $(VOCSTATIC) -sPF ulmPersistentObjects.Mod
$(VOCSTATIC) -sP ulmPersistentDisciplines.Mod $(VOCSTATIC) -sPF ulmPersistentDisciplines.Mod
$(VOCSTATIC) -sP ulmOperations.Mod $(VOCSTATIC) -sPF ulmOperations.Mod
$(VOCSTATIC) -sP ulmScales.Mod $(VOCSTATIC) -sPF ulmScales.Mod
$(VOCSTATIC) -sP ulmTimes.Mod $(VOCSTATIC) -sPF ulmTimes.Mod
$(VOCSTATIC) -sP ulmClocks.Mod $(VOCSTATIC) -sPF ulmClocks.Mod
$(VOCSTATIC) -sP ulmTimers.Mod $(VOCSTATIC) -sPF ulmTimers.Mod
$(VOCSTATIC) -sP ulmConditions.Mod $(VOCSTATIC) -sPF ulmConditions.Mod
$(VOCSTATIC) -sP ulmStreamConditions.Mod $(VOCSTATIC) -sPF ulmStreamConditions.Mod
$(VOCSTATIC) -sP ulmTimeConditions.Mod $(VOCSTATIC) -sPF ulmTimeConditions.Mod
$(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sPF ulmSysConversions.Mod
$(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sPF ulmSysStat.Mod
$(VOCSTATIC) -sP ulmCiphers.Mod $(VOCSTATIC) -sPF ulmCiphers.Mod
$(VOCSTATIC) -sP ulmCipherOps.Mod $(VOCSTATIC) -sPF ulmCipherOps.Mod
$(VOCSTATIC) -sP ulmBlockCiphers.Mod $(VOCSTATIC) -sPF ulmBlockCiphers.Mod
$(VOCSTATIC) -sP ulmAsymmetricCiphers.Mod $(VOCSTATIC) -sPF ulmAsymmetricCiphers.Mod
$(VOCSTATIC) -sP ulmConclusions.Mod $(VOCSTATIC) -sPF ulmConclusions.Mod
$(VOCSTATIC) -sP ulmRandomGenerators.Mod $(VOCSTATIC) -sPF ulmRandomGenerators.Mod
$(VOCSTATIC) -sP ulmTCrypt.Mod $(VOCSTATIC) -sPF ulmTCrypt.Mod
$(VOCSTATIC) -sP ulmIntOperations.Mod $(VOCSTATIC) -sPF ulmIntOperations.Mod
#pow32 libs #pow32 libs
$(VOCSTATIC) -sP powStrings.Mod $(VOCSTATIC) -sPF powStrings.Mod
#misc libs #misc libs
$(VOCSTATIC) -sP MultiArrays.Mod $(VOCSTATIC) -sPF MultiArrays.Mod
$(VOCSTATIC) -sP MultiArrayRiders.Mod $(VOCSTATIC) -sPF MultiArrayRiders.Mod
$(VOCSTATIC) -sP MersenneTwister.Mod $(VOCSTATIC) -sPF MersenneTwister.Mod
$(VOCSTATIC) -sP Listen.Mod $(VOCSTATIC) -sPF Listen.Mod
#s3 libs #s3 libs
$(VOCSTATIC) -sP ethBTrees.Mod $(VOCSTATIC) -sPF ethBTrees.Mod
$(VOCSTATIC) -sP ethMD5.Mod $(VOCSTATIC) -sPF ethMD5.Mod
$(VOCSTATIC) -sP ethSets.Mod $(VOCSTATIC) -sPF ethSets.Mod
$(VOCSTATIC) -sP ethZlib.Mod $(VOCSTATIC) -sPF ethZlib.Mod
$(VOCSTATIC) -sP ethZlibBuffers.Mod $(VOCSTATIC) -sPF ethZlibBuffers.Mod
$(VOCSTATIC) -sP ethZlibInflate.Mod $(VOCSTATIC) -sPF ethZlibInflate.Mod
$(VOCSTATIC) -sP ethZlibDeflate.Mod $(VOCSTATIC) -sPF ethZlibDeflate.Mod
$(VOCSTATIC) -sP ethZlibReaders.Mod $(VOCSTATIC) -sPF ethZlibReaders.Mod
$(VOCSTATIC) -sP ethZlibWriters.Mod $(VOCSTATIC) -sPF ethZlibWriters.Mod
$(VOCSTATIC) -sP ethZip.Mod $(VOCSTATIC) -sPF ethZip.Mod
$(VOCSTATIC) -sP ethRandomNumbers.Mod $(VOCSTATIC) -sPF ethRandomNumbers.Mod
$(VOCSTATIC) -sP ethGZReaders.Mod $(VOCSTATIC) -sPF ethGZReaders.Mod
$(VOCSTATIC) -sP ethGZWriters.Mod $(VOCSTATIC) -sPF ethGZWriters.Mod
$(VOCSTATIC) -sP ethUnicode.Mod $(VOCSTATIC) -sPF ethUnicode.Mod
$(VOCSTATIC) -sP ethDates.Mod $(VOCSTATIC) -sPF ethDates.Mod
$(VOCSTATIC) -sP ethReals.Mod $(VOCSTATIC) -sPF ethReals.Mod
$(VOCSTATIC) -sP ethStrings.Mod $(VOCSTATIC) -sPF ethStrings.Mod
# build remaining tools # build remaining tools
# $(VOCSTATIC0) -sPS compatIn.Mod # $(VOCSTATIC0) -sPFS compatIn.Mod
# $(VOCSTATIC0) -smPS vmake.Mod # $(VOCSTATIC0) -smPS vmake.Mod
# $(CC) compatIn.c # $(CC) compatIn.c
# $(CL) vmake.c -o vmake SYSTEM.o Args.o compatIn.o Texts.o Console.o Files.o Reals.o Modules.o Kernel.o Unix.o Strings.o oocIntStr.o oocConvTypes.o oocIntConv.o # $(CL) vmake.c -o vmake SYSTEM.o Args.o compatIn.o Texts.o Console.o Files.o Reals.o Modules.o Kernel.o Unix.o Strings.o oocIntStr.o oocConvTypes.o oocIntConv.o

View file

@ -33,7 +33,8 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
workName, registerName: FileName; workName, registerName: FileName;
tempFile: BOOLEAN; tempFile: BOOLEAN;
dev, ino, mtime: LONGINT; dev, ino, mtime: LONGINT;
fd-, len, pos: LONGINT; fd-: INTEGER;
len, pos: LONGINT;
bufs: ARRAY nofbufs OF Buffer; bufs: ARRAY nofbufs OF Buffer;
swapper, state: INTEGER swapper, state: INTEGER
END ; END ;
@ -125,12 +126,12 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE
END ; END ;
errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*) errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*)
f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); f.fd := Unix.Open(f.workName, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr + Unix.creat + Unix.trunc)), SHORT(SYSTEM.VAL(LONGINT, {2, 4,5, 7,8})));
done := f.fd >= 0; errno := Unix.errno(); done := f.fd >= 0; errno := Unix.errno();
IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN
IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ; IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ;
Kernel.GC(TRUE); Kernel.GC(TRUE);
f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); f.fd := Unix.Open(f.workName, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr + Unix.creat + Unix.trunc)), SHORT(SYSTEM.VAL(LONGINT, {2, 4,5, 7,8})));
done := f.fd >= 0 done := f.fd >= 0
END ; END ;
IF done THEN IF done THEN
@ -233,7 +234,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
END CacheEntry; END CacheEntry;
PROCEDURE Old* (name: ARRAY OF CHAR): File; PROCEDURE Old* (name: ARRAY OF CHAR): File;
VAR f: File; fd, res, errno: LONGINT; pos: INTEGER; done: BOOLEAN; VAR f: File; fd: INTEGER; res, errno: LONGINT; pos: INTEGER; done: BOOLEAN;
dir, path: ARRAY 256 OF CHAR; dir, path: ARRAY 256 OF CHAR;
stat: Unix.Status; stat: Unix.Status;
BEGIN BEGIN
@ -245,17 +246,17 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
(*ScanPath(pos, dir);*) (*MakeFileName(dir, name, path);*) (*ScanPath(pos, dir)*) (*ScanPath(pos, dir);*) (*MakeFileName(dir, name, path);*) (*ScanPath(pos, dir)*)
END ; END ;
LOOP LOOP
fd := Unix.Open(path, Unix.rdwr, {}); done := fd >= 0; errno := Unix.errno(); fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr)), SHORT(SYSTEM.VAL(LONGINT, {}))); done := fd >= 0; errno := Unix.errno();
IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN
IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ; IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ;
Kernel.GC(TRUE); Kernel.GC(TRUE);
fd := Unix.Open(path, Unix.rdwr, {}); fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr)), SHORT(SYSTEM.VAL(LONGINT, {})));
done := fd >= 0; errno := Unix.errno(); done := fd >= 0; errno := Unix.errno();
IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END
END ; END ;
IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN
(* errno EAGAIN observed on Solaris 2.4 *) (* errno EAGAIN observed on Solaris 2.4 *)
fd := Unix.Open(path, Unix.rdonly, {}); done := fd >= 0; errno := Unix.errno() fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdonly)), SHORT(SYSTEM.VAL(LONGINT, {}))); done := fd >= 0; errno := Unix.errno()
END ; END ;
IF (~done) & (errno # Unix.ENOENT) THEN IF (~done) & (errno # Unix.ENOENT) THEN
Console.String("warning Files.Old "); Console.String(name); Console.String("warning Files.Old "); Console.String(name);
@ -463,7 +464,7 @@ Especially Length would become fairly complex.
END Delete; END Delete;
PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER); PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER);
VAR fdold, fdnew, n, errno, r: LONGINT; VAR fdold, fdnew: INTEGER; n, errno, r: LONGINT;
ostat, nstat: Unix.Status; ostat, nstat: Unix.Status;
buf: ARRAY 4096 OF CHAR; buf: ARRAY 4096 OF CHAR;
BEGIN BEGIN
@ -476,9 +477,9 @@ Especially Length would become fairly complex.
r := Unix.Rename(old, new); r := Unix.Rename(old, new);
IF r < 0 THEN res := SHORT(Unix.errno()); IF r < 0 THEN res := SHORT(Unix.errno());
IF res = Unix.EXDEV THEN (* cross device link, move the file *) IF res = Unix.EXDEV THEN (* cross device link, move the file *)
fdold := Unix.Open(old, Unix.rdonly, {}); fdold := Unix.Open(old, SHORT(SYSTEM.VAL(LONGINT, Unix.rdonly)), SHORT(SYSTEM.VAL(LONGINT, {})));
IF fdold < 0 THEN res := 2; RETURN END ; IF fdold < 0 THEN res := 2; RETURN END ;
fdnew := Unix.Open(new, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); fdnew := Unix.Open(new, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr + Unix.creat + Unix.trunc)), SHORT(SYSTEM.VAL(LONGINT, {2, 4,5, 7,8})));
IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ; IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ;
n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize); n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize);
WHILE n > 0 DO WHILE n > 0 DO

View file

@ -36,7 +36,8 @@ MODULE Files0; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
workName, registerName: FileName; workName, registerName: FileName;
tempFile: BOOLEAN; tempFile: BOOLEAN;
dev, ino, mtime: LONGINT; dev, ino, mtime: LONGINT;
fd-, len, pos: LONGINT; fd-: INTEGER;
len, pos: LONGINT;
bufs: ARRAY nofbufs OF Buffer; bufs: ARRAY nofbufs OF Buffer;
swapper, state: INTEGER swapper, state: INTEGER
END ; END ;
@ -128,12 +129,12 @@ MODULE Files0; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE
END ; END ;
errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*) errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*)
f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); f.fd := Unix.Open(f.workName, SHORT(SYSTEM.VAL(LONGINT, (Unix.rdwr + Unix.creat + Unix.trunc))), SHORT(SYSTEM.VAL(LONGINT, ({2, 4,5, 7,8}))));
done := f.fd >= 0; errno := Unix.errno(); done := f.fd >= 0; errno := Unix.errno();
IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN
IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ; IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ;
Kernel.GC(TRUE); Kernel.GC(TRUE);
f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); f.fd := Unix.Open(f.workName, SHORT(SYSTEM.VAL(LONGINT, (Unix.rdwr + Unix.creat + Unix.trunc))), SHORT(SYSTEM.VAL(LONGINT, {2, 4,5, 7,8})));
done := f.fd >= 0 done := f.fd >= 0
END ; END ;
IF done THEN IF done THEN
@ -236,7 +237,7 @@ MODULE Files0; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
END CacheEntry; END CacheEntry;
PROCEDURE Old* (name: ARRAY OF CHAR): File; PROCEDURE Old* (name: ARRAY OF CHAR): File;
VAR f: File; fd, res, errno: LONGINT; pos: INTEGER; done: BOOLEAN; VAR f: File; fd: INTEGER; res, errno: LONGINT; pos: INTEGER; done: BOOLEAN;
dir, path: ARRAY 256 OF CHAR; dir, path: ARRAY 256 OF CHAR;
stat: Unix.Status; stat: Unix.Status;
BEGIN BEGIN
@ -245,17 +246,17 @@ MODULE Files0; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
ELSE pos := 0; ScanPath(pos, dir); MakeFileName(dir, name, path); ScanPath(pos, dir) ELSE pos := 0; ScanPath(pos, dir); MakeFileName(dir, name, path); ScanPath(pos, dir)
END ; END ;
LOOP LOOP
fd := Unix.Open(path, Unix.rdwr, {}); done := fd >= 0; errno := Unix.errno(); fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr)), SHORT(SYSTEM.VAL(LONGINT, {}))); done := fd >= 0; errno := Unix.errno();
IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN
IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ; IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ;
Kernel.GC(TRUE); Kernel.GC(TRUE);
fd := Unix.Open(path, Unix.rdwr, {}); fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr)), SHORT(SYSTEM.VAL(LONGINT, {})));
done := fd >= 0; errno := Unix.errno(); done := fd >= 0; errno := Unix.errno();
IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END
END ; END ;
IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN
(* errno EAGAIN observed on Solaris 2.4 *) (* errno EAGAIN observed on Solaris 2.4 *)
fd := Unix.Open(path, Unix.rdonly, {}); done := fd >= 0; errno := Unix.errno() fd := Unix.Open(path, SHORT(SYSTEM.VAL(LONGINT, Unix.rdonly)), SHORT(SYSTEM.VAL(LONGINT, {}))); done := fd >= 0; errno := Unix.errno()
END ; END ;
IF (~done) & (errno # Unix.ENOENT) THEN IF (~done) & (errno # Unix.ENOENT) THEN
Console.String("warning Files0.Old "); Console.String(name); Console.String("warning Files0.Old "); Console.String(name);
@ -456,7 +457,7 @@ Especially Length would become fairly complex.
END Delete; END Delete;
PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER); PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER);
VAR fdold, fdnew, n, errno, r: LONGINT; VAR fdold, fdnew: INTEGER; n, errno, r: LONGINT;
ostat, nstat: Unix.Status; ostat, nstat: Unix.Status;
buf: ARRAY 4096 OF CHAR; buf: ARRAY 4096 OF CHAR;
BEGIN BEGIN
@ -469,9 +470,9 @@ Especially Length would become fairly complex.
r := Unix.Rename(old, new); r := Unix.Rename(old, new);
IF r < 0 THEN res := SHORT(Unix.errno()); IF r < 0 THEN res := SHORT(Unix.errno());
IF res = Unix.EXDEV THEN (* cross device link, move the file *) IF res = Unix.EXDEV THEN (* cross device link, move the file *)
fdold := Unix.Open(old, Unix.rdonly, {}); fdold := Unix.Open(old, SHORT(SYSTEM.VAL(LONGINT, Unix.rdonly)), SHORT(SYSTEM.VAL(LONGINT, {})));
IF fdold < 0 THEN res := 2; RETURN END ; IF fdold < 0 THEN res := 2; RETURN END ;
fdnew := Unix.Open(new, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); fdnew := Unix.Open(new, SHORT(SYSTEM.VAL(LONGINT, Unix.rdwr + Unix.creat + Unix.trunc)), SHORT(SYSTEM.VAL(LONGINT, {2, 4,5, 7,8})));
IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ; IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ;
n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize); n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize);
WHILE n > 0 DO WHILE n > 0 DO

View file

@ -1,5 +1,5 @@
MODULE prf; MODULE prf;
CONST prefix* = "/opt"; CONST prefix* = "/Users/noch/local";
END prf. END prf.

View file

@ -1 +1 @@
05ed701d466aae7ace5d824e431e56edcaf1a3fd 116059b9cae6de914cb268caa1ca621c9f794ccb