-- Copyright (C) 1981, 1984, 1985  by Xerox Corporation. All rights reserved. 
-- SpillDefs.mesa, Transport Mechanism Mail Server: DEFS for mail spilling

-- HGM, 15-Sep-85  7:45:18
-- Andrew Birrell  25-Feb-81 16:09:54

DIRECTORY
  BodyDefs USING [RName],
  HeapDefs USING [WriterHandle],
  ObjectDirDefs USING [ObjectNumber],
  ProtocolDefs USING [Handle],
  SendDefs USING [Handle];

SpillDefs: DEFINITIONS =

  BEGIN

  ServerCrash: ERROR;
  -- raised if the remote server fails. --



  -- Archive file creation: only one may be created at a time --

  StartWrite: PROC [user: BodyDefs.RName, bodies: CARDINAL]
    RETURNS [obj: ObjectDirDefs.ObjectNumber];
  -- "obj" is the spill object; it has reference count 1.  May try
  -- several servers.  Raises ServerCrash if none is available. --

  AddBody: PROC [body: ObjectDirDefs.ObjectNumber];
  -- copies the body into the file --

  EndWrite: PROC;
  -- closes the file --



  -- Archive file access:  multiple clients allowed --

  ArchReader: TYPE [SIZE[LONG POINTER]];
  -- represents the state of reading an archive file --

  OpenToRead: PROC [obj: ObjectDirDefs.ObjectNumber] RETURNS [file: ArchReader];
  -- "obj" is the spill object; "file" is the remote file --

  CopyBody: PROC [file: ArchReader, body: CARDINAL, str: ProtocolDefs.Handle];
  -- copies the entire body into the stream --

  CopyText: PROC [
    file: ArchReader, body: CARDINAL, sendTextLength: PROC [LONG CARDINAL],
    str: SendDefs.Handle, sendBytes: PROC [SendDefs.Handle, LONG POINTER, CARDINAL]];
  -- copies the Text part of the message --

  RecoverBody: PROC [file: ArchReader, body: CARDINAL]
    RETURNS [writer: HeapDefs.WriterHandle];
  -- copies the entire body back into the heap, with type "body" --

  DeleteEntry: PROC [file: ArchReader, body: CARDINAL];
  -- marks body as deleted in archive file. --

  TestDeletion: PROC [file: ArchReader, body: CARDINAL]
    RETURNS [deleted: BOOLEAN];
  -- tells whether the body is marked as deleted in archive file --

  EndReading: PROC [file: ArchReader];
  -- closes the archive file --



  -- Deleting archive files --

  Delete: PROC [obj: ObjectDirDefs.ObjectNumber];
  -- deletes the archive file --

  END.