CONTENTS Title Page Copyright Page Preface Caution Part I Introduction 1 Introduction to the Type Library 1.1 Using Trellis Tools to Learn About the Type Library 1.2 Overview of Type Library Categories 1.3 Example of an Interface Part II Library Types 2 Mathematical Types 2.1 Boolean 2.1.1 String Form for Booleans 2.2 Integer 2.2.1 Performing Algebraic Operations on Integers 2.2.2 Comparing Integers 2.2.3 Determining Relationships Among Integers 2.2.4 Iteration with Integers 2.2.5 String Form for Integers 2.3 Real Numbers 2.3.1 Performing Algebraic Operations on Real Numbers 2.3.2 Converting Real Numbers to Integers 2.3.3 Comparing Real Numbers 2.3.4 Determining Relationships Among Real Numbers 2.3.5 String Form for Real Numbers 2.4 Random Integer 2.4.1 Creating Random Integers 2.4.2 Accessing Random Integer Data 2.5 Null 2.5.1 String Form for Null 3 String and Character Types 3.1 String 3.1.1 Accessing String Data 3.1.2 Iteration with Strings 3.1.3 Searching Strings 3.1.4 Creating and Manipulating Strings 3.1.5 Comparing Strings 3.1.6 Determining Relationships Among Strings 3.1.7 String Form for Strings 3.2 Character 3.2.1 Converting Characters to and from ASCII 3.2.2 Identifying an Argument as Part of a Character Group 3.2.3 Named Characters 3.2.4 Iteration with Characters 4 Temporal Types 4.1 Time 4.1.1 Accessing Time Data 4.1.2 Performing Algebraic Operations on Time 4.1.3 Comparing Times 4.1.4 Determining Relationships Among Times 4.1.5 String Form for Times 4.2 Duration 4.2.1 Accessing Duration Data 4.2.2 Performing Algebraic Operations on Durations 4.2.3 Comparing Durations 4.2.4 Determining Relationships Among Durations 4.2.5 Creating Durations 4.2.6 String Form for Durations 5 Auxiliary Types 5.1 Printable 5.1.1 Printing Operations 5.1.2 Making a Type Printable 5.2 Readable 5.2.1 Reading Operations 5.2.2 Making a Type Readable 5.3 Hashed 5.3.1 Hash Values 5.3.2 Generating Hash Values for Constant Types 5.3.3 Generating Hash Values for Mutable Types 5.4 Enumeration 5.4.1 Implementing Instances of Enumeration 5.4.2 String Form for Enumeration 6 Collection Types 6.1 Constant, Mutable, and Abstract Collection Type Families 6.2 The Not_flat Attribute 6.3 Collection 6.3.1 Determining the Contents of a Collection 6.3.2 Converting Collections 6.3.3 String Form for Collections 7 Sequence Types 7.1 Sequence 7.1.1 Accessing the Contents of Sequences 7.1.2 Accessing Subsequences Within a Sequence 7.1.3 Modifying Sequences 7.1.4 Searching Sequences 7.1.5 Creating Instances of Sequences 7.2 Fix_seq 7.2.1 Fix_seq Operations and Components 7.2.2 Creating Instances of Fix_seq 7.3 Dyn_seq 7.3.1 Accessing the Contents of Dyn_seq 7.3.2 Converting and Modifying Dyn_seq 7.3.3 Expanding and Contracting the Boundaries of Dyn_seq 7.3.4 Expanding and Contracting from the Middle 7.3.5 Creating Instances of Dyn_Seq 8 Set Types 8.1 Abstract_set 8.1.1 Performing Algebraic Operations on Abstract_set 8.1.2 Comparing Abstract_sets 8.2 Sets 8.2.1 Comparing Sets 8.2.2 Modifying Sets 8.2.3 Creating Sets 9 Table Types 9.1 Keyed_Collection 9.2 Table 9.2.1 Creating Tables 9.2.2 Accessing the Contents of a Table 9.2.3 Manipulating Elements in a Table 9.2.4 Searching Tables 10 Input/Output Types 10.1 Stream 10.2 In_stream 10.2.1 Accessing Characters from an In_stream 10.2.2 Accessing Strings from an In_stream 10.2.3 Closing In_streams 10.2.4 Getting Information About an In_stream 10.2.5 Changing the Default In_stream 10.3 In_file 10.3.1 In_disk_file 10.3.2 Creating In_files 10.3.3 Manipulating Filenames 10.4 In_buffer 10.5 Out_stream 10.5.1 Transferring Characters from an Out_stream 10.5.2 Changing the Default Out_stream 10.6 Out_file 10.6.1 Out_disk_file 10.7 Out_buffer 10.7.1 Creating Out_Buffers 10.7.2 Manipulating an Out_buffer 11 System Types 11.1 Object 11.1.1 Learning about Objects 11.1.2 Determining the Equivalence of Objects 11.1.3 Copying Objects 11.2 Type 11.2.1 Specifying Objects to be of Type Type 11.2.2 Building Union Types 11.2.3 Comparing Types 11.2.4 Declared_type 11.2.5 String Form for Types 11.3 File_system 11.3.1 Requesting Information about a File 11.3.2 Manipulating Files 11.3.3 Manipulating File Names 11.4 Command_line 11.4.1 Accessing Command_line Data Part III Facility Types 12 Callout Facility 12.1 Using the Callout Facility 12.2 Preparing Called Routines on VMS 12.3 Preparing Called Routines on ULTRIX 12.4 Passing Arguments 12.5 Defining Encode and Decode Operations 12.6 Interfacing to Called Routines 12.7 Example of a VMS User-Defined Type 13 Callin Facility 13.1 Calling Trellis Operations 13.2 Creating and Manipulating Trellis Objects 13.3 Maintaining Correct References to Trellis Objects 13.3.1 Using Trellis Handles 13.3.2 Disabling Garbage Collections 13.4 Handling Exceptions 13.5 Starting Trellis 14 SQL Facility 14.1 Using The SQL Facility 14.1.1 Creating an SQL Object 14.1.2 Defining SQL$DATABASE 14.1.3 Retrieving Employees from Employee Table 14.1.4 Passing Values to SQL Statements 14.1.5 Using Insert, Delete and Update Operations 14.2 Converting Data Types 15 Multiple Activities 15.1 Activity Type 15.2 Starting Activities 15.3 Terminating Activities 15.4 Checking the Status of Activities 15.5 Waiting for Activity Termination 15.6 Monitoring the Completion of Activities in a Set 15.7 Setting Priorities for Activities 15.8 Storing Activity-Specific Information 16 Concurrency Control 16.1 Atomic Objects 16.2 Strategies for Making Objects Atomic 16.3 Mutual Exclusion Locks 16.4 User-Defined Locks 16.5 Wait Queues 16.6 Additional Concurrency Control Mechanisms A Callout-Related Types and Operations A.1 Callout_facility A.2 Callout_buffer A.3 Encode and Decode Operations for Primitive Types A.3.1 Boolean Callout Operations A.3.2 Bytevector Callout Operations A.3.3 Integer Callout Operations A.3.4 Real Callout Operations A.3.5 String Callout Operations B The SQL-Related Types and Operations B.1 SQL B.2 RDB_SQL B.3 Dynamic_SQL C Activity-Related Type Interfaces C.1 Activity C.2 Activity_status C.3 Activity_set C.4 Lock C.5 Abstract_wait_queue D Installing the Callout Facility D.1 Installing Callout on VMS D.2 Installing Callout on ULTRIX E Installing the SQL Facility EXAMPLES 1-1 Example Interface for Hash Type Module 16-1 Read_Write Lock Example PART I 16-2 Read_Write Lock Example PART II 16-3 Read_Write Lock Example PART III FIGURES 1-1 Hierarchy Diagram for String 3-1 Hierarchy Diagram for String 5-1 Hierarchy Diagram for Hashed 6-1 Hierarchy Diagram for Collection 10-1 Hierarchy Diagram for I/O Types 11-1 Example of State Equivalence Relationships TABLES 2-1 Boolean Operations 2-2 Integer Parity Operations 2-3 Integer Algebraic Operations 2-4 Integer Comparison Operations 2-5 Integer Relationship Operations 2-6 Integer Iteration Operations 2-7 Real Algebraic Operations 2-8 Real Unary Conversion Operation 2-9 Random Integer Type Creation Operations 2-10 Random Integer Get-Only Components 3-1 String Components 3-2 String Access Operations 3-3 String Iteration Operations 3-4 String Search Operations 3-5 String Creation and Manipulation Operations 3-6 Operations for Converting and Modifying Strings 3-7 Character Conversion Functions 3-8 Public Character Groups 3-9 Return Value Operations 3-10 Public Character Names 3-11 Character Iteration Operations 4-1 Fixed Names 4-2 Time Components 4-3 Time Get-Only Components 4-4 Time Algebraic Operations 4-5 Time Comparison Operations 4-6 Time Relationship Operations 4-7 Duration Components 4-8 Duration Algebraic Operations 4-9 Duration Type Creation Operations 5-1 Printable Subtypes 5-2 Printing Operations 5-3 Reading Operations 6-1 Collection Contents Operations and Components 6-2 Collection Conversion Operations 7-1 Sequence Components 7-2 Subsequence Access Operations 7-3 Operations for Converting and Modifying Sequences 7-4 Sequence Creation Operations 7-5 Differences in Component Implementation for Fix_seq 7-6 Dyn_seq Get and Put Components 7-7 Dyn_seq Boundary Expansion Operations 7-8 Dyn_seq Middle Expansion Operations 7-9 Dyn_seq Middle Contraction Operations 8-1 Abstract_set Algebraic Operations 8-2 Set Comparison Operations 8-3 Set Modification Operations 9-1 Table Creation Operations 9-2 Non-Hash Table Create Operations 9-3 Table Access Iterators 9-4 Table Insertion Operations 9-5 Table Remove Element Operations 9-6 Table Reset and Convert Operations 10-1 Stream Components and Operations 10-2 In_stream Character Access Operations 10-3 In_stream String Access Operations 10-4 In_stream Information Operations 10-5 In_file File Name Manipulation Operations 10-6 Out_stream Output Operations 10-7 Out_buffer Type Creation Operations 10-8 Out_Buffer Manipulation Operations 11-1 Object Information Operations 11-2 Object Equivalence Operations 11-3 Object Copy Operations 11-4 Type Comparison Operations 11-5 File_system Information Operations 11-6 File_system File Manipulating Operations 11-7 File_system File Name Manipulating Operations 11-8 Command_line Components 12-1 Other Callout Operations and Their Return Types 12-2 Builtin Types and Their Operations 13-1 Return Status Codes for Callin Operations 13-2 Handle Manipulation Operations 13-3 Operations for Disabling Garbage Collections 13-4 Trellis_System_Start Operation Status Codes 15-1 Activity Monitoring Operations and Components