-- file: STP.mesa Edited by:
-- Smokey on: Oct 3, 1980 8:17 AM
-- Karlton on: Sep 29, 1980 2:48 PM
DIRECTORY
Ascii USING [NUL],
Compatibility USING [SHandle],
Stream USING [
Handle, InputOptions, SetSSTProcedure, SendAttentionProcedure, WaitAttentionProcedure],
System USING [gmtEpoch],
Time USING [Packed];
STP: DEFINITIONS =
BEGIN
-- Types and data
Handle: TYPE = POINTER TO Object;
Object: TYPE;
Access: TYPE = {read, write};
Completion: TYPE = {ok, error};
Continue: TYPE = {yes, no};
Confirmation: TYPE = {do, skip, abort};
CompletionProcType: TYPE = PROCEDURE [what: Completion, fileOrError: STRING];
ConfirmProcType: TYPE = PROCEDURE [file: STRING]
RETURNS [answer: Confirmation, localStream: Stream.Handle];
NoteFileProcType: TYPE = PROCEDURE [file: STRING] RETURNS [continue: Continue];
FileInfo: TYPE = POINTER TO FileInfoObject;
FileInfoObject: TYPE = RECORD [
directory, body, version: STRING ← NIL,
author: STRING ← NIL,
create, read, write: STRING ← NIL,
size: LONG CARDINAL ← 0,
type: FileType ← unknown];
FileType: TYPE = {binary, text, unknown};
defaultOptions: Stream.InputOptions = [
terminateOnEndPhysicalRecord: FALSE,
signalLongBlock: FALSE,
signalShortBlock: FALSE,
signalSSTChange: TRUE,
signalEndOfStream: TRUE];
-- Procedures
Close: PROCEDURE [stp: Handle];
Connect: PROCEDURE [stp: Handle, name, password: STRING];
Create: PROCEDURE RETURNS [stp: Handle];
CreateRemoteStream: PROCEDURE [
stp: Handle,
file: STRING,
access: Access,
fileType: FileType ← unknown,
options: Stream.InputOptions ← defaultOptions,
creation: Time.Packed ← System.gmtEpoch]
RETURNS[stream: Stream.Handle];
Delete: PROCEDURE [
stp: Handle,
name: STRING,
confirm: ConfirmProcType ← NIL,
complete: CompletionProcType ← NIL];
Destroy: PROCEDURE [stp: Handle] RETURNS [Handle];
Enumerate: PROCEDURE [stp: Handle, name: STRING, proc: NoteFileProcType];
GetFileInfo: PROCEDURE [stp: Handle] RETURNS [FileInfo];
Login: PROCEDURE [stp: Handle, name, password: STRING];
NextFileName: PROCEDURE [remoteStream: Stream.Handle] RETURNS [file: STRING];
Open: PROCEDURE [stp: Handle, host: STRING] RETURNS [herald: STRING];
Rename: PROCEDURE [stp: Handle, old, new: STRING];
Retrieve: PROCEDURE [
stp: Handle,
file: STRING,
confirm: ConfirmProcType ← NIL,
complete: CompletionProcType ← NIL];
SetHost: PROCEDURE [stp: Handle, host: STRING];
SetDirectory: PROCEDURE [stp: Handle, directory: STRING];
Store: PROCEDURE [
stp: Handle,
file: STRING,
stream: Stream.Handle ← NIL,
noteFile: NoteFileProcType ← NIL,
fileType: FileType ← unknown,
creation: Time.Packed ← System.gmtEpoch];
-- For Alto/Pilot Compatibility purposes
CreateFileStream: PROCEDURE [
file: STRING,
access: Access ← read,
stream: Compatibility.SHandle ← NIL,
fileType: FileType ← unknown,
options: Stream.InputOptions ← defaultOptions]
RETURNS[Stream.Handle];
GetFileTimes: PROCEDURE [stream: Stream.Handle]
RETURNS[create, write, read: Time.Packed];
-- Nop Procedures
SetSSTNop: Stream.SetSSTProcedure;
SendAttentionNop: Stream.SendAttentionProcedure;
WaitAttentionNop: Stream.WaitAttentionProcedure;
-- Signals and Errors
Error: SIGNAL [
code: ErrorCode, error: STRING, reply: CHARACTER ← Ascii.NUL];
-- reply is the code passed from server (see STPReplyCode.mesa)
ErrorCode: TYPE = {
-- connection errors
noSuchHost, noRouteToNetwork, noNameLookupResponse, alreadyAConnection,
noConnection, connectionClosed, connectionRejected,
connectionTimedOut,
-- credentials errors
accessDenied, illegalUserName, illegalUserPassword, illegalUserAccount,
illegalConnectName, illegalConnectPassword, credentailsMissing,
-- protocol errors
protocolError,
-- file errors
illegalFileName, noSuchFile, requestRefused,
-- remote stream errors
accessError,
-- catch all
undefinedError};
ConnectionErrors: TYPE = ErrorCode[noSuchHost..connectionTimedOut];
CredentialsErrors: TYPE = ErrorCode[accessDenied..credentailsMissing];
FileErrors: TYPE = ErrorCode[illegalFileName..requestRefused];
END. -- end of STP