<<>> <> <> <> <> <<>> <> <<>> <> <<(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], IO USING [STREAM], Rope USING [ROPE], SendMailParseMsg USING [ParseProc, MsgHeaders, MsgHeaderItem], ViewerTools USING [TiogaContents], WalnutDefs USING [dontCareDomainVersion, dontCareMsgSetVersion, GeneralEnumerator, MsgSet, SeFromToCcSuDaMid, ServerInfo, WalnutOpsHandle]; WalnutOps: CEDAR DEFINITIONS = BEGIN <<>> <> GMT: TYPE = BasicTime.GMT; STREAM: TYPE = IO.STREAM; 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; <> <> ActiveName: ROPE; DeletedName: ROPE; ServerInfo: TYPE = WalnutDefs.ServerInfo; <> <<>> WalnutOpsHandle: TYPE = WalnutDefs.WalnutOpsHandle; EnumeratorForMsgs: TYPE = REF EnumeratorForMsgsObject; EnumeratorForMsgsObject: TYPE; GeneralEnumerator: TYPE = WalnutDefs.GeneralEnumerator; SeFromToCcSuDaMid: TYPE = WalnutDefs.SeFromToCcSuDaMid; EntryRef: TYPE = REF EntryObject; EntryObject: TYPE = RECORD [seFromToCcSuDaMid: SeFromToCcSuDaMid, msgSetName: ROPE, msgText: ROPE]; ParseProc: TYPE = SendMailParseMsg.ParseProc; <> MsgHeaders: TYPE = SendMailParseMsg.MsgHeaders; <> MsgHeaderItem: TYPE = SendMailParseMsg.MsgHeaderItem; <> << Procedures>> <> <<>> <> <<>> ValidOpsHandle: PROC[opsHandle: WalnutOpsHandle] RETURNS[isValid: BOOL]; <> <<>> CreateWalnutOpsHandle: PROC[rootFile: ROPE, wantReadOnly: BOOL ¬ FALSE] RETURNS[opsHandle: WalnutOpsHandle]; <> GetHandleForRootfile: PROC[rootFile: ROPE] RETURNS[opsHandle: WalnutOpsHandle]; <> Startup: PROC [opsHandle: WalnutOpsHandle] RETURNS[newMailExists: BOOL]; <> <<>> <> <<>> <> <> <> <> Shutdown: PROC[opsHandle: WalnutOpsHandle]; <> <<>> Scavenge: PROC [opsHandle: WalnutOpsHandle] RETURNS[newMailExists: BOOL]; <> <<>> <> SizeOfDatabase: PROC[opsHandle: WalnutOpsHandle] RETURNS[messages, msgSets: INT]; LogLength: PROC[opsHandle: WalnutOpsHandle] RETURNS[length: INT]; MsgSetsInfo: PROC[opsHandle: WalnutOpsHandle] RETURNS[version: DomainVersion, num: INT]; <> <<>> RegisterReporter: PROC[opsHandle: WalnutOpsHandle, reportStream: STREAM]; <> <<>> UnregisterReporter: PROC[opsHandle: WalnutOpsHandle, reportStream: STREAM]; <> <<>> <> StartNewMail: PROC[opsHandle: WalnutOpsHandle] RETURNS[newMailStream: STREAM]; <> GetNewMail: PROC[opsHandle: WalnutOpsHandle, activeVersion: MsgSetVersion, proc: PROC [msg, tocEntry: ROPE, startOfSubject: INT] ¬ NIL ] RETURNS[responses: LIST OF ServerInfo, complete: BOOL]; <<>> <> AcceptNewMail: PROC[opsHandle: WalnutOpsHandle, activeVersion: MsgSetVersion]; <<>> <> RecordNewMailInfo: PROC[opsHandle: WalnutOpsHandle, logLen: INT, server: ROPE, num: INT]; <<>> <> <<>> EndNewMail: PROC[opsHandle: WalnutOpsHandle]; <<>> <> CreateMsg: PROC[opsHandle: WalnutOpsHandle, msgName: ROPE, body: ViewerTools.TiogaContents]; <> <<>> <> ExpungeMsgs: PROC[opsHandle: WalnutOpsHandle, deletedVersion: MsgSetVersion] RETURNS[bytesInDestroyedMsgs: INT]; <> <<>> GetExpungeInfo: PROC[opsHandle: WalnutOpsHandle] RETURNS[firstDestroyedMsgPos, bytesInDestroyedMsgs: INT]; <> <<>> CopyToExpungeLog: PROC[opsHandle: WalnutOpsHandle] RETURNS[copyDone: BOOL]; <<>> <> <<>> GetTimeOfLastExpunge: PROC[opsHandle: WalnutOpsHandle] RETURNS[when: GMT]; <<>> <> CreateMsgSet: PROC[opsHandle: WalnutOpsHandle, name: ROPE, msDomainVersion: DomainVersion]; <> <<>> MsgSetExists: PROC[opsHandle: WalnutOpsHandle, name: ROPE, msDomainVersion: DomainVersion] RETURNS[exists: BOOL, version: MsgSetVersion]; SizeOfMsgSet: PROC[opsHandle: WalnutOpsHandle, name: ROPE] RETURNS[messages: INT, version: MsgSetVersion]; EmptyMsgSet: PROC[opsHandle: WalnutOpsHandle, msgSet: MsgSet] RETURNS[someInDeleted: BOOL]; <> <<>> <> <> DestroyMsgSet: PROC[opsHandle: WalnutOpsHandle, msgSet: MsgSet, msDomainVersion: DomainVersion] RETURNS[someInDeleted: BOOL]; <> <<>> <> <> <> <<>> EnumerateMsgsInMsgSet: PROC[opsHandle: WalnutOpsHandle, name: ROPE] RETURNS[enum: EnumeratorForMsgs]; <> EnumerateMsgs: PROC[opsHandle: WalnutOpsHandle] RETURNS[enum: EnumeratorForMsgs]; <> NextMsg: PROC [enum: EnumeratorForMsgs] RETURNS[msgID: ROPE, msList: LIST OF ROPE, headers: REF TEXT]; <> MsgsEnumeration: PROC[opsHandle: WalnutOpsHandle, alphaOrder: BOOL ¬ TRUE] RETURNS[mL: LIST OF ROPE]; MsgSetNames: PROC [opsHandle: WalnutOpsHandle, alphaOrder: BOOL ¬ TRUE] RETURNS[mL: LIST OF ROPE, msDomainVersion: DomainVersion]; MsgsInSetEnumeration: PROC [opsHandle: WalnutOpsHandle, name: ROPE, fromStart: BOOL¬ TRUE] RETURNS [mL: LIST OF ROPE, msVersion: MsgSetVersion]; EnumerateMsgSets: PROC [opsHandle: WalnutOpsHandle, alphaOrder: BOOL ¬ TRUE, proc: PROC [msgSet: MsgSet] RETURNS[continue: BOOL] ] RETURNS [msDomainVersion: DomainVersion]; <> EnumerateMsgsInSet: PROC [ opsHandle: WalnutOpsHandle, name: ROPE, fromStart: BOOL¬ TRUE, proc: PROC [msg, tocEntry: ROPE, hasBeenRead: BOOL, startOfSubject: INT] RETURNS[continue: BOOL] ] RETURNS [msVersion: MsgSetVersion]; <> <> ParseHeaders: PROC [opsHandle: WalnutOpsHandle, headers: ROPE, proc: ParseProc] RETURNS[msgHeaders: MsgHeaders]; <> <> MsgExists: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[exists: BOOL]; GetCategories: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[LIST OF ROPE]; GetDisplayProps: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[hasBeenRead: BOOL, tocEntry: ROPE, startOfSubject: INT]; GetMsgDate: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[date: GMT]; <> GetMsg: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[contents: ViewerTools.TiogaContents, herald, shortName: ROPE]; GetMsgHeaders: PROC [opsHandle: WalnutOpsHandle, msg: ROPE, text: REF TEXT] RETURNS[headers: REF TEXT]; <> <> <<>> GetMsgText: PROC [opsHandle: WalnutOpsHandle, msg: ROPE, text: REF TEXT] RETURNS[contents: REF TEXT]; <> <> GetMsgShortName: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[shortName: ROPE]; GetMsgSize: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[textLen, formatLen: INT]; <> <<>> GetIsInReplyTo: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[isInReplyTo: BOOL]; <> GetHasBeenRead: PROC [opsHandle: WalnutOpsHandle, msg: ROPE] RETURNS[hadBeenRead: BOOL]; SetHasBeenRead: PROC [opsHandle: WalnutOpsHandle, msg: ROPE]; GenerateUniqueMsgName: PROC[opsHandle: WalnutOpsHandle] RETURNS[msg: ROPE]; <> <<>> GenerateEntriesPlusDate: PROC [ opsHandle: WalnutOpsHandle, attr: ATOM, start: ROPE ¬ NIL, end: ROPE ¬ NIL, dateStart: ROPE ¬ NIL, dateEnd: ROPE ¬ NIL ] RETURNS [genEnum: GeneralEnumerator]; <> <<>> NextEntry: PROC [genEnum: GeneralEnumerator] RETURNS[entry: EntryRef]; <> <> AddMsg: PROC [opsHandle: WalnutOpsHandle, msg: ROPE, from, to: MsgSet] RETURNS [exists: BOOL]; <> <<>> <> <> <> <> <> MoveMsg: PROC [opsHandle: WalnutOpsHandle, msg: ROPE, from, to: MsgSet] RETURNS [exists: BOOL]; <> <<>> <> <> <> <> <> RemoveMsg: PROC [opsHandle: WalnutOpsHandle, msg: ROPE, from: MsgSet, deletedVersion: MsgSetVersion] RETURNS [deleted: BOOL]; <> <<>> <> <> <> <> <> <> <> <<>> ReadArchiveFile: PROC [opsHandle: WalnutOpsHandle, file: ROPE, msgSet: MsgSet] RETURNS[numNew: INT]; <> WriteArchiveFile: PROC [opsHandle: WalnutOpsHandle, file: ROPE, msgSetList: LIST OF MsgSet, append: BOOL ¬ FALSE] RETURNS[ok: BOOL]; <> END.