CONTENTS Title Page Copyright Page Preface 1 Overview of System Access Facilities 1.1 File System Interface 1.2 Operating System Information 1.3 Callout and Callback Facilities 1.4 Alien Structures 1.5 Interrupt Functions 1.6 Controlling Interruptions and Synchronizing Execution 2 File System Interface 2.1 Pathnames and Namestrings 2.1.1 Relationship Between Logical Names and Pathnames 2.1.2 When to Use Pathnames 2.1.3 Fields of a Common LISP Pathname 2.1.4 Values of VAX LISP Pathname Fields 2.1.5 Creating Pathnames 2.1.6 Comparing Similar Pathnames 2.1.7 Purpose of Namestrings 2.1.8 Converting Pathnames into Namestrings 2.1.9 Using the * DEFAULT-PATHNAME-DEFAULTS * Variable 2.2 Directories 3 Getting Operating-System Information 3.1 Accessing the Command Line 3.2 Finding the Version Number 3.3 Getting Device Information 3.4 Getting File Information 3.5 Getting Process Information 3.6 Controlling Terminal Characteristics 3.6.1 Using the GET-TERMINAL-MODES Function 3.6.2 Using the SET-TERMINAL-MODES Function 3.6.3 Handling Nonstandard Terminal States 3.7 Getting System Messages 3.8 Using Logical Names 4 Interacting with External Routines 4.1 VAX Procedure Calling Conventions 4.2 Argument and Return Value Definitions 4.2.1 Access Capability 4.2.2 Passing Mechanism 4.2.3 Data Type Conversions 4.3 Writing and Linking an External Routine 4.4 Defining an External Routine 4.4.1 External Routine Names and Options 4.4.2 Documentation String 4.4.3 Argument Descriptions 4.5 Calling an External Routine 4.6 Calling System Services 4.6.1 Defining System Services 4.6.2 Calling System Services 4.7 Creating a Callback Function 4.7.1 Callback Function Names 4.7.2 Callback Arguments 4.7.3 Callback Return Values 4.7.4 Writing a Callback Routine 4.7.4.1 Passing Arguments to a Callback Routine 4.7.4.2 Passing an Argument List to a Callback Routine 4.7.5 Restrictions on Callback 4.8 Errors During External Routine Execution 4.9 Debugging an External Routine 4.10 Suspending a LISP System Containing External Routine Definitions 5 Defining and Creating Alien Structures 5.1 Defining an Alien Structure 5.2 Alien Structure Name and Options 5.2.1 Naming the Constructor Function 5.2.2 Naming Accessor Functions 5.2.3 Naming the Copier Function 5.2.4 Naming the Predicate Function 5.2.5 Specifying a Print Function 5.3 Alien Structure Documentation String 5.4 Alien Structure Field Descriptions 5.4.1 Field Name 5.4.2 Field Type 5.4.3 Field Positions 5.4.3.1 Start and End Positions 5.4.3.2 Gaps Between Field Positions 5.4.3.3 Overlapping Fields 5.4.4 Field Options 5.4.4.1 Initial Value 5.4.4.2 Read-Only Value 5.4.4.3 Repeated Field 5.4.4.4 Similar-Field Distances 5.5 Creating an Alien Structure 5.5.1 Initializing and Changing Data Fields 5.5.2 Setting Allocation Size 5.5.3 Allocating Static or Dynamic Space 5.5.4 Setting the Pointer to the Data Vector 6 Interrupt Functions 6.1 Overview of Interrupt Functions 6.2 Asynchronous Events in VMS 6.2.1 Asynchronous System Traps (ASTs) 6.2.2 Routines That Cause ASTs 6.2.2.1 System Routines 6.2.2.2 VAX LISP Routines 6.2.2.3 Keyboard Functions 6.3 Establishing LISP Interrupt Functions 6.3.1 Defining an Interrupt Function 6.3.1.1 Passing Arguments to Interrupt Functions 6.3.1.2 Specifying the Interrupt Level 6.3.1.3 Automatic Removal of Interrupt Functions 6.3.2 Associating an Interrupt Function with an Asynchronous Event 6.3.2.1 Calling Out to System Routines That Cause Asynchronous Events 6.3.2.2 Using VAX LISP Functions 6.3.3 Removing an Interrupt Function from LISP 6.3.4 Suspending Systems Containing Interrupt Functions 7 Interrupt Levels, Critical Sections, and Synchronization 7.1 Using Interrupt Levels 7.2 Executing Critical Sections 7.3 Synchronizing Program Execution EXAMPLES 4-1 Calling an External Routine from C 4-2 Accessing Callback Arguments 4-3 Defining Arguments to a Callback Routine 4-4 Calling Out and Back, Passing Arguments 4-5 Dereferencing an Argument List 4-6 Accessing an Argument List 4-7 Calling a Callback Routine with an Argument List FIGURES 4-1 Calling External Routines 4-2 Calling Back to LISP 5-1 Internal Storage of FAMILY-REC TABLES 2-1 VAX LISP Pathname Fields 3-1 GET-DEVICE-INFORMATION Keywords 3-2 GET-FILE-INFORMATION Keywords 3-3 GET-PROCESS-INFORMATION Keywords 3-4 GET-TERMINAL-MODES Keywords 3-5 Logical Name Table Keywords 4-1 Values of the :MECHANISM Keyword 4-2 Data Type Conversion 4-3 Conversion of Callout Return Values 5-1 Alien Structure Field Types