Procedure Vput(var msg: message_packet_type; sender: boolean; force: boolean; var own: boolean; var stat: VI_status_type); EXTERNAL; {*USER* Look through our existing cache of field values to see if the field value contained in MSG already exists. If it does, compare the values, then update cache with the new value, and finally return the appropriate VI_CHANGED or VI_NO_CHANGE in STAT to indicate if the values differed or not. If the field value is not in cache, but FORCE is TRUE, add it, and return VI_CHANGED. If the field value is not in cache, and FORCE is FALSE, then ignore value and return VI_NOT_FOUND. The FORCE boolean thus controls whether a new entry is made or not in cache if the an existing entry is not found in cache. If SENDER is true, the caller plans to send out the message. Thus if the caller is the owner of the field, we shall update the FIELD_STATUS value, and check if it changed from the previous value. If the caller is not the owner, then we ignore the FIELD_STATUS value and leave the one in cache as is. If SENDER is false, then the caller is receiving this message, and so if we are the owner, we ignore the FIELD_STATUS, keeping the one we already have. If we are not the owner, we update the FIELD_STATUS value as it must be from the owner, and check if it changed from the previous value. If the field is "owned" by this program, return OWN as TRUE, else return it as FALSE. Naturally, it must be in cache to be "owned". The FIELD_NAME and FIELD_VALUE fields of MSG must be correct before making this call. The FIELD_STATUS field need only be correct before making this call if UPSTAT is true. All other fields of MSG need not be current for this call. The message (MSG) variable will normally remain unchanged upon return from VSEND. The only change that can happen, is that the message length (in MSG.FIELD_VALUE) will be adjusted to reflect the length of the field value already in cache. If needed the value will be padded with blanks. This is done, since the first VSEND, which resulted in the field value being placed in cache, also determines the "official" field length that will be use in subsequent sends. *ERROR CODES* VI_CHANGED - Field value was placed in cache, and either the supplied value was different that the value already in cache, or this is the first time the value has been placed in cache and the FORCE boolean was TRUE. VI_NO_CHANGE - Field value was placed in cache, and the supplied value was the same as the value already in cache. VI_NOT_FOUND - Field value was not found in cache, and since the FORCE boolean is FALSE, no entry was made for the field in cache. VI_NO_MEMORY - Field value was not already in cache, and the FORCE boolean was TRUE, however, we were unable to place the supplied field value in cache as there was no more memory available in cache. }