-- Transport mechanism: Maintain: internal interface

-- [Juniper]<Grapevine>Maintain>MaintainPrivate.mesa

-- Andrew Birrell  14-Jan-82  9:37:23

DIRECTORY
BodyDefs	USING[ Connect, Password, RName, Remark ],
GlassDefs	USING[ Handle ],
ProtocolDefs	USING[ Handle, ReturnCode, RNameType, RSOperation ],
PupDefs		USING[ PupAddress ];

MaintainPrivate: DEFINITIONS =

BEGIN




-- Exported by Maintainer --

Handle:		TYPE = POINTER TO HandleObject;

HandleObject:	TYPE = RECORD[
	str:		ProtocolDefs.Handle,
	serverAddr:	PupDefs.PupAddress,
	addrKnown:	BOOLEAN,
	caller:		BodyDefs.RName,
	callerPwd:	STRING,
	callerKey:	BodyDefs.Password,
	authenticated:	BOOLEAN,
	verifying:	BOOLEAN,
	name:		BodyDefs.RName, -- current misc operand --
	individual:	BodyDefs.RName, -- current individual name --
	group:		BodyDefs.RName, -- current group name --
	dName:		BodyDefs.RName, -- current name for TypeEntry --
	glass:		GlassDefs.Handle];

Del:		ERROR; -- command aborted because DEL has been typed --
Failed:		ERROR; -- command failed and has typed error message --



-- Exported by MaintainType --

TypeEntry:		PROC[Handle];
TypeDetails:		PROC[Handle];
TypeMembers:		PROC[Handle];



-- Exported by MaintainCommon --

CreateIndividual:	PROC[Handle];
AddMailbox:		PROC[Handle];
AddMember:		PROC[Handle];
RemoveMember:		PROC[Handle];



-- Exported by MaintainCommands --

VerifyName:		PROC[Handle];
DeleteIndividual:	PROC[Handle];
CreateGroup:		PROC[Handle];
DeleteGroup:		PROC[Handle];
SetPassword:		PROC[Handle];
SetDecimalPassword:	PROC[Handle];
SetConnect:		PROC[Handle];
BadRemark:		ERROR[bad: CHARACTER];
SetRemark:		PROC[Handle];
RemoveMailbox:		PROC[Handle];
AddForward:		PROC[Handle];
RemoveForward:		PROC[Handle];
AddOwner:		PROC[Handle];
RemoveOwner:		PROC[Handle];
AddFriend:		PROC[Handle];
RemoveFriend:		PROC[Handle];
AddSelf:		PROC[Handle];
RemoveSelf:		PROC[Handle];
SetServer:		PROC[Handle];
InitializeNewName:	PROC[Handle];



-- Exported by MaintainGroups --

VerifyGroup:		PROC[Handle];
AddListOfMembers:	PROC[Handle];
RemoveAllMemberships:	PROC[Handle];
TypeAllGroups:		PROC[Handle];
ModifyAllOccurrences:	PROC[Handle];
VerifyAllGroups:	PROC[Handle];




-- Exported by MaintainComm --

Update:		PROC[handle:	Handle,
		     op:        ProtocolDefs.RSOperation,
		     name:      BodyDefs.RName,
		     value:     BodyDefs.RName ← NIL,
		     connect:   BodyDefs.Connect ← NIL,
		     remark:    BodyDefs.Remark ← NIL,
		     key:       BodyDefs.Password ← [0,0,0,0],
                     sendRList: PROC[ProtocolDefs.Handle] ← NIL ];

Operate:	PROC[handle:	Handle,
		     op:        ProtocolDefs.RSOperation,
		     name:      BodyDefs.RName,
		     value:     BodyDefs.RName ← NIL,
		     connect:   BodyDefs.Connect ← NIL,
		     remark:    BodyDefs.Remark ← NIL,
		     key:       BodyDefs.Password ← [0,0,0,0],
                     sendRList: PROC[ProtocolDefs.Handle] ← NIL ]
		RETURNS[ rc: ProtocolDefs.ReturnCode ];




-- exported by MaintainDetails --

CopyName:	PROC[from, to: BodyDefs.RName];

CantCheckName:	SIGNAL[bad: BodyDefs.RName];
BadName:	SIGNAL[bad: BodyDefs.RName];
BadConnect:	SIGNAL[bad: BodyDefs.Connect];

VerifyOnOff:	PROC[Handle];

CheckMailName:	PROC[name: BodyDefs.RName];
	-- may raise CantCheckName or BadName --

CheckSiteName:	PROC[name: BodyDefs.RName];
	-- may raise CantCheckName or BadName or BadConnect --

CheckRealName:	PROC[name: BodyDefs.RName];
	-- may raise CantCheckName or BadName --

CheckConnect:	PROC[connect: BodyDefs.Connect];
	-- may raise BadConnect --

Command:	TYPE = RECORD[name: STRING, work: PROC[Handle] ];

Parse:		PROC[Handle, DESCRIPTOR FOR ARRAY OF Command, STRING];

ReadWord:	PROC[str: GlassDefs.Handle, prompt, dest: STRING];
	-- may raise Del --

ReadPassword:	PROC[str: GlassDefs.Handle,
		     text, pwd: STRING]
		RETURNS[key: BodyDefs.Password];
	-- may raise Del --

Confirm:	PROC[str: GlassDefs.Handle] RETURNS[ BOOLEAN ];
	-- may raise Del --

TypeType:	PROC[str: GlassDefs.Handle,
		     type: ProtocolDefs.RNameType];




-- Exported by MaintainErrors --

TypeRC:		PROC[handle: Handle,
		     op: ProtocolDefs.RSOperation,
		     rc: ProtocolDefs.ReturnCode,
		     name: BodyDefs.RName,
		     value: STRING];

ProposalType:	TYPE = { either, group, individual };

ProposeName:	PROC[handle: Handle,
		     name: BodyDefs.RName,
		     wanted: ProposalType];

END.