DIRECTORY PupStream USING [CloseReason], IO USING [STREAM], Rope USING [ROPE], STP USING [Access, CompletionProcType, ConfirmProcType, DesiredProperties, ErrorCode, FileInfo, Type, ValidProperties], BasicTime USING [GMT]; STPOps: CEDAR DEFINITIONS = BEGIN OPEN BasicTime, IO, Rope; maxStringLength: CARDINAL = 100; Handle: TYPE = REF Object; Object: TYPE = RECORD[ byteStream: STREAM _ NIL, userState: ARRAY UserProperties OF ROPE _ ALL[NIL], gotMark: BOOLEAN _ FALSE, mark: [0..256) _ NULL, remoteString: ROPE _ NIL, host: ROPE _ NIL, serverType: ServerType _ unknown, plist: PList _ NIL, desiredProps: STP.DesiredProperties _ ALL[TRUE], info: STP.FileInfo _ NIL, remoteStream: RemoteStream _ NIL]; RemoteStream: TYPE = REF RemoteObject; RemoteObject: TYPE = RECORD[ state: RemoteStreamState, access: STP.Access, stp: Handle]; FilenameType: TYPE = {alto, tenex}; Operation: TYPE = {delete, directory, retrieve, store}; ServerType: TYPE = {ifs, tenex, unknown}; PListArray: TYPE = ARRAY STP.ValidProperties OF ROPE; PList: TYPE = REF PListArray; RemoteStreamState: TYPE = {initial, confirm, data, complete, end}; ValidProperties: TYPE = STP.ValidProperties; FileProperties: TYPE = STP.ValidProperties[directory..author]; UserProperties: TYPE = STP.ValidProperties[userName..directory]; DoFiles: PROCEDURE [ stp: Handle, file: ROPE, confirm: STP.ConfirmProcType, complete: STP.CompletionProcType, op: Operation]; GetCommand: PROCEDURE [stp: Handle] RETURNS[mark: [0..256), code: CHARACTER, ps: ROPE]; GetFile: PROCEDURE [stp: Handle, stream: STREAM, file: ROPE] RETURNS [gotIt: BOOLEAN, code: CHARACTER]; GetHereIsAndPList: PROCEDURE [stp: Handle, gobbleEOC: BOOLEAN _ TRUE]; GetPList: PROCEDURE [stp: Handle, gobbleEOC: BOOLEAN _ TRUE, propertiesOk: BOOL _ FALSE]; PutCommand: PROCEDURE [stp: Handle, mark: [0..256), code: CHARACTER, string: ROPE, sendEOC: BOOLEAN _ TRUE]; PutFile: PROCEDURE [stp: Handle, stream: STREAM, file: ROPE, sendEOC: BOOLEAN _ TRUE]; PutPList: PROCEDURE [stp: Handle, mark: [0..256), sendEOC: BOOLEAN _ TRUE]; CollectString: PROCEDURE [stp: Handle] RETURNS[ ROPE ]; CollectCode: PROCEDURE [stp: Handle] RETURNS[code: CHARACTER]; CheckConnection: PROCEDURE [stp: Handle]; ErrorIfNextNotEOC: PROCEDURE [stp: Handle]; ErrorIfNextNotYes: PROCEDURE [stp: Handle]; FindFileType: PROCEDURE [stream: STREAM] RETURNS[fileType: STP.Type]; GetServerType: PROCEDURE [server: ROPE] RETURNS [serverType: ServerType]; LookAtMark: PROCEDURE [stp: Handle] RETURNS [[0..256)]; MakeRemoteName: PROCEDURE [plist: PList, type: FilenameType] RETURNS[name: ROPE]; MyGetChar: PROCEDURE [stp: Handle] RETURNS [char: CHARACTER]; MyGetMark: PROCEDURE [stp: Handle] RETURNS [[0..256)]; MyPutString: PROCEDURE [byteStream: STREAM, string: ROPE]; PropertyString: PROCEDURE [prop: ValidProperties] RETURNS [string: ROPE]; -- Global string SelectError: PROCEDURE [stp: Handle, s: ROPE, mark: [0..256)]; SetByteSize: PROCEDURE [stp: Handle, fileType: STP.Type]; SetCreateTime: PROCEDURE [stp: Handle, creation: GMT]; SetFileType: PROCEDURE [stp: Handle, fileType: STP.Type]; SmashClosed: PROCEDURE [stp: Handle]; DestroyPList: PROCEDURE [plist: PList] RETURNS [PList]; MakePList: PROCEDURE RETURNS[plist: PList]; NameToPList: PROCEDURE [plist: PList, name: ROPE, type: FilenameType]; PListToName: PROCEDURE [plist: PList, type: FilenameType] RETURNS[name: ROPE]; PutPListItem: PROCEDURE [byteStream: STREAM, property: ValidProperties, value: ROPE]; ResetPList: PROCEDURE [plist: PList]; SetPListItem: PROCEDURE [plist: PList, property, value: ROPE]; UserStateToPList: PROCEDURE [stp: Handle]; BadProperty: ERROR; MarkEncountered: ERROR; ErrorCodeToSTPErrorCode: PROCEDURE [errorCode: STP.ErrorCode, code: CHARACTER] RETURNS[STP.ErrorCode]; GenerateErrorString: PROCEDURE [ stp: Handle, errorCode: STP.ErrorCode, string: ROPE, code: CHARACTER _ 0C]; GenerateStreamClosingError: PROCEDURE [stp: Handle, why: PupStream.CloseReason]; GenerateProtocolError: PROCEDURE [ stp: Handle, type: ProtocolError, mark: [0..256), code: CHARACTER _ 0C]; ProtocolError: TYPE = {badVersion, badMark, badPList, eocExpected, noCode}; markRetrieve: [0..256) = 1B; markStore: [0..256) = 2B; markYes: [0..256) = 3B; markNo: [0..256) = 4B; markHereIsFile: [0..256) = 5B; markEOC: [0..256) = 6B; markComment: [0..256) = 7B; markIAmVersion: [0..256) = 10B; markNewStore: [0..256) = 11B; markDirectory: [0..256) = 12B; markHereIsPList: [0..256) = 13B; markYouAreUser: [0..256) = 14B; markNewDirectory: [0..256) = 14B; -- (notice: same as markYouAreUser) markAbort: [0..256) = 15B; markDelete: [0..256) = 16B; markRename: [0..256) = 17B; markStoreMail: [0..256) = 20B; markRetrieveMail: [0..256) = 21B; markFlushMailBox: [0..256) = 22B; markMailBoxException: [0..256) = 23B; END. -- end of STPOps ςSTPOps.mesa Edited by: Copyright c 1985 by Xerox Corporation. All rights reserved. Smokey, 17-Jul-81 7:57:15 JGS, 17-Aug-81 11:24:06 Karlton, 10-Nov-81 16:51:38 Daniels, 21-Sep-82 13:00:07 Davirro, 16-Nov-82 17:48:07 Andrew Birrell June 1, 1983 2:47 pm Mike Schroeder, December 7, 1983 10:40 am Constants Types Procedures for doing FTP protocol operations Utility routines PList Utilities Internal ERRORs and SIGNALs Registered STP Mark Byte Commands Registered Mail Mark Byte Commands Κ£˜codešœ™Kšœ Οmœ1™Kšœžœžœ&˜@K˜—Kšœ.™.˜šΟnœž œ˜K˜ Kšœžœ˜ Kšœ žœ˜Kšœ žœ˜!K˜—šŸ œž œ˜#Kšžœž œžœ˜3—šŸœž œžœžœ˜KšŸœž œ˜)KšŸœž œ˜+KšŸœž œ˜+Kš Ÿ œž œ žœžœ žœ˜EKšŸ œž œ žœžœ˜IKšŸ œž œžœ ˜7šŸœž œ#˜KšŸ œž œžœ˜9KšŸ œž œžœ˜6KšŸ œž œžœ˜9KšŸ œž œ˜%K˜—Kšœ™˜KšŸ œž œžœ ˜7KšŸ œž œžœ˜+KšŸ œž œžœ˜FšŸ œž œ#˜9Kšžœžœ˜—šŸ œž œžœ˜,Kšœ"žœ˜(—KšŸ œž œ˜%KšŸ œž œ!žœ˜>KšŸœž œ˜*K˜—Kšœ™˜Kšœ žœ˜Kšœžœ˜šŸœž œ žœž œ˜NKšžœžœ ˜—šŸœž œ˜ Kšœžœžœž œ˜K—KšŸœž œ+˜PšŸœž œ˜"Kšœ8ž œ˜HK˜—Kšœžœ8˜KK˜—Kšœ!™!˜K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜ K˜Kšœ" #˜EK˜K˜K˜K˜—Kšœ"™"˜K˜K˜!K˜!K˜%K˜Kšžœ ˜K˜K˜——…—ΈM