diff -c ../StreamDevice-2-1/src/StreamEpics.cc src/StreamEpics.cc *** ../StreamDevice-2-1/src/StreamEpics.cc Tue May 30 15:49:11 2006 --- src/StreamEpics.cc Wed Jun 7 10:33:24 2006 *************** *** 765,773 **** getFieldAddress(const char* fieldname, StreamBuffer& address) { DBADDR dbaddr; ! char fullname[PVNAME_SZ + 1]; ! sprintf(fullname, "%s.%s", name(), fieldname); ! if (dbNameToAddr(fullname, &dbaddr) != OK) return false; address.append(&dbaddr, sizeof(dbaddr)); return true; } --- 765,782 ---- getFieldAddress(const char* fieldname, StreamBuffer& address) { DBADDR dbaddr; ! if (strchr(fieldname, '.') != NULL) ! { ! // record.FIELD (access to other record) ! if (dbNameToAddr(fieldname, &dbaddr) != OK) return false; ! } ! else ! { ! // FIELD in this record ! char fullname[PVNAME_SZ + 1]; ! sprintf(fullname, "%s.%s", name(), fieldname); ! if (dbNameToAddr(fullname, &dbaddr) != OK) return false; ! } address.append(&dbaddr, sizeof(dbaddr)); return true; } diff -c ../StreamDevice-2-1/src/StreamProtocol.cc src/StreamProtocol.cc *** ../StreamDevice-2-1/src/StreamProtocol.cc Mon May 29 18:15:01 2006 --- src/StreamProtocol.cc Wed Jun 7 10:33:24 2006 *************** *** 1439,1446 **** if (!client->getFieldAddress(buffer(fieldname), fieldAddress)) { errorMsg(line, ! "Field '%s' of '%s' not found\n", ! buffer(fieldname), client->name()); return false; } source = fieldnameEnd; --- 1439,1445 ---- if (!client->getFieldAddress(buffer(fieldname), fieldAddress)) { errorMsg(line, ! "Field '%s' not found\n", buffer(fieldname)); return false; } source = fieldnameEnd; diff -c ../StreamDevice-2-1/doc/formats.html doc/formats.html *** ../StreamDevice-2-1/doc/formats.html Mon May 29 11:40:46 2006 --- doc/formats.html Wed Jun 7 17:36:53 2006 *************** *** 100,109 **** types for details.

! To use other record fields in the conversion, write the field name in ! parentheses directly after the %. For example out "%(EGU)s"; outputs the EGU ! field formatted as a string. It is your responsibility that the data type of the record field matches the data type of the conversion or can be converted to a matching type. Note that using this syntax is by far not as efficient as using the --- 100,115 ---- types for details.

! To use other fields or even fields of other records on the same IOC in the ! conversion, write the field name in parentheses directly after the ! %. For example out "%(EGU)s"; outputs the EGU ! field formatted as a string. ! Use in "%(otherrecord.VAL)f"; to write the floating ! point input value into the VAL field of ! otherrecord. ! This does not process otherrecord! ! Set the FLNK to that record to process it. It is your responsibility that the data type of the record field matches the data type of the conversion or can be converted to a matching type. Note that using this syntax is by far not as efficient as using the