//tsp.decl declarations for Tape Server Protocol // G. Krasner November 19, 1979 // Last modified by Tim Diebert, June 2, 1980 10:28 AM manifest [ rwBlockLength = 16384 + 4 + 20 //max length of this block (16K+4word header+20word slop for ucode) cmdBlockLength = 128 //max length of typical cmdBlock maxServers = 2 //max number of servers allowed maxDrives = 2 //max number of drives allowed lenService = 9 //nine words in Service block muchcore = #77000 //max amount of core tapeSocket = #44 //Tape server rendezvous socket //Version information currentVersion = 0 //currently version 0 // when changing currentVersion, be sure to also change // currentVersionString in tspserver.bcpl // command(message) types: cmdYes = #1 cmdNo = #2 cmdVersion = #3 cmdSendText = #4 cmdGetText = #5 cmdOpenDrive = #6 cmdCloseDrive = #7 cmdReadRecord = #10 cmdWriteRecord = #11 cmdFwdSpaceRecord = #12 cmdBackSpaceRecord = #13 cmdFwdSpaceFile = #14 cmdBackSpaceFile = #15 cmdWriteEOF = #16 cmdWriteBlankTape = #17 cmdRewind = #20 cmdUnload = #21 cmdGetStatus = #22 cmdSetStatus = #23 cmdHereIsText = #24 cmdHereIsRecord = #25 cmdHereIsStatus = #26 // Message selectors for ReplyNo doneOperation = 0 noGoodMessage = 1 openAlready = 2 driveInUse = 3 badDrive = 4 badDriveNo = 5 driveNotOpened = 6 noVersion = 7 badStatusSelector = 8 badRetrySetting = 9 writeProtected = 10 badSpeedSetting = 11 // Status selectors setRetries = 0 //set number of retries allowed for reads/writes setSpeed = 1 //unused for now, could be set speed for drive ] structure Service: //Service block for Server [ idnumber word //unique id for this instance bspSoc word //BSP socket bspStr word //BSP stream cmdBlock word //block allocated for commands for this instance //above are allocated by Connector, //below are used locally by a Server tape word //pointer to a tape object (returned by OpenTape) blk word //current block used (either cmdBlock or rwBlock) drive word //current tape drive number or -1 if unopened retries word //number of retries allowed speed word //speed of this drive (IPS45,IPS125) ] structure Message: // general message structure (also used by msgs with no params) [ length word // length in words including overhead type word // command/response type // contents↑0,0 word ] structure GMessage: //General Message structure [ @Message //length and type data word //first data word ] structure YesNo: //Yes and No commands [ @Message cause word //what caused this yes or no code word //an integer str @String // a string ] structure Version: // Version command [ @Message versno word // an integer verstext @String // Bcpl string ] structure SendText: // SendText command [ @Message text @String ] structure GetText: //GetText command [ @Message ] structure OpenDrive: // OpenDrive command [ @Message driveNumber word // an integer userID @String // Bcpl string ] structure CloseDrive: // Close Drive command [ @Message ] structure ReadRecord: // ReadRecord command [ @Message ] structure WriteRecord: // WriteRecord command [ @Message recordLength word // in bytes record↑0,0 byte ] structure FwdSpaceRecord: // Fwd Space Record comand [ @Message ] structure BackSpaceRecord: // Back Space Record comand [ @Message ] structure FwdSpaceFile: // Fwd Space File comand [ @Message ] structure BackSpaceFile: // Back Space File comand [ @Message ] structure WriteEndOfFile: // Write End Of File comand [ @Message ] structure WriteBlankTape: // WriteBlankTape command [ @Message gap word // in inches ] structure Rewind: // Rewind comand [ @Message ] structure Unload: // Unload comand [ @Message ] structure GetStatus: // Get Status comand [ @Message ] structure SetStatus: // SetStatus command [ @Message selector word // selector of which parameter to set newsetting word // new setting for that selector ] structure HereIsText: // HereIsText command [ @Message text @String ] structure HereIsRecord: // HereIsRecord command [ @Message endingStatus word //tape drive ending status recordLength word // in bytes record↑0,0 byte ] structure HereIsStatus: // HereIsStatus command [ @Message drive word //drive number if open, -1 if not tstatus word //tape status bits if open, dont care otherwise retries word //number of retries currently in force, else dont care speed word //tape speed, 0=ips45, 1=ips125 ]