Home
Patent Search
IMT Blog
REGISTER
|
SIGN IN
United States Patent
5421015
Khoyi , ; et al.
May 30, 1995
Title
Multitasking system having an application integration mechanism for linking differently typed data objects
Abstract
An object based data processing system including an extensible set of object types and a corresponding set of "object managers" wherein each object manager is a program for operating with the data stored in a corresponding type of object. The object managers in general support at least a standard set of operations. Any program can effect performance of these standard operations on objects of any type by making an "invocation" request. In response to an invocation request, object management services (which are available to all object managers) identifies and invokes an object manager that is suitable for performing the requested operation on the specified type of data. A mechanism is provided for linking data from one object into another object. A object catalog includes both information about objects and about links between objects. Data interchange services are provided for communicating data between objects of different types, using a set of standard data interchange formats. A matchmaker facility permits two processes that are to cooperate in a data interchange operation identify each other and to identify data formats they have in common. A facility is provided, for managing shared data "resources". Customized versions of resources can be created and co-exist with standard resources. A resource retrieval function determines whether a customized or a standard resource is to be returned in response to each request for a resource.
Inventors:
Khoyi; Dana
(Dracut,
MA
)
, San Soucie; Marc
(Tyngsboro,
MA
)
, Surprenant; Carolyn E.
(Dracut,
MA
)
, Stern; Laura O.
(Woburn,
MA
)
, Pham; Ly-Huong T.
(Chelmsford,
MA
)
Assignee:
Wang Laboratories, Inc.
(Lowell,
MA
)
Appl. No.:
123819
Filed:
September 20, 1993
Current U.S. Class:
718/107
719/315
719/317
719/330
Field of Search:
395/375,500,650,325,800
Parent Case Text
CROSS REFERENCE TO RELATED APPLICATIONS
The present application is a continuation of U.S. patent application Ser. No. 07/937,911 filed on Aug. 28, 1992 which issued on Apr. 12, 1994 as U.S. Pat. No. 5,303,379 entitled LINK MECHANISM FOR LINKING DATA BETWEEN OBJECTS AND FOR PERFORMING OPERATIONS ON THE LINKED DATA IN AN OBJECT BASED SYSTEM, which is a division of U.S. patent application Ser. No. 07/681,435 filed on Apr. 3, 1991 which issued on Apr. 27, 1993 as U.S. Pat. No. 5,206,951 entitled INTEGRATION OF DATA BETWEEN TYPED OBJECTS BY MUTUAL, DIRECT INVOCATION BETWEEN OBJECT MANAGERS CORRESPONDING TO OBJECT TYPES, which is a continuation of U.S. patent application Ser. No. 07/088,622, filed on Aug. 21, 1987, now abandoned.
The present application is also related to U.S. Pat. No. 5,226,161 entitled INTEGRATION OF DATA BETWEEN TYPED DATA STRUCTURES BY MUTUAL DIRECT INVOCATION BETWEEN DATA MANAGERS CORRESPONDING TO DATA TYPES which issued on Jul. 6, 1993, from U.S. patent application Ser. No. 07/938,928 and which is a continuation of above referenced U.S. patent application Ser. No. 07/681,435.
The present application is also related to presently pending U.S. patent application Ser. No. 08/066,688 filed on May 20, 1993 which is a continuation of above referenced U.S. patent application Ser. No. 07/938,928.
The present application is also related to U.S. patent application Ser. No. 07/936,980 filed on Aug. 28, 1992 which issued on Nov. 9, 1993 as U.S. Pat. No. 5,261,080 entitled MATCHMAKER FOR ASSISTING AND EXECUTING THE PROVIDING AND CONVERSION OF DATA BETWEEN OBJECTS IN A DATA PROCESSING SYSTEM STORING DATA IN TYPED OBJECTS HAVING DIFFERENT DATA FORMATS, which is a divisional application of above referenced U.S. patent application Ser. No. 07/681,435.
The present application is additionally related to pending U.S. patent application Ser. No. 08/127,981 filed on Sep. 27, 1993 which is a continuation of U.S. patent application Ser. No. 07/915,775 filed on Jul. 16, 1992, now abandoned, which is a continuation of U.S. patent application Ser. No. 07/088,176 filed on Aug. 21, 1987, now abandoned.
The present patent application is related to a U.S. Patent Application to Marc San Soucie, et al., titled CUSTOMIZATION BY AUTOMATED RESOURCE SUBSTITUTION, filed the same day as the present application.
Claims
What is claimed as new and desired to be secured by Letters Patent of the United States is:
1. An electronic data processing system including a processing unit, a main memory for storing active programs which are executed by said processing unit and active data which is directly manipulatable by said processing unit, and a mass storage memory for persistently storing inactive data and programs in mass storage files, said system further comprising, in combination:
(A) typed data objects each of which comprises one or more files in said mass storage system and each of which contains information formatted in accordance with one of a plurality of different data object types,
(B) a plurality of object manager programs each comprising one or more files in said mass storage system, each of said data object types being operated upon by one or more of said object manager programs, said mass storage memory being capable of storing new object manager programs defining new corresponding data object types thereby providing for the open-ended enlargement of the number of different data object types manipulatable by said data processing system,
(C) operating system programs including a multitasking kernel and an application manager program for spawning the concurrent execution of a plurality of said object manager programs as peers of each other and children of the executing application manager program,
(D) a first system database containing entries for identifying an object manager program stored in said mass storage system which is capable of performing a designated standard operation on data objects of a designated data object type, and
(E) a library of common application integration service routines dynamically linked to, and callable by, said concurrently executing object manager programs for sending interprocess messages to and receiving interprocess messages from said application manager program, said service routines including,
(a) invocation means responsive to a request from a first executing object manager program for the performance of a selected operation on a data object of a given data object type for accessing said first system database to identify a second object manager program capable of performing said selected operation on objects of said given object type, for invoking the concurrent execution of said second object manager, and for thereafter requesting said executing second object manager program to perform said selected operation,
(b) data interchange means for transferring data between data objects of different data types which are being operated upon by different concurrently executing object manager programs, and
(c) link management means for causing linked data from a child data object, which is operated upon by an executing server object manager program, to appear to reside in a parent data object being operated upon by a consumer object manager program, said parent data object including a link marker for indicating the location within said parent data object where said linked data is to appear, and link identification information, said link management means including means responsive to said link identification information for identifying and invoking said child object manager to operate on said child data object and to transfer said linked data by means of said data interchange means from said child data object for storage in said parent data object where it may accessed by said consumer application manager.
2. An electronic data processing system as set forth in claim 1 wherein said link identification information includes link specification information and wherein said link management services includes means for transferring said link specification information from said parent data object to said server object manager program, said link specification being interpretable by said server object manager program to select all or a designated portion of said child data object as said linked data.
3. An electronic data processing system as set forth in claim 2 wherein said link management means further includes update means for making a further transfer of said linked data from said child data object to said parent data object to reflect modification to said child data object resulting from operations performed by said server object manager program.
4. An electronic data processing system as set forth in claim 3 including means for establishing at least manual and dynamic link update states such that, when said update means is in said manual update state, said linked data is transferred only upon receipt of an external request transmitted to said update means, and when said update means is in said dynamic link update state, said linked data is transferred whenever said linked data is modified by said server object manager program.
Description
FIELD OF THE INVENTION
The present invention relates to an object based data processing system and, in particular, to apparatus and methods for managing and integrating objects and programs for operating on objects.
BACKGROUND OF THE INVENTION
There are a number of major, general problem areas which recur in data processing systems and these problem areas are growing increasingly demanding in contemporary systems as the range of types of data and information processing applications and numbers and types of users grow. These areas include, in particular, the integration of applications and data in a uniform system and environment, the ability to add new applications and data types to an existing system in a manner to integrate the new applications and data types with existing applications and data types; the ability to update applications and, in particular, the ability to translate programs and data from one language to another as business interests and data applications become international in scope; the ability of different users to share data, and in particular data in a timely form so that each user has the most recent version of a particular body of data; and the ability to transfer or exchange data from one form or data structure to another.
A user may want to include a graph in a document. One existing way to provide the ability for the user to edit the graph from within the context of the document is to augment a document editor with graph editing capabilities. This approach has the disadvantage that in order to integrate a further new type of data (e.g., a voice annotation) into documents, it is necessary to again modify the document editor. In fact, each editor must be separately extended to handle each new type of data.
While certain systems of the prior art have attempted to solve these problems, for example, by constructing object based systems wherein all data types reside in standardized data structures referred to as "objects", the systems of the prior art have generally failed to adequately solve these problems. In particular, the systems of the prior art have generally fallen into one of two classes. In the first and older class of system, there has been little constraint upon data types and applications programs with the result that, while it is easy to add new applications and data types, it is difficult to provide an integrated system and user environment and very difficult to communicate data between users and data types. In the second and more recent class of system, such as the object based systems, there has been an attempt to provide a defined system environment. This approach provides an integrated system and user environment which facilitates the ability to communicate between users and data types. A recurring problem with this class of system, however, is that the system definition itself, and the operating system type programs necessary to manage defined and object based systems inhibits the ability to add new applications and data types if they do not fit within the applications and data types initially envisioned and defined.
SUMMARY OF THE INVENTION
The present invention provides for a highly integrate, yet extensible system by means of typed-objects, object managers, and a generalized invocation mechanism that invokes an appropriate object manager to perform an operation on an object.
The system of the present invention does not utilize a central, operating system type object management system but provides a group of object management data structures and a plurality of "packs" of generic routines for performing operating system type tasks and many generalized applications program type tasks. The routine "packs" include a pack of generic object management routines, which are accessible and usable by all object managers, for operating upon the object management data structures, so that the object managers perform the object management functions. By this approach, new object types and new object managers, or applications programs, may be easily added to an existing system by simply installing an object manager and, using that object manager, generating the appropriate entries in the object management data structures.
Among the object management related data structures are an object catalog, used in the management of individual objects and links between objects, an object manager table used to relate objects and operations to be performed on objects to corresponding object managers, and an object prototype table used in the creation of objects. The object catalog includes an object table of all objects residing in the system. The object catalog also includes a link table, which has a record for each link to or from any object in the object table.
The object manager table provides for a plurality of object managers to operate with any given object type, including a primary object manager for each object type. The particular object manager invoked to operate upon a particular object may depend upon the type of operation to be performed and certain object managers may operate with more than one type of object. The association between object type, operation to be performed, and corresponding object manager is performed through the object manager table. That is, when a user selects to perform an operation upon a given object, the object management routines read the corresponding entry for that object type and operation from the object manager table to determine the corresponding object manager to be invoked.
The object prototype table contains information used in the creation of new objects. The object prototype table provides a means for accessing stored prototype copies of each type of object installed in the system. New objects of any given type may be created at will by making copies of the prototype copy of the object, the copy of the prototype object then becoming a new object which may be modified or operated upon at will by the user. A profile editor may be used to create a corresponding new profile for the new object and to modify the copy of the basic profile as necessary to reflect the modified characteristics of the object.
The system of the present invention also provides a means for linking or connecting data structures, such as objects, or portions of data structures. Linking also allows the dynamic copying of data or information from one data structure to another so that the destination data structure may be provided with the most recent version of the linked data residing in the source data structure.
A link may be regarded as a means by which one object, referred to as a "child" object, is "connected" to another object, referred to as the "parent" object. In addition to linking a child object to a parent object, a link may also be used to link a portion of a child object's data into a parent object. This linking of data from a child object to a parent object is distinct from the copying of data from one object to another in that the data which is linked remains a part of the child object rather than becoming an integral part of the parent object. Linked data may be edited only within the child object and only by an object manager designated for the child object type.
Data may be linked dynamically or statically. In the case of dynamic linking, the current version of the data is read from the child object and provided to the parent object each time the link is "updated". As will be described, a dynamic link may be updated, for example, each time the parent object is operated upon, that is, opened, displayed, edited or printed. Updating of a link may also be initiated at regular intervals, or keyed to operations upon the child object so that an update occurs whenever the child is modified or operated upon in some manner.
The system of the present invention provides an improved system for the exchange of data between data structures of different types. In a first aspect, the data exchange mechanism provides for a plurality of data exchange formats wherein each object manager for a given data structure may use one or more different exchange formats, depending upon the type of data structure with which the data is being exchanged. In the present implementation, the system provides for three classes of exchange formats. The first class includes generic formats used for data exchanges between structures of different types and different internal formats. The second class includes category specific formats used for data exchanges between data structures of the same type but different internal data formats, and the third class includes private formats for data exchanges between data structures of the same type and same internal format.
In a second aspect, the data exchange mechanism of the present invention provides a matchmaker mechanism whereby the object managers of two data structures may communicate regarding available exchange formats and which arbitrates a choice of a format for a data exchange.
An object of the present invention is to provide an open-ended framework for the integration of different applications programs. In this context "open-ended" means that new applications should be integrated with existing applications without requiring modification of the existing applications.
A further object is to provide a system in which applications can remain essentially independent and yet still be able to effectively communicate and-cooperate with each other.
Other features, objects and advantages of the present invention will be understood by those of ordinary skill in the art after reading the following descriptions of a present implementation of the present invention, and after examining the drawing, wherein:
BRIEF DESCRIPTION OF THE DRAWING
FIGS. 1A, 1B, and 1C are diagrammic representations of information processing systems which may incorporate the present invention;
FIG. 2 is a diagrammic representation of a system database of the present invention;
FIG. 3 is a diagrammic representation of an object manager table of the present invention;
FIG. 4 is a diagrammic representation of an object prototype table of the present invention;
FIG. 5 is a diagrammic representation of an object catalog of the present invention;
FIG. 6 is a diagrammic representation of an object table of the present invention;
FIG. 7 is a diagrammic representation of a link table of the present invention;
FIG. 8 is a diagrammic representation of a various data structures involved in links of the present invention;
FIG. 9 is a diagrammic representation of a data exchange of the present invention, including a matchmaker of the present invention; and
FIGS. 10A and 10B are diagrammic representations of a resource and a resource editor of the present invention.
DETAILED DESCRIPTION
The following description presents the structure and operation of a computer system incorporating a presently preferred embodiment of the present invention.
Outline of Detailed Description
1 Concepts
1.1 Objects and Object Managers
1.1.1 An Object Type: Folder
1.2 Links
1.3 Profiles
1.4 Resources
1.5 Operating System and Routine Packs
2 Architectural Overview
3 Objects and Files
4 Data Integration
4.1 Appearance to User in Destination Object
4.2 An Example Illustrating Certain Data Integration Concepts
5 Links
5.1 Link Updating
5.1.1 When Do Updates Occur?
5.1.2 A Link Update Operation May Require Recursion
5.2 Copying Data Having Embedded Links
5.3 Link Markers
5.4 Link Specifications
5.5 Freezing Objects and Links
6 Physical Organization (FIGS. 1A, 1B, and 1C)
7 Some Elements of an Illustrative System 8 System Data Structures
8.1 System Database
8.1.1 Object Type Table
8.1.2 Object Manager Table
8.1.3 Object Prototype Table
8.1.4 Customization Table
8.1.5 Library Table
8.1.6 Volume Table
8.1.7 System Configuration Table
8.2 Object Catalog
8.2.1 Object Table
8.2.2 Link Table
8.2.3 File List Table
8.2.4 Folder Table
8.2.5 Field WIT File
8.2.6 Object WIT File
8.2.7 Deleted Objects Table
8.3 Link Parallel Files
9 Object Manager Invocation
9.1 Invocation by Direct use of the Kernel
9.2 Startup Requests
9.3 Invocation by APPACK
10 Object Manager Table (FIG. 3)
11 Object Prototype Table (FIG. 4)
12 Object Catalog (FIGS. 5,6, and 7)
12.1 Catalog Server Process
13 Links and Link Parallel Files (FIG. 8)
14 Copy, Move and Share
15 The Matchmaker
15.1 Matchmaker Purpose and General Operation
15.2 Matchmaker Protocols
15.2.1 Source Protocol
15.2.2 Place Protocol
15.2.3 Processing UNDO after an Interobject MOVE Operation
16 Data Interchange (FIG. 9)
17 Resources
17.1 Resource Files
17.2 Resources (FIG. 10A)
17.3 Resource Editor (FIG. 10B)
18 Resource Customization
18.1 General Customization by Means of Customized Resources
18.2 Customization IDs
19 APPACK Function Calls
19.1 Invocation Services
19.1.1 APrqstart()--Issue A Start Request
19.1.2 APrqedit()--Issue An Edit Request
19.1.3 APrqread()--Issue A Read Request
19.1.4 APrqrun()--Issue A Run Request
19.1.5 APrqcreate()--Issue A Create Request
19.1.6 APrqchangelink()--Issue A Change Link Request
19.1.7 APrqprint()--Issue A Print Request
19.1.8 APrqupdate()--Issue A Link Update Request
19.1.9 APrqcopy()--Copy An Object
19.1.10 APrqdeletelink()--Delete A Link
19.1.11 APrqrelocate()--Relocate An Object
19.1.12 APrqimport()--Import A Foreign Object
19.1.13 APinvoke()--Invoke An Application
19.2 Operation Support
19.2.1 APinit()--Initialize Application Request Processing
19.2.2 APreply()--Reply To A Request
19.2.3 APevinit()--Initialize APPACK Event Specification
19.2.4 APevaction()--Set Action Code For APPACK Events
19.2.5 APevremove()--Remove APPACK Event Specification
19.2.6 APmsgtest()--Test An APPACK Message Event
19.2.7 APrioinit()--Get A RIOID For An Active Operation
19.2.8 APmsgwait()--Wait For An APPACK Message
19.2.9 APoprequest()--Send An Operation Request
19.2.10 APmsgrequest()--Interpret A Request Message
19.2.11 APopfinish()--Terminate An Operation
19.3 Matchmaker Operations
19.3.1 APmmreserve()--Reserve The Matchmaker For An Operation
19.3.2 APmmpost()--Post An Operation On The Matchmaker
19.3.3 APmmconnect()--Connect To Matched Application
19.4 Link Interchange
19.4.1 LNXpinit()--Start Building Link Stream
19.4.2 LNXprestart()--Reset Stream To Link
19.4.3 LNXplink()--Put A Link Into The Stream
19.4.4 LNXpnewlink()--Put A New Link Into The Stream
19.4.5 LNXpfinish()--Finish Building Link Stream
19.4.6 LNXginit()--Start Reading Link Stream
19.4.7 LNXgrestart()--Reset Stream To Link
19.4.8 LNXglink()--Get The Next Link In The Stream
19.4.9 LNXgpeek()--Look At The Next Link In The Stream
19.4.10 LNXgskip()--Skip The Next Link In The Stream
19.4.11 LNXgfinish()--Finish Reading Link Stream
19.5 Text Interchange
19.5.1 TXXpinit()--Start Building Text Stream
19.5.2 TXXprestart()--Reset Stream To Text
19.5.3 TXXpstring()--Put Text String Into The Stream
19.5.4 TXXpchar()--Put Single Character Into The Stream
19.5.5 TXXpfont()--Change Current Font
19.5.6 TXXpattrs()--Set Text Attributes
19.5.7 TXXpdiacritic()--Insert Diacritic Mark
19.5.8 TXXpstrikethru()--Set Strike-Thru Character
19.5.9 TXXpscript()--Set Script Offset
19.5.10 TXXpvertical()--Put Vertical Move Down Command
19.5.11 TXXphorizontal()--Put Horizontal Move Command
19.5.12 TXXpspacing()--Put Interline Spacing Command
19.5.13 TXXplanguage()--Put Change Language Command
19.5.14 TXXplink()--Put A Link Into The Stream
19.5.15 TXXpfinish()--Finish Building Text Stream
19.5.16 TXXginit()--Start Reading Text Stream
19.5.17 TXXgrestart()--Reset Stream To Vanilla Text
19.5.18 TXXgnext()--Get Next Type Of Data In Input Stream
19.5.19 TXXgstringsize()--Get Next String Length
19.5.20 TXXgstring()--Get Text String From The Stream
19.5.21 TXXgchar()--Get Character From The Stream
19.5.22 TXXgfont()--Get The Current Font
19.5.23 TXXgattrs()--Get Text Attributes
19.5.24 TXXgdiacritic()--Get Diacritic Mark
19.5.25 TXXgstrikethru()--Get Strike-Thru Character
19.5.26 TXXgscript()--Get The Script Offset
19.5.27 TXXgvertical()--Get Vertical Move Down
19.5.28 TXXghorizontal()--Get horizontal move
19.5.29 TXXgspacing()--Get Interline Spacing
19.5.30 TXXglanguage()--Get Change Language Command From The Stream
19.5.31 TXXgfinish()--Finish Reading Text Stream
19.6 Record Interchange
19.6.1 REXpinit()--Start Building Vanilla Record Stream
19.6.2 REXprestart()--Reset Stream to Vanilla Record
19.6.5 REXpheader()--Build a Header Record
19.6.4 REXprinit()--Start Record Descriptor
19.6.5 REXpfdesc()--Build Field Descriptor
19.6.6 REXprfini()--End Record Descriptor
19.6.7 REXpdinit()--Start Data Record
19.6.8 REXpdata()--Build Data Field
19.6.9 REXpdfini()--End Data Record
19.6.10 REXpfinish()--Finish Building Vanilla Record Stream
19.6.11 REXginit()--Start Reading Vanilla Record Stream
19.6.12 REXgrestart()--Reset Stream to Vanilla Record
19.6.13 REXgtype()--Get Next Record Type
19.6.14 REXgheader()--Get Header Record Information
19.6.15 REXgfdesc()--Get Next Field Descriptor
19.6.16 REXgdata()--Get Next Data Field
19.6.17 REXgnext()--Skip to Next Record Type
19.6.18 REXgfinish()--Finish Reading Vanilla Record Stream
20 RESPACK Function Calls
20.1 Resource File Access Functions
20.1.1 RESfopen()--Open a Resource File
20.1.2 RESfinit()--Open a List of Resource Files
20.1.3 RESfclose()--Close a Resource File
20.2 Resource Access Functions
20.2.1 RESget()--Get a Resource
20.2.2 RESmget()--Get Multiple Resources
20.2.3 RESpoint()--Get a Pointer to a Resource
20.2.4 RESrelease()--Release a Resource
20.2.5 RESread()--Read a Resource
20.2.6 RESlookup()--Find Resource with Given Name
20.2.7 RESgtinfo()--Get Information About Resource
20.3 Resource File Management Functions
20.3.1 RESfcreate()--Create a Resource File
20.3.2 RESfedit()--Modify a Resource File
20.3.3 RESfview()--Peruse a Resource File
20.3.4 RESfconmmit()--Commit Modifications to File
20.3.5 RESgtfinfo()--Get Information About File
20.3.6 RESptfinfo()--Put Information About File
20.3.7 RESavail()--Get Unused Resource ID
20.3.8 KESgtnext()--Get Next Resource Information
20.3.9 RESgtprev()--Get Previous Resource Information
20.3.10 REScheckpt()--Checkpoint Resource File Updates
20.3.11 RESrevert()--Revert to Last Checkpoint
20.3.12 RESfreeze()--Freeze a Resource File Version
20.3.13 RESgtfver()--Get Resource File Version Number
20.3.14 RESptfver()--Put Resource File Version Number
20.4 Resource Editing Functions
20.4.1 RESrdcur()--Read Current Version of Resource
20.4.2 RESgtcur()--Get Current Resource Information
20.4.3 REScreate()--Create a Resource
20.4.4 RESwrite()--Write a Resource
20.4.5 RESrewrite()--Overwrite a Resource
20.4.6 RESptinfo()--Put Information About Resource
20.4.7 RESmove()--Move Resource to New Location
20.4.8 RESptnum()--Renumber a Resource
20.4.9 RESmerge()--Merge a Resource List into a File
20.4.10 RESdelete()--Delete a Resource
20.5 Resource Index Functions
20.5.1 RESixinit()--Start Building a Resource Index
20.5.2 RESixprep()--Begin Modifying an Existing Index
20.5.3 RESixadd()--Add a Resource Index Entry
20.5.4 RESixdelete()--Delete a Resource Index Entry
20.5.5 RESixfini()--Finish Building a Resource Index
20.5.6 RESixlookup()--Look up a Resource Index Entry
20.5.7 RESixulookup()--Look up a USHORT Entry
20.5.8 RESixllookup()--Look up a ULONG Entry
20.5.9 RESixslookup()--Look up a String Entry
20.5.10 RESixufind()--Find a USHORT Entry
20.5.11 RESixlfind()--Find a ULONG Entry
20.5.12 RESixsfind()--Find a String Entry
20.5.13 RESixget()--Get an Entry in a Resource Index
20.5.14 RESixindex()--Get an Entry in a Resource Index
20.5.15 RESixinfo()--Get Info on a Resource Index
20.6 Batch Style Resource Creation Functions
20.6.1 RESccreate()--Create a Batch Style Resource File
20.6.2 REScadd()--Add a Resource to a Resource File
20.6.3 REScclose()--Finish Resource File Building
20.7 User Profile Support Functions
20.7.1 RESptcustid()--Set Customization ID
20.7.2 RESsupedit()--Edit Resources in a Profile
1 Concepts
1.1 Objects and Object Managers
The system of the present invention is a member of the general class of systems described as "object based". That is, information is stored in structures referred to as "objects". In the implementation of the present preferred embodiment most objects each correspond to one or more files of a conventional computer file system.
Further with regard to objects, the system of the present invention allows the use of an essentially unlimited variety of object "types", including the type previously described as a folder, wherein there may be a type of object for each form of data or information or operation to be performed by the system. That is, the system of the present invention defines only the minimal interface between an object and the system and does not define the internal structure or form of any object. As such, an object within the system of the present invention may be regarded as a general purpose container for data, programs or other information, with the internal structure or form of a particular object being defined by the requirements of the operation to be performed or the type of data or information to be stored therein.
Programs for operating upon objects are known as "object managers" or are sometimes referred to as "editors", "applications programs", or "applications". The term "application" is also used to refer to a collection of object managers that operate on a single object type. Each type of object has associated with it at least one object manager that is designed or intended as the primary means for operating upon the data or information stored in that type of object. For example, the system may support a "document type" object for word processing and there will be a word processing object manager associated with that object type. Similarly, a "data base type" object will have associated with it a data base object manager, which is the primary means for operating upon or with the data stored in the data base type object.
It should be noted, however, that the object managers for operating with a particular type of object are not limited to the primary object manager for that object type. Moreover, the particular object manager invoked to operate upon a particular object may depend upon the type of operation to be performed. The system of the present invention provides for a plurality of object managers to operate with any given object type and certain object managers, for example, certain utilities, may operate with more than one type of object. The primary object manager is simply the object manager which is invoked by default for operations upon a particular object type if the user does not select a different program.
Although typically an object manager will operate on the data of a single type of object, in certain cases it may be desirable to arrange a program to be an object manager for more than one object type. Further, there are various utility programs that perform operations that do not interpret object data (e.g. file copy) and that therefore can be used with various types of objects.
1.1.1 An Object Type: Folder
Folders are used as an organizational tool. Folder-type objects are used primarily for the links they contain. For example, group of objects can be logically associated together by all being linked to a single folder object. Like any object, a folder can itself be linked into a folder. Associated with each folder is a file, which can contain information such as a user's comments about the purpose of the folder, instructions on what to do with the objects in the folder, etc. Often there will be no such data, as a typical folder's significance is only the list of objects linked to it; in this case, essentially all there is to the folder is its entries in the object catalog, primarily the entries in the Link Table.
Folders need no link markers because the links are not embedded in any data. Order among the links in a folder is determined not by the sequence in which link markers are embedded, but by the values of the Link IDs stored in the Link Table.
A Folder does not link any data from the objects to which it has links (i.e., a folder needs no link parallel file). Folders just use links to represent relationships among whole objects.
Each user of the system has a primary folder. This is the primary means by which a user gains access to resources of the system. There is a primary system folder, which is typically linked into each user's primary folder, giving each user access to certain common system resources. Further, all of the user primary folders are linked into the system folder.
1.2 Links
While information in the system is primarily contained within objects, objects, in turn, are related to one another through a mechanism referred to as "links". A link may be conceptually viewed as a means by which one object, referred to as a "child" object, is "connected" to another object, referred to as the "parent" object. Each object is, in some sense, a child object in that each object always has at least one link to it and is connected through that link to at least one parent object. In this regard, and as will be described in the following, each user has at least one primary parent object to which all other objects associated with that user are directly or indirectly linked. The terms "parent" and "child" refer to the direction of a link, are not meant to imply any hierarchy among linked objects.
It should be noted that, as described in the following descriptions, a link may also be used to link a portion of a child object to a parent object, as well as an entire child object. In addition, any number of objects, or portions of objects, may be chained together through links, and the sequence and direction of links is not hierarchically limited.
1.3 Profiles
A profile is user-visible information about something, such as a system, object, or link. The information included in an object profile depends on the object type. For a document-type object, the object profile includes some of the information stored in the Object Table along with information stored in the object itself, such as a font list, global format information, and printing parameters.
1.4 Resources
A "resource" is data that is used by a program but which is not stored as a part of the program's executable code. Examples of such data include icons, language dependent text, messages, text fonts, forms, date and time and presentation formats. A resource is therefore a means for storing such program data separately and independently from the program with which it is associated.
The placing of program data in resources allows the information therein to be customized or changed without affecting the program's executable code. English, French and German language versions of word processing, data base and spreadsheet programs, for example, may be generated by simply providing English, French and German language versions of the corresponding resources. In each version of the programs only the program data residing in the associated resource is changed, the executable code of the programs remain unchanged. In addition, the use of resources allows object managers and other programs to share common program data, thereby reducing the sizes and memory requirements of the individual object managers and other programs.
Storing data in resources also makes possible easy customization for individual users of the appearance and operation of programs. A user-specific customized version of a resource can be stored in the user's user profile. A mechanism is provided by which any customized resources present in a user profile are automatically substituted for their standard counterparts automatically (and invisibly to the program using the resource) when needed by a program.
1.5 Operating System and Routine Packs
Computer systems typically include a group of programs which are referred to as an operating system. An operating system may be viewed as a collection of programs which control and facilitate the overall operation of a system and which provide selected, fundamental, general Services and operations for users of the system. Examples of such operating system services and operations include process management, event management, memory management, input/output operations, logical to physical address translations, graphics/text and display operations, file access and management operations, and mathematical operations.
In the traditional view of operating systems, all functions and operations which are not specific, particular or unique to a particular application program are to be performed by the operating system. In addition, the traditional view regards the operating system as a tightly integrated and mutually dependent group of programs and the operating system is generally designed as a unitary structure of programs in which the designer attempts to anticipate all functions which may be desired, presently and in the future, by the applications programmers. Because of the relatively monolithic nature and complexity of an operating system and the resulting interrelationships of the programs comprising an operating system, it is therefore relatively difficult to modify, change, update or add features to an operating system.
The operating system of the present invention differs from the traditional operating system in that, firstly, the actual functions and services performed by the operating system are reduced to the minimum. As will be described in the following, the operating system of the present system essentially performs only the process, event and memory management functions and logical to physical address translations.
Secondly, other functions and services which would normally be performed by an operating system, together with many functions and operations which would normally be performed by the application programs themselves, are performed by libraries of routines. These libraries of routines, referred to herein as "packs", exist independently of both the operating system and the application programs. As will be described in the following descriptions, the routines contained within the packs are comprised of short, generic, single purpose routines designed to be of wide general applicability and usefulness for both operating systems services and application program support functions. Examples of services and functions performed by pack routines include, but are not limited to, input/output operations, graphics/text and display operations, file access and management operations, and mathematical operations.
As will also be described, each pack contains a set of routines or functions which are related by the type of operation they perform or the type of object they operate upon. In addition, all routines of a given pack are provided with a uniform interface, or calling and return sequences, and the packs are required to conform to a uniform format, in particular with regard to pack header files and control blocks, that is, blocks of information regarding the objects controlled by the packs.
The use of packs of routines for many operating system type services and functions and for many operations normally provided within application programs greatly enhances the flexibility of the system architecture and configuration. Functions and services may be added or altered easily and quickly and without disturbing or otherwise impacting other functions of the system. In addition, the use of packs reduces the size and complexity of application programs in that many operations or functions normally incorporated into each individual application program may now be shared by many application programs. Also, the use of routine packs with standardized interfaces facilitates integration of different applications in that many operations and interfaces to the system, the user, and other application programs are defined by and conform to the defined, standardized routine pack interfaces.
In the preferred embodiment, these routines are stored in a shared subroutine library are dynamically linked as needed at runtime. In some cases, it may be desirable to include copies of routines from pack libraries in the executable code of a program; however, this approach increases the physical size of application programs.
When reference is made in the following discussion to a routine performing some function, it should be understood that the routine may accomplish this directly itself, or by making a system call, or by a series of interprocess communications with another process. For example, the APPACK routine APinvoke() accomplishes the invocation of an object manager by communicating with the application manager process which ultimately makes a system call that results in invocation of an object manager.
2 Architectural Overview
The present invention involves the manipulation of typed objects. Different objects are designed to represent different forms of information, such as the following. Document objects represent text and associated formatting information. Spreadsheet objects represent mathematical modeling information. Voice objects represent sound. Image objects represent photograph-type pictures.
For each type of object there is one or more "object manager" that can operate on objects of that type. Object managers roughly correspond to applications programs. For example, there may be spreadsheet program: this can be understood to be an "application", as distinguished from operating system program; it can also be understood to be a "manager" or "editor" of objects of type "spreadsheet".
Because it is an object's object manager(s) that define its structure and interpretation, the collection of object types is open-ended; existing types of information can be integrated with future types of information with the same each with which the existing types are integrated with each other. A new object type can be added to the system by adding a program (i.e., an object manager) that can manipulate objects of the new type. The ability to manipulate the new type of object need only be implemented once. Having added the new object manager, objects of the new type can be linked into, exchange data with, and otherwise appear integrated with objects of pre-existing types without modification to pre-existing object managers.
A convention that facilitates the open-ended integration is that for each object type there shall be an object manager that will support all of a standard set of requests. Further, these requests are communicated between object managers by a single standard protocol that is application-independent. Absolute adherence to this convention is not required. However, as the number of exceptions increases, the benefit obtained from this approach to data integration decreases.
If cases arise where the standard requests and protocols do not provide an adequate degree of integration, private requests and protocols can be defined to coexist with the standard set. Thus, this open-ended approach defines only the minimum level of integration, without precluding tighter coupling where appropriate. An example of a case where private protocols may be appropriate is communication between a spreadsheet application and a graphing application.
There is a set of Application Integration Services that are available to all the object managers. These services do not embody any "knowledge" of any particular types of objects. Rather, the service are used by the object managers to coordinate their manipulation of the various types of objects. In particular, these services facilitate bringing to bear an object manager embodying the appropriate object type specific "knowledge".
Application Integration Services are so-named because they are a mechanism by which an individual application (i.e., object manager) can appear to a user to integrate its operation and manipulation of data with that of other applications. To a user, the display of a page of a newsletter having both text and a picture indicates that the picture and text are integrated together in a single entity known to the user as a document. According to the present invention, this effect is accomplished by operation of two different object managers as coordinated by use of the Application Integration Services. The newsletter is stored in an object of type document, which is a type of object designed to store text and associated formatting information. The particular document object of this example includes a link to a separate object of type "image", an object designed to store photograph-type pictures. The display of the page is accomplished by a document object manager retrieving and displaying the text and an image object manager retrieving and displaying the picture. The information describing the link to the picture and the operation required (display) is communicated from the document object manager to the image object manager with the assistance of the Application Integration Services.
The computer system of the present illustrative embodiment includes the ability to run a plurality of programs effectively concurrently. This is known as multitasking or multiprocessing, and each of the concurrently executing programs is known as a task or process.
In the present system there is an Application Manager process. The Application Manager spawns the object manager processes. Thus, in general, the object managers are peers with each other and are children of the Application Manager.
The Application Integration Services services are provided in part by means of the Application Manager process and in part by a set of common subroutines or functions. There is a set of function calls available to be incorporated into the body of the source code of an object manager. This set of functions is known as APPACK. The APPACK function calls is the mechanism by which object managers avail themselves of the services of the Application Manager. In general, the APPACK functions send interprocess messages to and receive interprocess messages from the Application Manager process. The APPACK functions themselves may be called from a shared subroutine library or may be incorporated directly into the executable body of object managers at program link time.
The services provided by APPACK can be grouped into the following categories: invocation, data interchange, matchmaking, object management, and link management.
Among the most powerful of the Application Integration Services are the "invocation" services. The most general mechanism through which these services can be obtained is the APPACK function known as APinvoke(), which is described in greater detail below. Other APPACK functions are also available to cause invocation for specific purposes (e.g., APrqprint() to print data from an object, APrqupdate() to update data across a link).
The invocation services enables any object manager to specify some data (e.g., by means of a link specification) and an operation to be performed regarding that data and cause an appropriate object manager to be identified and invoked with the result that the desired operation is performed without the invoking object manager being in any way designed to handle that particular type of data. For example, a document object manager can cause a picture to be displayed or a voice message to be played, each with equal ease and without being designed to manipulate either image or audio data.
In addition to playing role in conducting standard protocols, the invocation services can also be used to establish communication between two object managers that will subsequently communicate according to a private protocol.
The data interchange services provide standard representations for common data types, for the purpose of transferring data between two object managers which may not share similar internal representations for the data. These services mask both the form of the data and the means of transfer, so that programs that use them need be concerned only with the semantic content of the data.
The matchmaking services are used to set up user-directed data transfers (operations that are completed using the data interchange services). These services facilitate negotiation between the source and the recipient of a data transfer.
Use of the object management services and the link management services is required for those object managers that take advantage of the system's object and link capabilities. The object management services define standards for object access, naming, and manipulation. The link management services enable an object manager to maintain links to objects of types about which the object manager has no direct "knowledge".
3 Objects and Files
In the present system, for most object types each object is stored in a separate file (possibly more than one file). This is not a necessary requirement however. An advantage of implementing objects as files is that certain object operations can be easily done directly by the Application Integration Services (e.g., create object, copy object).
In the present system there is a limited form of inheritance. Certain object management operations that can be performed on file-based objects are supported directly by APPACK: create object, copy object, rename object, delete object, and freeze object. When one of these operations is requested on a file-based object, APPACK will perform the operation unless the Object Manager Table indicates that an object manager for that object will perform the operation, in which case the object manager is invoked and the operation request passed to it. As APPACK can only perform these operations for file-based objects, these operations cannot be inherited by non-file-based objects.
More general inheritance could be implemented by which each object type could identify another type as its parent. In such situation, operations not specifically defined for the child type could be performed on objects of the child type by an object manager of the parent type. This would have the advantage of facilitating creation of new object types. On the other hand, the system without generalized inheritance is lends itself to simpler, higher performance system.
4 Data Integration
In understanding the advantages of the present invention for improved data integration, it is useful to understand the distinctions among a variety of closely related concepts. For example, a user can make existing data (that is all or a portion of a "source" object) appear in a new place (in a "destination" object, which may have previously existed or may be created solely to receive the data) by means of "copy", "move", or "share" operations; each of these operations has differences from the other two. Further, a copy or move operation may be accomplished such that the copied or moved data is either "internalized" or "encapsulated" at its destination (a distinction that is hidden from the user by the object manager responsible for the destination object).
"Sharing" of data to a destination object means that the data will appear to be in the destination object, but this will be accomplished by a link to the shared data; the shared data will not actually be stored within the destination. Further, the link will refer to the same data to which other links may already refer; in other words the same stored data is "shared". The effect of sharing is that when each link to the shared data is updated (the timing of which depends on link update flag value discussed elsewhere) it will manifest the alteration.
"Copying" differs from sharing in that storage of the copied data and the storage of the original data are distinct, so that either may be altered without affecting the other. In other words, a new copy of the actual data is made. Further, the copied data may be treated in two different ways: it may be "internalized" in the destination object or it may be "encapsulated" by the destination object. If the copied data is of a type that can be stored in the destination object, then the copied data will be internalized in the destination object, meaning that the data will be stored directly in the destination object's data structure; the internalized data becomes indistinguishable from any other data stored in the object. If the copied data is of a type that cannot be stored in the destination object, then a new object of a type that can store the data will be created, and a link to this new object will be added to the destination object; in this case (encapsulation), the destination object indirectly contains the copied data.
Each application must respond to a request to encapsulate data. The simplest way to respond is to make a copy of the entire object containing the data and provide a link specification referring to that newly created object. This simple approach will be inefficient where the data to be encapsulated is a very small fraction of the entire object. Thus, each application should be designed to respond to a request to encapsulate data by duplicating as little data as possible; in other words, if possible the application should copy less than the entire object, and preferably only the desired data. Because the chart application can only create the complete chart, encapsulating a chart requires a copy of the entire chart object even if only a corner of the chart is desired. On the other extreme, the document object manager can extract nearly just what is needed. The illustration object manager is yet a different case: it will not copy illustration elements that fall entirely outside the desired region; it will copy those elements that even in part fall within the desired region without clipping those elements to the size of the desired region; thus portions of the illustration outside the desired region will be represented in the encapsulated data.
"Moving" is like copying, except that the original data is deleted. If the destination of a move is only able to accept the data with significant data loss (e.g., where the destination does not support links), then the user should be so warned and given an opportunity to abort the move operation.
4.1 Appearance to User in Destination Object
The above discussion has focused on how a destination object will internally represent the presence of shared, copied, or moved data. A somewhat separate issue is how that data will be presented to the user. Once data has been internalized, it is no different from other data stored in the destination object; its appearance to the user need be no different and it can be edited along with the other data in the object. Data that is of a type that can be handled by the destination object but that is, nonetheless, linked (i.e. because it is shared) can be presented to the user in a manner indistinguishable from the data actually stored in the destination object; however, it is desirable to make it visually distinguishable in some way, because it cannot be edited in precisely the same way as the data that is directly stored in the object. Data that is linked (whether or not it is of a type foreign to the object into which it is linked) is edited by separately invoking an edit operation on the linked data.
Some data that is linked is of sufficiently different type that it cannot interact with the native data, but can still visually appear along with the native data (in order to create the display of the foreign data, the object manager of the destination object would, via APPACK, invoke an object manager capable of displaying such data); this is known as "isolated" data. There are situations where data isolation is used even when the isolated data is the same type as other data in the object; for example, a caption associated with a picture in a document may simple appear in a fixed location, not subject to modification, not subject to being formatted with the other text in the document; thus, the caption can effectively be treated as an image, rather than text.
If isolation is not possible, then the minimal form of integrated presentation is "display by icon", in which an icon representing the presence of linked data is displayed in an appropriate location in the display of the destination object. All applications that support link to other objects should at least support display by icon. When the link does not indicate data exchange (i.e., the link does not include a link specification) display by icon is the best that the linking application can do. Thus, folder objects never appear to a user as other than icons.
4.2 An Example Illustrating Certain Data Integration Concepts
The following example illustrates some of the above-discussed data integration concepts.
A first document includes a chart; this is accomplished by the document object containing a link to an object suitable for storing a chart. A user creates a second document. The user selects the chart in the first document (e.g., by moving a mouse and clicking associated buttons) and then presses a "share" key (or by some other means invokes a share command). The user then points to the location in the second document where the chart is to appear and then presses a "place" key (or by some other means invokes a place command). The chart will then appear in the second document. The user then, from within the second document, selects the chart and presses and edit key, invoking the chart object manager. The user makes changes in the chart. The user then re-opens the first document and views the chart, which includes the changes the user just made from within the second document. In this example, there is one copy of the chart itself; the share operation resulted in creation in the second document of a copy of the link to the chart so that there are two links to a single chart.
Continuing the example further, the user desires to use in the second document'some paragraph of text similar to that in the first document. The user points to the place in the second document where this text is to appear and presses the place key. (Note the destination operation (place) and the source operation (copy, move, or share) can be invoked in either order.) The user then goes to the first document, selects the paragraph of text, and presses the copy key. The user then returns to the second document and observes that the paragraph now appears at the desired location. The user edits that paragraph. The user later returns to the first document and observes that the original text is unchanged--i.e., the editing of the copied text in the second document resulted in no change to the original text in the first document.
Continuing the example still further, the user desires to incorporate in the second document a picture existing in the first document; the use wishes to do this such that like the above-described text and unlike the above-described chart each of the appearances of the picture can be changed without changing the picture in the other document. The user accomplishes this by selecting the picture in the first document, pressing the copy key, pointing to the desired location in the second document, and pressing the place key. This results in creation of a copy of the picture object that contains the picture and creation in the second document of a link to this newly created picture object.
Continuing the example one step further, the user wants a sentence of text in the first document to always appear in identical form in the second document, with any changes made in the sentence appearing in both documents. The user accomplishes this by selecting the desired sentence, pressing the share key, pointing to a location in the second document, and pressing the place key. A link is created in the second document that includes a link specification that identifies the object storing the first document and identifies (in a way that can be understood by a document object manager) the sentence of text that was selected.
The distinction between "internalization" and "encapsulation" of data can be illustrated with reference to the above example. Because a document object is designed to store text, the paragraph of text that was copied to the second document is internalized in the document object that stored the second document. This means that the copied text is stored directly with other text stored in that second document. In contrast, the picture copied to the second document is encapsulated; this is because the destination object (a document object) is not capable of directly storing picture data. Because the chart and the sentence are each shared (rather than copied), they are each encapsulated in the second document (rather than internalized).
When an object internalizes data, this data becomes indistinguishable from data already existing in the object; the internalized data can be edited and otherwise manipulated directly along with the pre-existing data. In order to edit encapsulated data, the user must select the encapsulated data and issue an edit command thereby invoking an object manager capable of handling objects of the type in which the encapsulated data is stored; because of this difference, encapsulated data will typically be visually marked for the user (e.g., delimited by a box or displayed with a characteristic attribute).
In the above example, the user will not necessarily be aware that the picture data is stored separately from the text data; however, the user will observe that editing the picture requires an extra operation that results in opening of a new window.
Another point that is illustrated by the above example is that one can perform these data integration operations on all or a portion of an object. As discussed above, when an object is "copied" and that data is "encapsulated", a new object is created to store that data and a link to the new object is created in the destination object. In the case where the data selected by the user to be copied is only a portion of an object, the newly created object may contain (1) a copy of the entire original object, (2) only the desired portion, or (3) more than selected but less than the entirety; the amount of data in any particular case will depend on the type of object and possibly the relationship between the selected an non-selected portions. In cases where the new object contains more than the selected data, the link specification will identify the selected portion.
5 Links
5.1 Link Updating
5.1.1 When Do Updates Occur?
Linking makes data from a child object appear in a parent object. Conceptually, wherever the linked data in the child is modified, that modification should be manifested in the parent. Implementations that achieve linking in a straightforward manner can make heavy performance demands on a system.
The present system uses link parallel files and a variety of alternative link Update States to reduce the load linking places on the system while achieving for the user the benefits of linking. A link parallel file is a convenient repository for the parent object to store a easily accessible copy of linked data. If this copy was continuously effected, then the parent would always reflect exactly the data in the child object. However, as a practical matter the same result can be achieved if the copy in the link parallel file is updated only at certain important times, for example whenever the data in the child is changed or whenever an operation is to be performed on the parent. Each link has an associated Update State that can be selected to match the situation of that link. Update State is a field in entries in Link Parallel Files, discussed elsewhere in this Detailed Description. The presently defined values for Update State are Manual, First Time, and Dynamic. Generally no changes will occur in the children during the time the user is viewing the parent; thus, most links only need be updated once each time the user works on the parent object, i.e., Update State of "First Time". If a user wishes to view a document with numbers linked from a spreadsheet at the same time the user is working on the spreadsheet and the user wants to see the document always reflect the current spreadsheet values, then the Update State of that link should be set to be "Dynamic", which will result in update operations each time the spreadsheet is modified.
5.1.2 A Link Update Operation May Require Recursion
A link update operation may require recursion. Embedded in the data involved in a link update be a further link. Depending on the state of the update state flag in this further link, it may be necessary to perform an update operation on this further link in order to complete the original update operation. The data referenced by the further link may itself include an embedded link. Thus, completion of a link update operation may involve completion of nested update operations to whatever depth is indicated by links.
As links and objects are not limited to being organized in a hierarchy, it is possible for a series of links to form a dependency loop. A simple example is where a first object contains a first link referencing a portion of a second object that includes a second link referencing a portion of the first object containing the first link. The present system detects that an update operation is circular and issues an error; the alternatives include cycling just once, cycling until the data stabilizes (which may never happen), or cycling perpetually.
5.2 copying Data Having Embedded Links
When copying an object that itself includes links to other objects, the question arises as to how to treat this referenced data: either the link or the data itself can be copied. The user may desire different results in different situations, as illustrated by the following examples.
In the present system, there is a "Copy Flag" associated with each link. The value of the Copy Flag determines how the link is treated when the object containing the link is copied. When a link is created, the initial value of its Copy Flag is set according to a default rule, unless the user or the application creating the link specified otherwise. The result is such that copy operations often achieve the result expected by the user. The default rule for setting the Copy Flag is the following: if the linked object is created from within the object containing the link, then the Copy Flag is set such that the linked data will be copied, otherwise, the Copy Flag is set such that the link (not the linked data) will be copied.
5.3 Link Markers
Link Markers are included in the body of an object's data to indicate the presence of linked data. As an object's data is stored in a format that is typically unique to that object type (a format that need only be "known" to the object's object managers), the format of a link marker is also application dependent. A link marker must at least enable the application reading the object data to determine the value of the Link ID. The Link ID enables further information about the link to be retrieved from the Link Table.
An application designer may choose to include the Object Type of the child object in the Link Marker. This may enhance performance by eliminating a search of the Object Table (by Application Integration Services to retrieve the type information, which is needed to identify the child object's object manager) prior to calling the child object's object manager.
A Link Marker format should be designed so that when data in the object containing the Link Marker is modified, the location of the Link Marker relative to the remaining data corresponds as closely as possible to the user's expectations. Consider the following two implementations: (1) a table of Link IDs with byte counts indicating where in the data file the link was logically located; (2) an escape sequence followed by a Link ID embedded at the relevant location in the data. Links identified with markers according to the first example would appear to move when data preceding the Link Marker is added or deleted. At least for documents, the second alternative would correspond more closely with a user's expectations.
Note that as is illustrated by the first implementation suggested in the previous paragraph, a link marker need not by physically stored at the location in the parent's data where the linked data is to appear.
5.4 Link Specifications
For every link across which data can pass there is a link specification. Links to folder objects never contain link specifications; link specifications are not needed because folders are objects that are used to create organizations of objects and folders do not themselves contain any substantive data.
A link specification can indicate that the linked data is the entirety of the linked object, or it can identify a specific portion. The interpretation of a link specification is done by the linked object's object manager--i.e., link specifications are application specific. It is desirable to design link specification implementations such that the interpretation of a link specification after the linked object has been modified corresponds as much as possible to a user's expectations. The following ways of implementing link specifications illustrate this point.
The link specification for a data base object is a query specification. This type of link specification achieves particularly well the desired result of matching a user's expectations.
The link specification for an illustration is of the form: page 3, starting 1 inch down and 2 inches across, use the rectangular portion 2 inches long and 3 inches across. This specifies a window into a certain page of the illustration. A result of the picture on that page being shifted is that different data will specified in the link.
The link specification for a spreadsheet is a range of cells, specified either in absolute coordinates or as a named range. Changes to the spreadsheet will affect which of the cells are specified by the link specification in a manner that will be readily understood by a spreadsheet user (e.g., when absolute coordinates are used, the set of specified cells will change when a column to the left of the range is deleted).
The link specification for document objects takes a significantly different approach. When a portion of a document is selected to be linked: the selected portion of the document is removed from its present location and placed on a "shelf" within the document; at the location where that portion previously resided is placed a reference to the newly created shelf; the link specification identifies this shelf. The document editor treats material on a shelf somewhat like a linked material: the material on the shelf is displayed in the document at the appropriate location, but the material on the shelf cannot be edited without specifically invoking an edit operation on that shelf. Thus the user will easily understand how changes to the document will be manifested in another object that is sharing some of the document's text: changes outside the shelf will have no effect, and changes on the shelf will be directly change data as seen across the link.
5.5 Freezing Objects and Links
Objects can be frozen. An object that has been frozen can never be modified; the convention on the present system is that once an object is marked as frozen, it will not never again be marked as not frozen. A copy may be made of a frozen object and the copy may be modified. An object is identified as frozen by setting the "frozen" flag in that object's record in the object catalog.
Links can be frozen: this is done by setting the link Update State to Manual. The data produced by a link with a Manual Update State will remain constant until the next time a request is made for the link to be updated with new data. When a link's Update State is Manual the data associated with the link will be a copy that is stored in the destination object's link parallel file; this data will remain unchanged until such time as an user requests an update operation, at which time a new copy of the data will be made. At the time a link's Update State is set to Manual, an update operation is performed, assuring that there is data in the Link Parallel file.
A frozen link to an object does not affect the modifiability of that object. It only freezes the view of that object seen through that particular link: the data comprising that view is stored in a link parallel file (associated with the destination object, i.e. the object. containing the link); the object to which the link is made (the source object) can still be modified.
6 Physical Organization (FIGS. 1A, 1B, and 1C)
FIGS. 1A, 1B, and 1C are block diagrams of information processing systems which may incorporate the present invention.
Referring to FIG. 1A, a host computer 170 with substantial disk storage capacity 172, printers 174, and other shared peripheral devices 176 is connected to a plurality of intelligent workstations 178. Each workstation 178 includes a computer with memory management to support virtual memory. A workstation may include locally connected peripheral devices, but more typically will use peripherals 174 and 176 connected to the host 170. A workstation 178 may include local disk storage 180, in which case the virtual memory system can page locally, rather than to disks 172 on the host.
In a particular configuration, the host 170 is a Wang VS minicomputer connected to each workstation 178 via a high speed (4 Mbit/sec.) serial data link 182, and the workstations each include a Motorola 68020 processor. In this configuration the host runs the VS Operating System 186, uses a general purpose relational data base system 188 for management of the object catalog and some of the system database tables, and uses simpler tools for the rest of the system database. A catalog server process 190 (described further below) runs in the VS. Each disk 172 is organized as one or more volumes, each of which can be used to store objects and other files and which includes a corresponding object catalog. One volume includes the system database. Each workstation 178 runs a multitasking kernel 192, a Application Manager process 194, an one or more Object Managers 196, as needed. The APPACK routines 218 and RESPACK routines 222 are present in the workstations and are called by the various Object Managers 196 executing there.
In an alternative configuration (FIG. 1C), the workstations are connected as peers on a local area network 154, to which are also connected servers for shared resources (e.g., file server 156, printer server) and shared computing resources such as mini- or mainframe computers.
In a further alternative configuration (FIG. 1B), dumb workstations (including a keyboard 118 and a display 120) are attached to a host (including memory space 110 and central processing unit 116). In this configuration, the object managers and Application Manager run on the host, rather than in the workstations.
Referring to FIG. 1B, therein is presented a block diagram of a general information processing System 100, that is, a computer system for performing operations upon data or information under the control of programs and as directed by a user of System 100. As shown, System 100 includes a Memory Space 110, that is, the memory space accessible to and usable by System 100 in performing operations, wherein reside data structures to be operated upon and programs for performing various operations upon corresponding data structures at the direction and control of the user. As indicated, Memory Space 110 is comprised of a Main Memory 112 for storing presently active data structures and programs, and a Mass Storage Memory 114, such as one or more disk drives, for storing presently inactive data structures and programs. Also included in System 100 is a Central Processing Unit (CPU) 116 which is responsive to the programs for performing the system's operations. A Keyboard 118 is provided for user inputs and a Display 120 for visual representations of operations to the user. System 100 may also include one or more Peripheral Devices 122, such as telecommunications and networking interfaces and printers, for providing information inputs and outputs to and from System 100. It should be noted that certain of these Peripheral Devices 122 may also be included within System 100's Memory Space 110.
Referring now to the programs and data structures residing in System 100's Memory Space 110, these elements include programs 124 which perform operations upon the data structures at the direction of the user, and the Data Structures 126 which are operated upon. Also included are operating system programs 128, which provide functions for directing, supervising and coordinating the operations of the system, and input/output programs 130 for controlling transfer of information between the system and Keyboard 118, Display 120 and Peripheral Devices 122.
Referring to FIG. 1C, therein is represented a second information processing system (System 150) which may also incorporate the present invention. System 150 differs from System 100 in that, instead of a single CPU 116 and Main Memory 112 which may be shared by a number of users, System 150 provides a plurality of CPUs 116 and Main Memories 112, each of which may serve a single user. Like System 100, however, System 150 provides a single Mass Storage Memory 114 for storing presently inactive programs 124 and Data Structures 126, the single Mass Storage Memory 114 again being shared by all the users of the system.
As indicated, System 150 includes, in general, the same fundamental elements as System 100 of FIG. 1B. System 150, however, is comprised of a plurality of Processing Units 152 which are connected through a Bus 154 to a File Server 156 which, in turn, is connected to System 150's centrally located Mass Storage Memory 114. Each Processing Unit 152, or workstation, is in turn comprised of a CPU 116, a Main Memory 112 and input/output Devices 158 which may include, for example, a Keyboard 118, a Display 120 and Peripheral Devices 122.
As in System 100, presently active programs 124 and Data Structures 126, the operating system programs 128 and the input/output program 130 reside in each Processing Unit's 152 Main Memory 112 and execute operation under the direction of the users interacting with the Processing Units 152 through their input/output Devices. The inactive programs 124 and Data Structures 126 reside in the single, centrally located Mass Storage Memory 114 and are transferred between Mass Storage Memory 114 and the individual Main Memories 112 of the Processing Units 152 by means of File Server 156 and Bus 154. In this regard, File Server 156 is responsive to read and write requests from the Processing Units 152 to read and write Data Structures 126 and programs 124 between Mass Storage Memory 114 and the Processing Units 152 as required by the operations of the users. In addition, operating system programs 128 and input/output programs 130 may also be stored in Mass Storage Memory 114 and loaded from Mass Storage Memory 114 to the Main Memories 112 of the Processing Units 152 as required, for example, at Processing Unit 152 initialization. For these purposes, File Server 156 may be comprised, for example, of a dedicated purpose file server such as an intelligent disk drive system or may be comprised of a general purpose computer capable of performing additional operations at the direction and request of the system users.
7 Some Elements of an Illustrative System
Some of the elements of the present system are: system data structures, Applications Pack (APPACK) 218, resources with associated Resource Pack (RESPACK) 222.
System data structures are a plurality of data structures related to the management of the system, the objects therein, and the object managers and resources. System data structures include a system primary folder, a system database 250, and one or more object catalogs 252. As shown in FIG. 2, the system database 250 includes an object type table 254, an object manager table 256, and an object prototype table 258. As shown in FIG. 5, the object catalog 252 includes an object table 260, a link table 262, and a file list table 264. To the extent that they contain publicly available information (e.g., update state, display state, and display mode fields), link parallel files 266 are also system data structures.
APPACK 218 in turn is comprised of a pack of services and functions for the integration of object managers, object management, object manager invocation, and object manager "matchmaking" and data interchange between objects.
In certain cases, the objects and files in a particular system are organized into "volumes" and a particular object catalog may contain entries for the objects within a given volume, there being more than one object catalog in the system if there is more than one volume. In other systems, objects and files may be cataloged in a single .object catalog. The object catalog includes an object table, indexed by object identifier, of all objects residing in a volume. In addition, the object catalog includes basic information regarding each link to or from each object having an entry in the object table.
There is a link parallel file 266 for each parent object in object catalog 252 having a data link therefrom. The link parallel file 266 associated with a particular object resides in the secondary data files of that object.
When a user selects to perform an operation upon a given object, the routines of APPACK 218 read the corresponding entry for that object type, operation, and, if applicable, language, from the object manager table to determine the corresponding object manager to be invoked. The particular object manager invoked to operate upon a particular object may depend upon the type of operation to be performed and certain object managers may operate with more than one type of object.
The object prototype table identifies prototype objects. An object prototype includes the fundamental, default characteristics of an object of corresponding type. The object prototype table provides a means for identifying prototype copies of each type of object installed in the system for which prototypes exist. New objects of any type for which there exists a prototype may be created by making copies of the object prototype, the copy of the prototype object then becoming a new object which may be modified or operated upon by the user. A profile editor may used to create a corresponding new profile for the new object and to modify the copy of the basic profile as necessary to reflect the modified characteristics of the object.
The user may create new types of objects having data already therein, for example, form letters. The user creates a new blank object by making a copy of the appropriate type of prototype object as described above. The user then enters the data that is to appear in the prototype object, modifying the object profile as required, and places an entry for this new prototype object in object prototype table. This new prototype object may then be used to create objects in the same manner as a blank prototype object, by making copies of the prototype object, and the data entered by the user in the prototype will appear in each copy of the prototype.
Resources are blocks of data that are used by programs but which are not stored as a part of any program's executable code. These resources may include one or more system resources, which are used by the system in general, for example, by various operating system and user interface functions, and one or more application-specific resources, which are used by the individual programs. In addition, the resources may include one or more resources which are particularly associated with one user of the system (stored in the user's profile).
RESPACK is a pack of services and functions used to access and modify the resources. Any program or user may use the facilities of RESPACK to create a resource, or to copy an existing resource and to modify the copied resource to meet the particular requirements of the program, function, or user. In these cases, the customized resource becomes particular to the program, function or user for which it was created or modified and, as will be described, becomes associated with that program, function, or user through a corresponding modification of the program's or user's associated profile. Thereafter, the customized resource will be used in place of the original, unmodified resource.
8 System Data Structures
The following describes various system data structures storing information relating to objects and links. This information is organized as tables of records, each record being organized into a set of fields.
8.1 System Database
There is one of each of the following for each system.
8.1.1 Object Type Table
The Object Type Table includes a record for each object type.
1.1(a) Object Type--4 bytes.
1.1(b) Object Class--4 bytes--This associates object types with categories familiar to users. Object type distinctions are generally hidden from users. Object "class" is intended to correspond to user-perceived distinctions. For example, the association of objects with object classes makes it easy to display to a user a list of all the user's "documents", despite the fact that these may have been created using two or more incompatible document editors (each corresponding to a different object type).
1.1(c) Display Name--the Resource ID of a resource containing the name of an object type for display to a user.
1.1(d) Display Icon--the Resource ID of a resource containing the icon associated with the object type.
1.1(e) Prototype ID--64 bytes--an Object Permanent ID of the primary prototype for objects of the associated Type.
1.1(f) Description--50 bytes--text description of the object type.
1.1(g) Create Flag--1 byte--set if users can create objects of this type.
8.1.2 Object Manager Table
The Object Manager Table is used to identify a program capable of performing a specified startup request for a specified type of object.
1.2(a) Object Type--4 bytes.
1.2(b) Request--4 bytes. This field can have a special value "all" to easily handle the simple case where a single program is used to handle all of the requests for a particular object type. Examples of other values for this field are:
start: perform the default startup operation for the specified object type.
edit: allow the user to edit the object.
read: allow the user to view the object without being able to modify it.
1.2(c) Request Name--Resource ID of a resource containing text describing the startup request, to be displayed in the Utility Menu for the associated object type. This field is only used when the startup request is not a standard request, but is application specific.
1.2(d) Object Manager ID--64 bytes--the file name of the program that can perform the associated request on objects of the associated type. If the value of this field is null, then when a startup request is made, the primary data file of the specified object is executed (i.e., the object is directly executable).
8.1.3 Object Prototype Table
The Object Prototype Table includes a record for each object prototype. There may be a plurality of prototypes for each object type. This table is used by Application Integration Services when performing an object create operation on file-based objects.
1.3(a) Object Type--4 bytes--code representing the object's type.
1.3(b) Location Code--2 bytes--language (e.g., English) associated with the object.
1.3(c) Prototype ID--64 bytes--an Object Permanent ID of a prototype for objects of the associated Type.
8.1.4 Customization Table
The Customization Table includes a record for each possible resource customization (i.e., for each Valid combination of Resource ID, Resource File, and Customization ID).
1.4(a) Customization ID--The Customization ID is used to determine what uses of a resource are altered by a particular customization.
1.4(b) Name--Resource ID of a resource containing a text string used to identify the associated Customization ID to the user.
1.4(c) Resource File--the name of a resource file containing a resource for which there is a customized version for the associated Customization ID.
1.4(d) Resource ID--identifies a resource within the associated resource file for which there is a customized version for the associated Customization ID.
8.1.5 Library Table
The Library Table includes a record for each document library which includes documents in the object catalog.
1.5(a) Library Type--1 byte (e.g., WP or WP Plus).
1.5(b) Library--8 bytes--name of the WP Plus library and the VS physical library.
1.5(c) Default Volume--1 byte--indicates whether a WP volume is the default WP volume.
1.5(d) Volume--8 bytes--name of the volume on which the library resides.
1.5(e) Document Library--1 byte--the WP name of the library.
1.5(f) Indexing--1 byte--indicates current state of the library: not indexed, only summary indexed, summary and WIT indexed.
1.5(g) Next Indexing--1 byte--the next index state. Has three possible values: not indexed, only summary indexed, summary and WIT indexed. The user sets this field to determine how the library should be indexed the next time indexing is performed.
1.5(h) Archivable Flag--1 byte--this is the default value for the Archivable Flag for objects created in the library corresponding to this record.
1.5(i) File Protection Class--1 byte--this is the default value for the File Protection Class for objects created in the library corresponding to this record.
1.5(j) Owner ID--8 bytes--the logon ID of the owner of the library corresponding to this record.
1.5(k) Folder ID--38 bytes--the Permanent ID and current location of the folder object to which-documents created in the library corresponding to this record should be synchronized.
8.1.6 Volume Table
The Volume Table includes a record for each configured volume on the system (e.g., all active Volumes and some archive volumes).
1.6(a) Volume--8 bytes--name of the volume.
1.6(b) Active Flag--1 byte--status of the volume: active or archive.
1.6(c) Volume Path Name--64 bytes--full path name for a volume on a system with volume names longer than 8 bytes.
8.1.7 System Configuration Table
The System Configuration Table contains a single record with information such as the following:
1.7(a) Record Access--1 byte--set to enable recording of date and time of accesses to objects.
1.7(b) Check ACL--1 byte--controls the checking of Access Control Lists during queries against the object catalog: never check, always check, or only check when the ACL Flag in the relevant object's record is set.
1.7(c) System Folder Volume--8 bytes--name of the volume on which the system folder resides.
8.2 Object Catalog
There is one of each of the following for each volume.
8.2.1 Object Table
The Object Table includes a record for each object in the catalog. Logically, there is a link count field for each record in this table, having the number of links to the object associated with the record. However, since this number can be determined by counting the records in the Link Table having the appropriate Child Object Permanent ID, the number need not be stored in the Object Table. It may be desirable to physically store the number in the Object Table to improve performance (i.e., to avoid counting records in the Link Table).
2.1(a) Object ID--4 bytes--the record serial number; uniquely identifies the object within the catalog. A new Object ID may be assigned if the object is moved so as to be indexed in another catalog.
2.1(b) Object Permanent ID--12 bytes; remains constant for an object even if the object is relocated. The first 6 bytes store the number of tenths of seconds since 1986 when the object was created; the second 6 bytes store the number of tenths of seconds since 1986 when the system on which the object was created was initialized for indexing.
2.1(c) Title--64 bytes--WIT ("word in text" indexed)--user definable free text.
2.1(d) Author--32 bytes--WIT--user definable free text.
2.1(e) Operator--32 bytes--WIT--user definable free text.
2.1(f) Comments--252 bytes--WIT--user definable free text.
2.1(g) Object Type--4 bytes--code representing the object's type.
2.1(h) Object Class--4 bytes--code representing the object's class. This could be determined by using the object's type as a key to the Object Class Table; however, the Class is stored here to improve performance.
2.1(i) Type--20 bytes--WIT--user definable free text.
2.1(j) Department--20 bytes--WIT--user definable free text.
2.1(k) Physical Location--64 bytes--the name of the object (or its primary part, if there is more than one part) in its native name space, e.g., file name or combination of database name and record number. For objects made up of more than one part (e.g., a plurality of files or records), this is the location of the primary part.
2.1(l) Creation Date and Time--8 bytes.
2.1(m) Created By--8 bytes--logon ID of the user that created the object.
2.1(n) Modification Date and Time--8 bytes.
2.1(o) Modified By--8 bytes--logon ID of the user that last modified the object.
2.1(p) Accessed Date and Time--8 bytes.
2.1(q) Accessed By--8 bytes--logon ID of the user that last accessed the object.
2.1(r) Printed Date and Time--8 bytes.
2.1(s) Printed By--8 bytes--logon ID of the user that last printed the object.
2.1(t) Archived Date and Time--8 bytes.
2.1(u) Archived By--8 bytes--logon ID of the user that last archived the object.
2.1(v) Archived Flag--1 byte--indicates whether the object has been archived or has been copied. Three values are possible: archived, copied, neither.
2.1(w) Archivable--1 bit--indicates what to do when it is determined that the files corresponding to an object no longer exist. If such situation is detected and this flag is not set, then the object's record is deleted. If such situation is detected and this flag is set, then the object's record is retained and the Archived field is set to the value "archived".
2.1(x) Archived Permanent ID--12 bytes--the Object Permanent ID of the object that was archived to this object.
2.1(y) Archived Current Location--28 bytes--either the current location of the object that was archived to this object or the current location where this object was archived. The current location of an object is its Object ID (4 bytes), an identifier for the volume in which it is cataloged (8 bytes), and an identifier for the system (16 bytes) on which that volume is located.
2.1(z) Words In Text--1 byte--used during a WIT query operation.
2.1(aa) Object WIT Flag--1 byte--set if the object ever was WITed or if the object is to be WITed.
2.1(ab) Owner ID--8 bytes--logon ID of the object's owner.
2.1(ac) File Protection Class--1 byte.
2.1(ad) ACL Flag--1 byte--set if the object has an Access Control List.
2.1(ae) Logical Size--4 bytes--Kbytes used by the object.
2.1(af) Physical Size--4 bytes--Kbytes allocated to the object.
2.1(ag) Number of Edits--2 bytes--number of times the object has been edited.
2.1(ah) Delete Flag--1 byte--set if the object should be deleted.
2.1(ai) Frozen--1 byte--set if the object cannot be edited.
2.1(aj) Damaged Flag--1 bit--set if the object has been damaged and cannot be opened.
2.1(ak) Revision History--3 bits--indicates whether revision history information is to be recorded. The following are possible values:
No: revision history information is not to be recorded.
Modifications: information relating to modifications of the object are to be recorded.
All: information relating to views of the object that may not modify the object is to be recorded as well as information about modifications.
2.1(al) Location Code--2 bytes--language (e.g., English) associated with the object.
2.1(am) Deletion Control--1 bit--determines what happens when the object's link count goes to zero; either the object and its record are deleted or just the record is deleted.
2.1(an) WP Synchronization Flag--1 bit--used for document objects to indicate if the object is synchronized with a document library, i.e., if some data about this object is duplicated in a document library.
2.1(ao) Print Defaults--default parameters used to print the object, such as:
--coordinates of place to start the text,
--orientation (landscape or portrait),
--form number,
--printer bin number,
--paper size,
--whether overlapping objects should cover each other or show through,
--whether the object should be clipped or should be shrunk to fit the paper,
--which print queue on which System.
8.2.2 Link Table
The Link Table includes a record for each reference to or by an object in the catalog. For a link between two objects in one catalog, there is a single link record in the Link Table of that catalog. For a link between objects in separate catalogs, there will be an entry in the Link Table of each of the two catalogs.
2.2(a) Parent Permanent ID--12 bytes--the Object Permanent ID of the parent.
2.2(b) Parent Current Location--28 bytes. The current location of an object is its Object ID (4 bytes), an identifier for the volume in which it is cataloged (8 bytes), and an identifier for the system (16 bytes) on which that volume is located. The identifier for the system is null if it is on the same system as this record. The identifier for the volume is null if it is on the same volume as this record.
2.2(c) Link ID--4 bytes--unique within the parent object. A Link ID is stored in a link marker in the parent object. It is this Link ID which enables an retrieval of the record from the Link Table corresponding to any particular link marker in a particular object.
2.2(d) Link Type--1 byte--possible values include:
Child: the usual value.
Version Of: the linked object is a version of the parent object.
Replication Of: the linked object is a copy of the parent object.
2.2(e) Data Link--1 bit--set if there is an entry in the link parallel file entry corresponding to this link.
2.2(f) Child Permanent ID--12 bytes--the Object Permanent ID of the child.
2.2(g) Child Current Location--28 bytes.
2.2(h) Child Type--4 bytes. Object type.
2.2(i) Child Title--64 bytes--a copy of the child object's Title field maintained in the Link Record to improve performance.
2.2(j) Child Author--32 bytes--a copy of the child object's Author field maintained in the Link Record to improve performance.
2.2(k) Copy Flag--1 bit. If set, the child object is copied when the parent is copied; if not set, the link to the child object is copied.
2.2(l) Annotation--252 bytes--user definable free text to describe the link.
2.2(m) Delete Flag--1 byte--set if this link record should be deleted. The use of this is internal to the database system. This permits the physical deletion of link records to be postponed until a convenient time.
2.2(n) Synchronize Link Flag--1 bit--set if this link record should be synchronized with its copy on another volume or system.
8.2.3 File List Table
The File List Table includes a record for each part of an object other than its primary part, these parts are typically files, but they may be something else, such as records. Link parallel files are listed in this table.
2.3(a) Record Serial Number--4 bytes--unique identifier for this file list record.
2.3(b) Object ID--4 bytes--identifier for the object record for the object of which the object part (e.g., file) identified in this record is a part.
2.3(c) Object Part Location--64 bytes--the name of the object part (e.g., file, record) in its native name space (e.g., file name or combination of database name and record number).
2.3(d) Remote Flag--1 byte--set if the part is located on a different system from this table.
8.2.4 Folder Table
The Folder Table includes a record for each folder in the Object Table.
2.4(a) Folder Object ID--4 bytes--Object ID of a folder object.
2.4(b) Creation Location--64 bytes--location where objects created in this folder should be located.
2.4(c) Creation File Class--1 byte--the default file class of all objects created in this folder.
2.4(d) Creation Document Library--8 bytes--document library where document objects created in this folder should be located.
8.2.5 Field WIT File
The Field WIT File includes a record for each word in the WIT ("word in text") indexed fields of the Object Table.
8.2.6 Object WIT File
The Object WIT File includes a record for each word in the WIT indexed documents.
8.2.7 Deleted Objects Table
The Deleted Objects Table includes a record for each object that has been indexed in the Object WIT Table and has since been deleted.
2.7(a) Record Serial Number--4 bytes--unique identifier for the record.
2.7(b) Object ID--4 bytes--identifies the record in the Object Table of the deleted document.
8.3 Link Parallel Files
A volume may contain many link parallel files. There will be a link parallel file for each object in which is embedded at least one data link (a link that includes a link specification). A Link Parallel File includes information relating to those links capable of being used for data transfer. A link parallel file exists for each object that contains such links.
3(a) Update State--1 byte--controls when a link is updated.
It can have the following values:
Manual: update occurs when specifically requested.
First Time: update occurs at most once per opening of the parent object and occurs the first time the child object is accessed.
Dynamic: update occurs whenever the child object is changed.
3(b) Display Mode--1 byte--controls what the user will see to represent the link.
Data: the linked data will be displayed.
Icon/Title: the title of the child object and/or an icon representing objects of the child's type will be displayed. The choice of icon or title is application dependent.
3(c) Display State--1 byte--when the Display Mode field indicates that linked data is to be presented to the user, the Display State field controls when the linked data will be displayed to the user. There may be a great deal of overhead associated with displaying linked data; for example, a user may prefer to be able to scroll quickly through a document rather than always have the pictures appear in the document. This field makes it possible for the user to express this performance preference.
Automatic: display linked data whenever the linked data falls within the user's.
On Request: display linked data only when specifically requested; otherwise, depending on the relationship between the linked data and the data in the parent, just the icon or title might be displayed, or an empty space might be displayed where the object would appear (e.g., an image in a document).
3(d) Link Specification Header--standard information preceding each link specification, includes the following fields:
--Version: 8 bytes--identifies the version of child object's object manager that created the link specification. This facilitates revision of an application while still supporting link specifications.
--Interchange Type: 4 bytes. The format through which the child's data is converted in passing it to the parent object.
--Length: 4 bytes--the number of bytes of the following link specification information.
3(e) Link Specification Informationa--variable length--details depend on the type of the child object. This field is interpreted by an object manager of objects of the child's type (not by Application Integration Services or by the object manager of the object in which the link is embedded) in order to identify the data within the child object that is referenced by the link.
3(f) Linked Data Copy--variable length--includes a copy of the linked data.
9 Object Manager Invocation
9.1 Invocation by Direct use of the Kernel
An object manager can be invoked by another program making a kernel call to directly invoke the object manager as a child process of the invoking program. However, invocation of an object manager is typically initiated by another program calling one of the APPACK invoke functions (e.g., APrqedit(), APinvoke() ).
Even when two applications need to communicate via non-standard protocol, there are advantages to choosing to using the APPACK invocation mechanism (using a private request) over direct invocation by kernel calls. For example, APPACK provides a higher level assistance in setting up communications between the applications. Further, the two communicating applications can detach from each other an both continue operation independently; this is because when APPACK invocation is used, both processes are children of the Application Manager process, rather than one of the two communicating processes being a child of the other.
9.2 Startup Requests
The present system supports a number of generic operations that may be performed upon objects. These operations are referred to as "startup requests" because, firstly, they are initiated as requests for operations to be performed and, secondly, each request results in the starting of an operation or process.
An important characteristic of the present system is that a set of operations is defined such that nearly any such operation can be performed on nearly all types of objects. The object managers of the present system are designed so that for each type of object as many of the standard requests as are practical or meaningful are supported. For file-based objects, some of the standard requests can be performed directly by APPACK; these are called optional requests, because these need only be supported by an object manager for those types of objects where the file-based operations performed by APPACK are inadequate.
Any application can be designed to support private requests, in addition to the standard requests this permits any application to define whatever specialized requests it might need, while still using the basic invocation mechanism supported by APPACK. Because any particular private request will not generally be supported for a large number of object types, other applications will not typically make such requests. Nonetheless, certain combinations of applications will benefit substantially from specially tailored requests and therefore will jointly define and support their own idiosyncratic requests.
Essentially, the difference between private requests and standard requests is the number of applications that support the requests. The designer of a particular application could choose to widely publish the definition of a private request. Many others may find the request useful enough to modify object managers to honor the request. The result is that the request becomes a de facto standard request.
The standard requests (including the "optional" requests that are typically performed by APPACK directly) are as follows:
START: perform the default operation. For many types of objects, the default operation is to open the object for editing by the user. If no object is specified, then a typical default operation is to allow the user to create a new object.
EDIT: allow the user to edit the object.
READ: allow the user to view the object, but not modify it.
RUN: execute the specified object. The object manager functions as an interpreter or program loader.
PRINT: queue the object for printing. An option specified with this request indicates whether the user should be prompted to provide print parameters or whether default parameters should be used.
UPDATE LINK: communicate to the parent object the latest version of data designated by a particular link specification. If the link specification is not valid, the child object manager should open a window and allow the user to respecify the link.
RESPECIFY LINK: open a window and allow the user to change the link specification. The child object manager should display the relevant portion of the child object (indicating the currently specified data) and allow the user to specify different data.
EDIT OBJECT PROFILE: open a window and allow the user to edit the child object's profile. The nature of the information included in the object profile depends on the object's type.
CUSTOMIZE: allow the user to customize the behavior of the object manager receiving the request. Modifiable characteristics have associated data stored in resources; customized resources are the result of this operation. Most programs will not have customizable behavior options and therefore will not support this request.
CONVERT OUT: provide the entire contents of the specified object. Upon receipt of such a request, an object manager should post an APMMOPCONVERTOUT operation with the matchmaker, including a list of interchange formats that can be offered (in order of increasing information loss).
CONVERT IN: create a new object receive data. Upon receipt of such a request, an object manager should post an APMMOPCONVERTIN operation with the matchmaker, including a list of interchange formats that can be accepted (in order of increasing information loss). A match message will then be issued by the matchmaker and a connection between the two object managers made to transfer the data.
COMPACT: compact the data storage in the specified object. Send bulletins to the requester including at least confirmation of completion or an error message.
RECOVER: recover the data storage in the specified object. Send bulletins to the requester including at least confirmation of completion or an error message.
WORD LIST: compile a list of all words in the object and send bulletins to the requester. The words are returned using the vanilla text interchange format; their order is important, to support phrase-oriented indexing.
CREATE: (optional) create a new object.
COPY: (optional) create a copy of an existing object.
RENAME: (optional) change the user-visible name of an object.
DELETE: (optional) delete the object.
FREEZE: (optional) freeze the object (e.g., modify an field in the object's record in the Object Table).
IMPORT: (optional) take an existing file an make it into an object.
9.3 Invocation by APPACK
The sequence of steps involved in using invocation of an object manager by means of APPACK are generally as follows:
(a) The requester calls one of the APPACK startup request routines, identifying a link (more parameters may be specified, especially if the general purpose APinvoke() function is used).
(b) The APPACK routine sends th