Changing the Optimization Level ......................... 87
Removing Observability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Reducing an Object's Size ............................. 88
Chapter 8. Creating a Service Program ..................... 91
Service Program Overview .............................. 91
Strategies for Creating Service Programs ...................... 92
Creating a Service Program Using CRTSRVPGM ................. 92
Changing A Service Program ........................... 93
Related CL commands ............................... 93
Sample Service Program ............................... 94
Creating the Service Program ........................... 97
Binding to a Program ................................ 98
Updating the Service Program .......................... 100
Sample Binder Listing .............................. 100
Chapter 9. Running a Program ......................... 103
Running a Program Using the CL CALL Command ............... 103
Passing Parameters using the CL CALL Command ............. 104
Running a Program From a Menu-Driven Application .............. 106
Running a Program Using a User-Created Command .............. 108
Replying to Run-Time Inquiry Messages ..................... 108
Ending an ILE Program ............................... 109
Managing Activation Groups ............................ 109
Specifying an Activation Group ......................... 110
Running in the OPM Default Activation Group ................ 111
Maintaining OPM RPG/400 and ILE RPG Program Compatibility ..... 111
Deleting an Activation Group .......................... 112
Reclaim Resources Command ......................... 112
Managing Dynamically-Allocated Storage ..................... 113
Managing the Default Heap Using RPG Operations ............. 113
Heap Storage Problems ............................. 118
Managing Your Own Heap Using ILE Bindable APIs ............. 119
Chapter 10. Calling Programs and Procedures ............... 127
Program/Procedure Call Overview ......................... 127
Calling Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Calling Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
The Call Stack ................................... 129
Recursive Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Parameter-Passing Considerations . . . . . . . . . . . . . . . . . . . . . . . 131
Using a Prototyped Call ............................... 133
Using the CALLP Operation ........................... 133
Calling within an Expression ........................... 134
Examples of Free-Form Call ........................... 135
Passing Prototyped Parameters .......................... 135
Parameter Passing Styles ............................ 135
Using Operational Descriptors .......................... 138
Omitting Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Checking for the Number of Passed Parameters ............... 141
Passing Less Data Than Required ....................... 145
Order of Evaluation ................................ 146
Interlanguage Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
| Interlanguage Calling Considerations ....................... 147
Contents v