Added October 2014
ERSATZ definition enhancement: ersatz definition files may contain ++INCLUDE statements of the form:
++INCLUDE dev:file.erz[p,pn]
In addition, the dev specified in the ++INCLUDE statement may then be referenced from within the included file using the pseudo-environment variable %INCDEV%, e.g.
ADCJSON:=%INCDEV%:[907,10]
The combination of these two enhancements facilitates the ad-hoc addition of modular sets of current-device-relative ersatz definitions. As an example, for the 2014 A-Shell Developer Conference, we created a set of ersatz definitions, in the file ADC.ERZ:
ADCARY:=%INCDEV%:[908,61]
ADCCGI:=%INCDEV%:[908,62]
ADCJSON:=%INCDEV%:[908,63]
Because there is no explicit device reference, these ersatz directories can be installed on any available device on the target machine, assuming no conflicting PPNs. Let's say we want to use an existing device DSK29:. To install the ersatz definitions copy the ADC.ERZ file to any ppn on DSK29, let's say DSK29:[1,2]. Then just add a ++INCLUDE reference to it in the main system ersatz.ini:
++include DSK29:ADC.ERZ[1,2]
Note: "main system ersatz.ini" refers to last one referenced in miame.ini, since that is the only one that will be reprocessed on the fly, which is an essential part of this scheme.
Now, without re-launching A-Shell, you can use those ersatz definitions, i.e. LOG ADCJSON:
Aside from ad-hoc ersatz additions like this, the feature is also useful for maintaining different versions of the same ersatz definitions. For example, you might have a set of ersatz definitions for your application, but you also want to maintain two versions, the stable version and the development version. With this scheme, you can use a single app.erz file containing your ersatz definitions, and just install it and the associated directories on two different devices. By avoiding the need to explicitly reference the devices, you avoid the hassle of having to convert the device reference to match the actual device where you installed it, as well as the confusion that occurs when you forget to do that.
Warning: If the applicable ERSATZ statement in miame.ini comes before the DEVICE statement that defines the device referenced in the ++INCLUDE, it won't be resolved until after A-Shell is launched and a subsequent reference is made to the ersatz. Failed references trigger a re-scan of the ersatz definitions, after a small time interval. So that generally isn't a problem. BUT, in the case of the APN compiler command line, it only gets one chance to define the ersatzes, so if you are using this technique, move the ERSATZ statement(s) below the DEVICE statements.
History
2014 October, A-Shell 6.1.1393: Add ++INCLUDE capabilities