-- Transport mechanism: Maintain: commonly used commands -- [Indigo]<Grapevine>Maintain>MaintainCommon.mesa -- Andrew Birrell 14-Jan-82 13:23:52 DIRECTORY Ascii USING[ CR ], BodyDefs USING[ Password ], MaintainPrivate USING[ CantCheckName, CheckMailName, CopyName, Failed, Handle, ReadPassword, ReadWord, Update ], NameInfoDefs USING[ IsMemberDirect ], String USING[ EquivalentString ]; MaintainCommon: PROGRAM IMPORTS MaintainPrivate, NameInfoDefs, String EXPORTS MaintainPrivate = BEGIN OPEN MaintainPrivate; CreateIndividual: PUBLIC PROC[handle: MaintainPrivate.Handle] = BEGIN OPEN handle; pwstring: STRING = [32]; pw: BodyDefs.Password; ReadWord[glass, ": "L, individual]; CopyName[from: individual, to: dName]; pw ← ReadPassword[glass, " with password: "L, pwstring]; Update[handle: handle, op: CreateIndividual, name: individual, key: pw]; glass.WriteChar[Ascii.CR]; glass.WriteString["--> Add Mailbox"L]; AddMailbox[handle]; END; AddMailbox: PUBLIC PROC[handle: MaintainPrivate.Handle] = BEGIN OPEN handle, handle.glass; ReadWord[glass, " at server: "L, name]; IF NOT String.EquivalentString[name, "Maxc"L] THEN SELECT NameInfoDefs.IsMemberDirect["MailDrop.ms"L, name] FROM allDown => SIGNAL CantCheckName[name]; no, notGroup => IF handle.verifying THEN { WriteString[" ... """L]; WriteString[name]; WriteString[""" is not a valid mailbox site"L]; ERROR MaintainPrivate.Failed[] } ELSE WriteString[" (bad site)"L]; yes => NULL; -- name is an ok inbox site -- ENDCASE => ERROR; ReadWord[glass, " for individual: "L, individual]; CopyName[from: individual, to: dName]; Update[handle: handle, op: AddMailBox, name: individual, value: name]; END; AddMember: PUBLIC PROC[handle: MaintainPrivate.Handle] = BEGIN OPEN handle; ReadWord[glass, ": "L, name]; CheckMailName[name]; ReadWord[glass, " to group: "L, group]; CopyName[from: group, to: dName]; Update[handle: handle, op: AddMember, name: group, value: name] END; RemoveMember: PUBLIC PROC[handle: MaintainPrivate.Handle] = BEGIN OPEN handle; ReadWord[glass, ": "L, name]; ReadWord[glass, " from group: "L, group]; CopyName[from: group, to: dName]; Update[handle: handle, op: DeleteMember, name: group, value: name] END; END.