Walter, Thanks for your answers. I will consider the first three questions answered, since they are at the discretion of the EDA vendor or model maker and we don't seem to need to write anything into the spec about them. Regarding the answer to the **msg question, your answer indicates that it was not intended to be used by AMI_GetWave. However, this is not clear from reading the spec, and it seems that this "loophole" can be "exploited" in some ways by model makers and EDA vendors, especially if the two are the same people... I also wonder how we could implement the suggestion Ambrish made for the BIRD draft on the function return value to provide messages to the EDA tool and its user about the various failures a GetWave function could experience. If **msg is not available to GetWave it can only send messages to the EDA tool through the AMI_parameters_out string for which we either have to define some new reserved parameters for messaging, or we would have to go the less rigorously defined Model_Specific route (which might still be good enough to put things on the screen or into undefined files). The thing about letting GetWave use **msg is that it can be done painlessly if we spell out a few rules (which might have to be done either way to have a more robust spec). The only question is what these rules should be. Also, you say: "The EDA tool cannot assume that AMI_GetWave is going to do anything with the **msg data except possibly de-allocate it" and "AMI_GetWave may de-allocate memory allocated by previous calls to AMI_Init and AMI_GetWave. AMI_Close is expected to de-allocate any memory allocated by AMI_Init or AMI_GetWave not already de-allocated." I was under the impression that the deallocation of memory was the AMI_Close function's job (unless the nature of the multiple GetWave calls would lead to "memory leaks" while they are executed). I feel that we should be a little more specific in the spec than just say things like "memory is allocated and deallocated by the model". Part of me says that we shouldn't have to spell out every little detail and allow some freedom for the model makers, but at the same time I feel that we should make the model makers' life as easy as possible. There are times when too much freedom can cause more trouble than help... Thanks, Arpad ===================================================================== From: Walter Katz [mailto:wkatz@xxxxxxxxxx] Sent: Tuesday, May 24, 2011 10:21 AM To: Muranyi, Arpad; 'IBIS-ATM' Subject: RE: [ibis-macro] More new BIRD drafts posted on the ATM website Arpad, Each call to an AMI_Init and AMI_GetWave use an independent set of arguments which may or may not have the same pointer addresses and memory. The only thing that must be maintained between the calls is AMI_memory which the model allocates to stores persistent information that gets communicated from the AMI_Init and AMI_GetWave to subsequent calls to AMI_GetWave and AMI_Close. Is the EDA tool supposed to provide two independent addresses for the AMI_parameters_out arguments in the AMI_Init and AMI_GetWave fuctions? WMK> "At the discretion of the EDA Tool" Is the AMI_Init function and the AMI_GetWave function supposed to use the same string pointers (memory locations)? WMK> I assume you mean memory location of the string: "At the discretion of the model developer" Are multiple AMI_GetWave functions supposed to use the same string pointers (memory location)? WMK> I assume you mean memory location of the string: "At the discretion of the model developer" Is AMI_GetWave allowed to put string pointers into the **msg argument's memory location? No. The EDA tool cannot assume that AMI_GetWave is going to do anything with the **msg data except possibly de-allocate it. Spell out which function does the memory allocation (AMI_Init, AMI_GetWave) and which function does the deallocation (AMI_Close). WMK> AMI_Init allocates the memory it allocates, and AMI_GetWave allocates the memory it allocates. The DLL maintains the list of allocated memory (in AMI_memory). AMI_GetWave may de-allocate memory allocated by previous calls to AMI_Init and AMI_GetWave. AMI_Close is expected to de-allocate any memory allocated by AMI_Init or AMI_GetWave not already de-allocated. Walter