Adobe2.cr
Copyright Ó 1990, 1992 by Xerox Corporation. All rights reserved.
Bill Jackson (bj), March 27, 1990 2:02:58 pm PST
Derived from Adobe of Mesa 14.0
ref: [Peabody:OSBU North:Xerox]<AMesa>14.0>Adobe>Private>
Note:
The Services implementation of this protocol does not conform to the Courier Presentation level specificiations. This Courier program is an attempt to define the closest possible protocol which does conform. Starting with the code generated by Sirocco for this program, a small number of hand edits allow it to interact with the exisiting software.
Adobe: PROGRAM 75 VERSION 2 = BEGIN
DEPENDS UPON
BulkData (0) VERSION 1,
CHName (2) VERSION 0,
Time (15) VERSION 2;
Filing (10) VERSION 5;
Common Definitions
nullTime: Time.Time = Time.earliestTime; -- seconds
EmptyRecord: TYPE = RECORD [ ];
Signals and Errors
CommunicationError: ERROR [ ] = 0;
UnknownSystem: ERROR [ ] = 1;
CantDetermineLocOfARs: ERROR [ ] = 2;
IllegalLogin: ERROR [ ] = 3;
SystemAlreadyExists: ERROR [ ] = 4;
FileNotFound: ERROR [ ] = 5;
ServerUnreachable: ERROR [ ] = 6;
ServerDown: ERROR [ ] = 7;
NoAdobeServiceAtServer: ERROR [ ] = 8;
CourierTimedOut: ERROR [ ] = 9;
ParameterInconsistency: ERROR [ ] = 10;
ObsoleteVersion: ERROR [ ] = 11;
SystemNotRegistered: ERROR [ ] = 12;
SysDescChanging: ERROR [ ] = 13;
Others: ERROR [ ] = 14;
TooManyConnections: ERROR [ ] = 15;
Spare1: ERROR [ ] = 16;
Spare2: ERROR [ ] = 17;
Xxx: ERROR [ ] = 31;
Error: ERROR [ why: Problem ] = 99;
Problem: TYPE = { communicationError(0), unknownSystem(1), cantDetermineLocOfARs(2), illegalLogin(3), systemAlreadyExists(4), fileNotFound(5), serverUnreachable(6), serverDown(7), noAdobeServiceAtServer(8), courierTimedOut(9), parameterInconsistency(10), obsoleteVersion(11), systemNotRegistered(12), sysDescChanging(13), others(14), tooManyConnections(15), spare1(16), spare2(17), xxx(31) };
Operational Semantics
The following 3 procedures are to be called when storing (i.e. submit or checkin) an AR; AboutToStore and CompletedUpdate are provided to protect against lost AR edits;
The sequence should be:
AboutToStore[...];
ARAccess.SubmitAR[...] or ARAccess.CheckInAR[...];
UpdateAcceleratorField[...]; -- for each field that changed;
...
UpdateAcceleratorField[...];
CompletedUpdate[...];
Simple Types
ServerName: TYPE = CHName.Name;
Database: TYPE = STRING;
ARVersion: TYPE = LONG CARDINAL;
ARNumber: TYPE = LONG CARDINAL;
SubmitNumber: TYPE = LONG CARDINAL;
Numeric: TYPE = LONG CARDINAL;
DependsOnIndex: TYPE = CARDINAL;
BoundedString: TYPE = RECORD [string: STRING, max: CARDINAL];
StartOrStop: TYPE = { start(0), stop(1) };
Reference: TYPE = SEQUENCE OF UNSPECIFIED;
Reference: TYPE = NSFile.Reference;
Types
DatabaseSequence: TYPE = SEQUENCE OF STRING;
Target: TYPE = RECORD [--server: ServerName,-- system: Database];
StaticTarget: TYPE = RECORD [target: Target, version: ARVersion];
LocationTarget: TYPE = RECORD [host: STRING, directory: STRING];
Database Description
Description: TYPE = RECORD [
name: STRING, -- name of the ARSystem
host: STRING, -- file server where the ARs are stored
directory: STRING, -- directory where the ARs are stored
refCount: CARDINAL, -- number of active Adobe tools using this system
version: ARVersion, -- description version
fieldList: FieldList
];
Fields
FieldItemValue: TYPE = FieldItem;
FieldList: TYPE = SEQUENCE OF FieldItem;
FieldType: TYPE = { ar(0), time(1), numeric(2), bounded(3), enumerated(4), string(5) };
FieldItem: TYPE = CHOICE FieldType OF {
ar  => ARField,  --(0),
time  => TimeField, --(1),
numeric  => NumericField, --(2),
bounded  => BoundedField, --(3),
enumerated  => EnumeratedField, --(4),
string  => StringField --(5)
};
ARField: TYPE = RECORD [
name: STRING,
tools: ToolData,
ar: EmptyRecord
];
TimeField: TYPE = RECORD [
name: STRING,
tools: ToolData,
time: EmptyRecord
];
NumericField: TYPE = RECORD [
name: STRING,
tools: ToolData,
numeric: EmptyRecord
];
BoundedField: TYPE = RECORD [
name: STRING,
tools: ToolData,
bounded: CARDINAL
];
EnumeratedField: TYPE = RECORD [
name: STRING,
tools: ToolData,
field: DependsOnIndex,
possibilities: KeyedPossibilitiesList
];
StringField: TYPE = RECORD [
name: STRING,
tools: ToolData,
string: EmptyRecord
];
Enumerated
KeyedPossibilitiesList: TYPE = SEQUENCE OF PossibilityList;
length is encoded as a smashed value in the ToolData!
PossibilityList: TYPE = RECORD [
keyedDependency: DependsOnIndex,
enumRecs: EnumerationList
];
EnumerationList: TYPE = SEQUENCE OF TaggedItem;
length is encoded improperly and appears both before the field of EnumeratedField for the first case, and before the last keyedDependency in a PossibilityList!
TaggedItem: TYPE = RECORD [
tag: STRING,
item: CARDINAL
];
Tool(s) Info
ToolType: TYPE = { edit(0), submit(1), report(2), query(3), sort(4), queryList(5) };
ToolData: TYPE = ARRAY 6 OF InfoStuff;
InfoStuff: TYPE = RECORD [
default: STRING,
required: BOOLEAN,
place: Coordinate,
width: CARDINAL
];
Coordinate: TYPE = RECORD [
ord: INTEGER,
co: INTEGER
];
Changes
ChangeList: TYPE = SEQUENCE OF ChangeItem;
ChangeItem: TYPE = RECORD [name: STRING, value: ChangeItemValue];
ChangeType: TYPE = { modify(0), add(1), remove(2) };
ChangeItemValue: TYPE = CHOICE ChangeType OF {
add  => FieldItemValue, --(0),
modify  => FieldItemValue, --(1),
remove  => EmptyRecord --(2)
};
Queries
QueryList: TYPE = SEQUENCE OF QueryItem;
QueryItem: TYPE = RECORD [name: STRING, value: QueryItemValue];
Relation: TYPE = { equal(0), notEqual(1), lessThan(2), lessThanOrEqual(3), greaterThan(4), greaterThanOrEqual(5), in(6), notIn(7) };
QueryItemValue: TYPE = RECORD [op: Relation, value: FieldItemValue];
Action Request Set(s)
SetOfARs: TYPE = SEQUENCE OF RunOfARs;
RunOfARs: TYPE = RECORD [
ar: ARNumber,
runLength: LONG CARDINAL
];
Procedures
GetResidentSystems: PROCEDURE [ ]
RETURNS [ systems: DatabaseSequence ]
REPORTS [ Error ] = 17;
Procedures
GetVersion: PROCEDURE [ target: Target ]
RETURNS [ version: ARVersion ]
REPORTS [ Error ] = 12;
ReadLastARNumber: PROCEDURE [ target: Target ]
RETURNS [ lastAR: ARNumber ]
REPORTS [ Error ] = 2;
Procedures
GetSystemDescription: PROCEDURE [ target: Target ]
RETURNS [ description: Description ]
REPORTS [ Error ] = 14;
PutSystemDescription: PROCEDURE [ target: Target, description: Description ]
REPORTS [ Error ] = 13;
GetSystemDefaultUserFile: PROCEDURE [ target: Target, to: BulkData.Sink ]
RETURNS [ bytesInFile: CARDINAL ]
REPORTS [ Error ] = 16;
PutSystemDefaultUserFile: PROCEDURE [ target: Target, from: BulkData.Source ]
REPORTS [ Error ] = 15;
GetStartOrStopTime: PROCEDURE [ target: Target, which: StartOrStop ]
RETURNS [ startOrStopTime: Time.Time ]
REPORTS [ Error ] = 20;
PutStartOrStopTime: PROCEDURE [ target: Target, which: StartOrStop, startOrStopTime: Time.Time ]
REPORTS [ Error ] = 19;
GetLocationOfARs: PROCEDURE [ target: Target ]
RETURNS [ referenceToARs: Reference ]
REPORTS [ Error ] = 9;
ChangeLocationOfARs: PROCEDURE [ target: Target, newLocation: LocationTarget ]
REPORTS [ Error ] = 10; <<putLocationOfARs>>
GetNextSubmitNumber: PROCEDURE [ target: Target ]
RETURNS [ submitNumber: SubmitNumber ]
REPORTS [ Error ] = 0;
PutSubmitNumber: PROCEDURE [ target: Target, submitNumber: SubmitNumber ]
REPORTS [ Error ] = 1;
MakeAcceleratorFileForField: PROCEDURE [ target: Target, fieldName: STRING, fieldList: FieldList]
REPORTS [ Error ] = 22;
UpdateAccelerators: PROCEDURE [ target: Target, arSet: SetOfARs ]
REPORTS [ Error ] = 5;
CompletedUpdate: PROCEDURE [ target: Target, arNumber: ARNumber ]
REPORTS [ Error ] = 8;
Procedures
AboutToStore: PROCEDURE [ instance: StaticTarget, arNumber: ARNumber ]
REPORTS [ Error ] = 6;
ChangeFieldList: PROCEDURE [ instance: StaticTarget, changes: ChangeList ]
REPORTS [ Error ] = 11; <<putVersionID>>
GetAcceleratorInfo: PROCEDURE [ instance: StaticTarget, arSet: SetOfARs, fieldList: FieldList, to: BulkData.Sink ]
REPORTS [ Error ] = 21;
LookupARs: PROCEDURE [ instance: StaticTarget, query: QueryItem, boundSet: SetOfARs ]
RETURNS [ arSet: SetOfARs ]
REPORTS [ Error ] = 4;
UpdateAcceleratorField: PROCEDURE [ instance: StaticTarget, arNumber: ARNumber, field: FieldItem ]
REPORTS [ Error ] = 7;
VerifyVersion: PROCEDURE [ instance: StaticTarget ]
RETURNS [ok: BOOLEAN]
REPORTS [ Error ] = 18;
Procedures
SubmitFailed: PROCEDURE [ target: Target, arNumber: ARNumber, version: ARVersion ]
REPORTS [ Error ] = 3;
END.