-- file OSMiscOps.mesa
-- last modified by Satterthwaite, December 10, 1982 10:45 am
DIRECTORY
Environment: TYPE USING [wordsPerPage],
File: TYPE USING [
Capability, Permissions, nullCapability, delete, grow, read, shrink, write],
Strings: TYPE USING [String],
TimeStamp: TYPE USING [Stamp];
OSMiscOps: DEFINITIONS = {
-- utilities
Address: TYPE = LONG POINTER;
pageSize: CARDINAL = Environment.wordsPerPage;
Pages: PROC [n: CARDINAL] RETURNS [Address];
FreePages: PROC [base: Address];
Words: PROC [nWords: CARDINAL] RETURNS [base: Address] = INLINE {
RETURN [Pages[(nWords + (pageSize-1)) / pageSize]]};
FreeWords: PROC [base: Address] = INLINE {FreePages[base]};
SignalArgs: PROC RETURNS [signal, message: UNSPECIFIED];
-- table bases
GetTableBase: PROC [PROGRAM] RETURNS [LONG POINTER];
-- functional version stamps
Stamp: TYPE [3];
MergeStamps: PROC [sum, item: Stamp] RETURNS [Stamp];
TimeToStamp: PROC [time: TimeStamp.Stamp] RETURNS [Stamp] = INLINE {
RETURN [LOOPHOLE[time]]};
StampToTime: PROC [s: Stamp] RETURNS [TimeStamp.Stamp] = INLINE {
RETURN [LOOPHOLE[s]]};
-- unique ids
GenerateUniqueId: PROC RETURNS [TimeStamp.Stamp];
BcdCreateTime: PROC RETURNS [LONG CARDINAL];
ImageId: PROC RETURNS [TimeStamp.Stamp];
-- directory interface
FileAccess: TYPE = {read, write, both};
Permissions: ARRAY FileAccess OF File.Permissions = [
read: File.read,
write: File.write+File.grow+File.shrink+File.delete,
both: File.read+File.write+File.grow+File.shrink+File.delete];
FindFile: PROC [Strings.String, FileAccess←$read] RETURNS [File.Capability];
RenameFile: PROC [newName, oldName: Strings.String];
UnnameFile: PROC [oldName: Strings.String, file: File.Capability←File.nullCapability];
DeleteFile: PROC [name: Strings.String];
FileError: ERROR [name: Strings.String];
}.