<> <> <> <<>> <> <<>> <> <<(changed New mail operations around)>> <<(Removed Move operation and changed the types of several other procedures; the major change was to redefine the MsgSet type to include a version stamp -- which may be defaulted. MsgSets now have readlocks associated with them!!)>> <<(Changed new mail operations around again)>> <<(Added complete returned value to GetNewMail) >> <> <> <> <<>> DIRECTORY BasicTime USING [GMT], GVBasics USING [RName], IO USING [STREAM], Rope USING [ROPE], ViewerTools USING [TiogaContents], WalnutDefs USING [dontCareDomainVersion, dontCareMsgSetVersion, MsgSet, ServerInfo], WalnutParseMsg USING [ParseProc, MsgHeaders, MsgHeaderItem]; WalnutOps: CEDAR DEFINITIONS = BEGIN <> ROPE: TYPE = Rope.ROPE; dontCareDomainVersion: INT = WalnutDefs.dontCareDomainVersion; dontCareMsgSetVersion: INT = WalnutDefs.dontCareMsgSetVersion; DomainVersion: TYPE = INT _ dontCareDomainVersion; MsgSetVersion: TYPE = INT _ WalnutDefs.dontCareMsgSetVersion; MsgSet: TYPE = WalnutDefs.MsgSet; <> <> ActiveMsgSetName: ROPE; DeletedMsgSetName: ROPE; ServerInfo: TYPE = WalnutDefs.ServerInfo; <> <<>> EnumeratorForMsgs: TYPE = REF EnumeratorForMsgsObject; EnumeratorForMsgsObject: TYPE; ParseProc: TYPE = WalnutParseMsg.ParseProc; <> MsgHeaders: TYPE = WalnutParseMsg.MsgHeaders; <> MsgHeaderItem: TYPE = WalnutParseMsg.MsgHeaderItem; <> <> <> <> <<>> <<$AlreadyStarted>> <> <<>> <<$DatabaseIncomplete>> <> <<>> <<$LogIncomplete>> <> <<>> <> <<>> <<$IllegalOperation>> <> <<>> <<$InvalidOperation>> <> <<>> <> <<>> <> <<>> <<$DatabaseInaccessible>> <> <<>> <<$LogInaccessible>> <> <<>> <<$NotStarted>> <> <<>> <<$ReadOnly>> <> <<>> <<$Bug>> <> <<>> <<$LogIncomplete>> <> <<>> <<$ServerDied>> <<>> <> <> <> Startup: PROC[rootFile: ROPE, wantReadOnly: BOOL _ FALSE] RETURNS[isReadOnly, newMailExists: BOOL, mailFor: GVBasics.RName, key: ROPE]; <> <<>> <> <<>> <> <> <> <> Shutdown: PROC; <> <<>> Scavenge: PROC[rootFile: ROPE] RETURNS[newMailExists: BOOL, mailFor: GVBasics.RName, key: ROPE]; <> <> ReadOnly: PROC RETURNS[readonly: BOOL]; <> GetRootInfo: PROC RETURNS[createDate: BasicTime.GMT, rootFile, mailFor: ROPE]; <> FileName: PROC RETURNS[dbFileName: ROPE]; <> <<>> SizeOfDatabase: PROC RETURNS[messages, msgSets: INT]; LogLength: PROC RETURNS[length: INT]; MsgSetsInfo: PROC RETURNS[version: DomainVersion, num: INT]; <> <<>> RegisterReporter: PROC[reportStream: IO.STREAM]; <> <<>> UnregisterReporter: PROC[reportStream: IO.STREAM]; <> <<>> <> StartNewMail: PROC[] RETURNS[newMailStream: IO.STREAM]; <> GetNewMail: PROC[activeVersion: MsgSetVersion, proc: PROC[msg, TOCentry: ROPE, startOfSubject: INT] _ NIL ] RETURNS[responses: LIST OF ServerInfo, complete: BOOL]; <<>> <> AcceptNewMail: PROC[activeVersion: MsgSetVersion]; <<>> <> RecordNewMailInfo: PROC[logLen: INT, server: ROPE, num: INT]; <<>> <> <<>> EndNewMail: PROC[]; <<>> <> CreateMsg: PROC [msgName: ROPE, body: ViewerTools.TiogaContents]; <> <> ExpungeMsgs: PROC[deletedVersion: MsgSetVersion] RETURNS[bytesInDestroyedMsgs: INT]; <> <<>> GetExpungeInfo: PROC RETURNS[firstDestroyedMsgPos, bytesInDestroyedMsgs: INT]; <> <<>> CopyToExpungeLog: PROC[]; <<>> <> <<>> GetTimeOfLastExpunge: PROC RETURNS[when: BasicTime.GMT]; <> CreateMsgSet: PROC [name: ROPE, msDomainVersion: DomainVersion]; <> <<>> MsgSetExists: PROC [name: ROPE, msDomainVersion: DomainVersion] RETURNS [exists: BOOL, version: MsgSetVersion]; SizeOfMsgSet: PROC [name: ROPE] RETURNS [messages: INT, version: MsgSetVersion]; EmptyMsgSet: PROC [msgSet: MsgSet] RETURNS [someInDeleted: BOOL]; <> <<>> <> <> DestroyMsgSet: PROC [msgSet: MsgSet, msDomainVersion: DomainVersion] RETURNS [someInDeleted: BOOL]; <> <<>> <> <> <> <<>> EnumerateMsgsInMsgSet: PROC[name: ROPE] RETURNS[enum: EnumeratorForMsgs]; <> EnumerateMsgs: PROC RETURNS[enum: EnumeratorForMsgs]; <> NextMsg: PROC[enum: EnumeratorForMsgs] RETURNS [msgID: ROPE, msList: LIST OF ROPE, headers: REF TEXT]; <> MsgsEnumeration: PROC[alphaOrder: BOOL _ TRUE] RETURNS[mL: LIST OF ROPE]; MsgSetNames: PROC[alphaOrder: BOOL _ TRUE] RETURNS[mL: LIST OF ROPE, msDomainVersion: DomainVersion]; MsgsInSetEnumeration: PROC [name: ROPE, fromStart: BOOL_ TRUE] RETURNS [mL: LIST OF ROPE, msVersion: MsgSetVersion]; EnumerateMsgSets: PROC [alphaOrder: BOOL _ TRUE, proc: PROC[msgSet: MsgSet] _ NIL] RETURNS [msDomainVersion: DomainVersion]; <> EnumerateMsgsInSet: PROC [ name: ROPE, fromStart: BOOL_ TRUE, proc: PROC[msg, TOCentry: ROPE, hasBeenRead: BOOL, startOfSubject: INT] _ NIL] RETURNS [msVersion: MsgSetVersion]; <> <> ParseHeaders: PROC [headers: ROPE, proc: ParseProc] RETURNS[msgHeaders: MsgHeaders]; <> <> MsgExists: PROC [msg: ROPE] RETURNS[exists: BOOL]; GetCategories: PROC [msg: ROPE] RETURNS[LIST OF ROPE]; GetDisplayProps: PROC [msg: ROPE] RETURNS[hasBeenRead: BOOL, TOCentry: ROPE, startOfSubject: INT]; GetMsgDate: PROC [msg: ROPE] RETURNS[date: BasicTime.GMT]; <> GetMsg: PROC [msg: ROPE] RETURNS[contents: ViewerTools.TiogaContents, herald, shortName: ROPE]; GetMsgHeaders: PROC [msg: Rope.ROPE, text: REF TEXT] RETURNS[headers: REF TEXT]; <> <> <<>> GetMsgText: PROC [msg: ROPE, text: REF TEXT] RETURNS[contents: REF TEXT]; <> <> GetMsgShortName: PROC[msg: ROPE] RETURNS[shortName: ROPE]; GetHasBeenRead: PROC [msg: ROPE] RETURNS[hadBeenRead: BOOL]; SetHasBeenRead: PROC [msg: ROPE]; <> AddMsg: PROC [msg: ROPE, from, to: MsgSet] RETURNS [exists: BOOL]; <> <<>> <> <> <> <> <> MoveMsg: PROC [msg: ROPE, from, to: MsgSet] RETURNS [exists: BOOL]; <> <<>> <> <> <> <> <> RemoveMsg: PROC [msg: ROPE, from: MsgSet, deletedVersion: MsgSetVersion] RETURNS [deleted: BOOL]; <> <<>> <> <> <> <> <> <> <> <<>> ReadArchiveFile: PROC [file: ROPE, msgSet: MsgSet] RETURNS[numNew: INT]; <> WriteArchiveFile: PROC [file: ROPE, msgSetList: LIST OF MsgSet, append: BOOL _ FALSE] RETURNS[ok: BOOL]; <> END.