-- FTPAccessories.mesa,  Edit: HGM December 15, 1980  11:03 PM  

-- Copyright  Xerox Corporation 1979, 1980

DIRECTORY
  FTPDefs,
  FTPPrivateDefs,
  String USING [AppendString];

FTPAccessories: PROGRAM
  -- import list


  IMPORTS String, FTPPrivateDefs
  -- export list

  EXPORTS FTPPrivateDefs
  -- share list

  SHARES FTPPrivateDefs =
  BEGIN OPEN FTPDefs, FTPPrivateDefs;

  -- **********************!  Constants  !***********************

  ftpsystem: POINTER TO FTPSystem = LocateFtpSystemObject[];

  -- **********************!  Module Presence Test Procedure  !***********************

  AccessoriesLoaded: PUBLIC PROCEDURE =
    BEGIN
    -- report in
    ftpsystem.accessoriesLoaded ← TRUE;
    END;

  -- **********************!  Verbalization Primitives  !***********************

  VerbalizeFtpError: PUBLIC PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- append message to string
    SELECT ftpError FROM
      IN CommunicationError => VerbalizeCommunicationError[ftpError, message];
      IN CredentialError => VerbalizeCredentialError[ftpError, message];
      IN FileError => VerbalizeFileError[ftpError, message];
      IN DumpError => VerbalizeDumpError[ftpError, message];
      IN MailError => VerbalizeMailError[ftpError, message];
      IN ClientError => VerbalizeClientError[ftpError, message];
      IN ProtocolError => VerbalizeProtocolError[ftpError, message];
      IN InternalError => VerbalizeInternalError[ftpError, message];
      ENDCASE => VerbalizeUnidentifiedError[ftpError, message];
    -- IN UnidentifiedError

    END;

  VerbalizeCommunicationError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	noSuchHost => "No such host"L,
	connectionTimedOut => "Connection timed out"L,
	connectionRejected => "Connection rejected"L,
	connectionClosed => "Connection closed"L,
	noRouteToNetwork => "No route to network"L,
	connectionAbortedLocally => "Connection aborted locally"L,
	noNameLookupResponse => "No name lookup response"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeCredentialError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	credentialsMissing => "Credentials missing"L,
	noSuchPrimaryUser => "No such primary user"L,
	noSuchSecondaryUser => "No such secondary user"L,
	incorrectPrimaryPassword => "Incorrect primary password"L,
	incorrectSecondaryPassword => "Incorrect secondary password"L,
	requestedAccessDenied => "Requested access denied"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeFileError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	illegalFilename => "Illegal filename"L,
	noSuchFile => "No such file"L,
	fileAlreadyExists => "File already exists"L,
	fileBusy => "File busy"L,
	noRoomForFile => "No room for file"L,
	fileDataError => "File data error"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeDumpError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	errorBlockInDumpFile => "Error block in dump file"L,
	unrecognizedDumpFileBlock => "Unrecognized dump file block"L,
	dumpFileBlockTooLong => "Dump file block too long"L,
	dumpFileCheckSumInError => "Dump file checksum in error"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeMailError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	noValidRecipients => "No valid recipients"L,
	noSuchMailbox => "No such mailbox"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeClientError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	filePrimitivesNotSpecified => "File primitives not specified"L,
	mailPrimitivesNotSpecified => "Mail primitives not specified"L,
	communicationPrimitivesNotSpecified =>
	  "Communication primitives not specified"L,
	filesModuleNotLoaded => "Files module not loaded"L,
	mailModuleNotLoaded => "Mail module not loaded"L,
	noConnectionEstablished => "No connection established"L,
	connectionAlreadyEstablished => "Connection already established"L,
	connectionNotOpenedForFiles => "Connection not opened for files"L,
	connectionNotOpenedForMail => "Connection not opened for mail"L,
	illegalProcedureCallSequence => "Illegal procedure call sequence"L,
	fileGroupDesignatorUnexpected => "File group designator unexpected"L,
	filenameUnexpected => "Filename unexpected"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeProtocolError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	protocolVersionMismatch => "Protocol version mismatch"L,
	functionNotImplemented => "Function not implemented"L,
	inputDiscontinuityUnexpected => "Input discontinuity unexpected"L,
	outputDiscontinuityUnexpected => "Output discontinuity unexpected"L,
	illegalProtocolSequence => "Illegal protocol sequence"L,
	protocolParameterListMissing => "Protocol parameter list missing"L,
	illegalProtocolParameterList => "Illegal protocol parameter list"L,
	unrecognizedProtocolParameter => "Unrecognized protocol parameter"L,
	missingProtocolParameter => "Missing protocol parameter"L,
	duplicateProtocolParameter => "Duplicate protocol parameter"L,
	illegalBooleanParameter => "Illegal boolean parameter"L,
	illegalFileAttribute => "Illegal file attribute"L,
	illegalFileType => "Illegal file type"L,
	unrecognizedProtocolErrorCode => "Unrecognized protocol error code"L,
	noSuchRecipientNumber => "No such recipient number"L,
	duplicateMailboxException => "Duplicate mailbox exception"L,
	unrecognizedMailboxExceptionErrorCode =>
	  "Unrecognized mailbox exception error code"L,
	missingMessageLength => "Missing message length"L,
	messageLongerThanAdvertised => "Message longer than advertised"L,
	messageShorterThanAdvertised => "Message shorter than advertised"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeInternalError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	stringTooLong => "String too long"L,
	queueInconsistent => "Queue inconsistent"L,
	unexpectedEndOfFile => "Unexpected end of file"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeUnidentifiedError: PROCEDURE [ftpError: FtpError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT ftpError FROM
	unidentifiedTransientError => "Unidentified transient error"L,
	unidentifiedPermanentError => "Unidentified permanent error"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  VerbalizeRecipientError: PUBLIC PROCEDURE [
    recipientError: RecipientError, message: STRING] =
    BEGIN
    -- Note:  Appends message to string.
    -- local constants
    srcMessage: STRING =
      SELECT recipientError FROM
	noSuchMailbox => "No such mailbox"L,
	noForwardingProvided => "No forwarding provided"L,
	unspecifiedTransientError => "Unspecified transient error"L,
	unspecifiedPermanentError => "Unspecified permanent error"L,
	ENDCASE => "Unidentified error"L;
    -- append message to string
    String.AppendString[message, srcMessage];
    END;

  -- **********************!  Main Program  !***********************

  -- no operation

  END. -- of FTPAccessories