allow =fields ranges in *.dbd.pod

This commit is contained in:
2025-05-19 17:44:26 +02:00
committed by Andrew Johnson
parent 51b57e0043
commit 37741efa38
12 changed files with 43 additions and 37 deletions

View File

@@ -226,7 +226,7 @@ This flag controls value, log (archive) and alarm change events.
The input links from where the values of A,...,U are fetched
during record processing.
=fields INPA, INPB, INPC, INPD, INPE, INPF, INPG, INPH, INPI, INPJ, INPK, INPL, INPM, INPN, INPO, INPP, INPQ, INPR, INPS, INPT, INPU
=fields INPA - INPU
=cut
@@ -341,7 +341,7 @@ during record processing.
Thse fields hold the scalar or array values fetched through the input links
INPA,...,INPU.
=fields A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U
=fields A - U
=cut
@@ -561,7 +561,7 @@ INPA,...,INPU.
Field types of the input value fields.
The choices can be found by following the link to the menuFtype definition.
=fields FTA, FTB, FTC, FTD, FTE, FTF, FTG, FTH, FTI, FTJ, FTK, FTL, FTM, FTN, FTO, FTP, FTQ, FTR, FTS, FTT, FTU
=fields FTA - FTU
=cut
@@ -742,7 +742,7 @@ Note that access to the C<NOT> field from C code must use the field name in
upper case, e.g. C<< prec->NOT >> since the lower-case C<not> is a reserved
word in C++ and cannot be used as an identifier.
=fields NOA, NOB, NOC, NOD, NOE, NOF, NOG, NOH, NOI, NOJ, NOK, NOL, NOM, NON, NOO, NOP, NOQ, NOR, NOS, NOT, NOU
=fields NOA - NOU
=cut
@@ -899,7 +899,7 @@ word in C++ and cannot be used as an identifier.
These fields specify how many array elements the input value fields currently
contain.
=fields NEA, NEB, NEC, NED, NEE, NEF, NEG, NEH, NEI, NEJ, NEK, NEL, NEM, NEN, NEO, NEP, NEQ, NER, NES, NET, NEU
=fields NEA - NEU
=cut
@@ -1035,7 +1035,7 @@ contain.
The output links through which the VALA ... VALU field values are sent
during record processing, provided the subroutine returned 0.
=fields OUTA, OUTB, OUTC, OUTD, OUTE, OUTF, OUTG, OUTH, OUTI, OUTJ, OUTK, OUTL, OUTM, OUTN, OUTO, OUTP, OUTQ, OUTR, OUTS, OUTT, OUTU
=fields OUTA - OUTU
=cut
field(OUTA,DBF_OUTLINK) {
@@ -1149,7 +1149,7 @@ during record processing, provided the subroutine returned 0.
These fields hold scalar or array data generated by the subroutine which will
be sent through the OUTA ... OUTU links during record processing.
=fields VALA, VALB, VALC, VALD, VALE, VALF, VALG, VALH, VALI, VALJ, VALK, VALL, VALM, VALN, VALO, VALP, VALQ, VALR, VALS, VALT, VALU
=fields VALA - VALU
=cut
@@ -1369,7 +1369,7 @@ be sent through the OUTA ... OUTU links during record processing.
The previous values of the output fields.
These are used to determine when to post events if EFLG is set to C<ON CHANGE>.
=fields OVLA, OVLB, OVLC, OVLD, OVLE, OVLF, OVLG, OVLH, OVLI, OVLJ, OVLK, OVLL, OVLM, OVLN, OVLO, OVLP, OVLQ, OVLR, OVLS, OVLT, OVLU
=fields OVLA - OVLU
=cut
@@ -1526,7 +1526,7 @@ These are used to determine when to post events if EFLG is set to C<ON CHANGE>.
Field types of the output value fields.
The choices can be found by following a link to the menuFtype definition.
=fields FTVA, FTVB, FTVC, FTVD, FTVE, FTVF, FTVG, FTVH, FTVI, FTVJ, FTVK, FTVL, FTVM, FTVN, FTVO, FTVP, FTVQ, FTVR, FTVS, FTVT, FTVU
=fields FTVA - FTVU
=cut
@@ -1703,7 +1703,7 @@ The choices can be found by following a link to the menuFtype definition.
These fields specify how many array elements the output value fields may hold.
=fields NOVA, NOVB, NOVC, NOVD, NOVE, NOVF, NOVG, NOVH, NOVI, NOVJ, NOVK, NOVL, NOVM, NOVN, NOVO, NOVP, NOVQ, NOVR, NOVS, NOVT, NOVU
=fields NOVA - NOVU
=cut
@@ -1860,7 +1860,7 @@ These fields specify how many array elements the output value fields may hold.
These fields specify how many array elements the output value fields currently
contain.
=fields NEVA, NEVB, NEVC, NEVD, NEVE, NEVF, NEVG, NEVH, NEVI, NEVJ, NEVK, NEVL, NEVM, NEVN, NEVO, NEVP, NEVQ, NEVR, NEVS, NEVT, NEVU
=fields NEVA - NEVU
=cut
@@ -1996,7 +1996,7 @@ contain.
These fields specify how many array elements the old value fields currently
contain.
=fields ONVA, ONVB, ONVC, ONVD, ONVE, ONVF, ONVG, ONVH, ONVI, ONVJ, ONVK, ONVL, ONVM, ONVN, ONVO, ONVP, ONVQ, ONVR, ONVS, ONVT, ONVU
=fields ONVA - ONVU
=cut

View File

@@ -45,7 +45,7 @@ See L<Address
Specification|https://docs.epics-controls.org/en/latest/guides/EPICS_Process_Database_Concepts.html#address-specification>
for information on how to specify database links.
=fields INPA, INPB, INPC, INPD, INPE, INPF, INPG, INPH, INPI, INPJ, INPK, INPL
=fields INPA -INPL
=head3 Expression
@@ -121,7 +121,7 @@ the expression which will operate on their respective values, as in A+B.
Also, the RNDM nullary function can be included as an operand in the
expression in order to generate a random number between 0 and 1.
=fields A, B, C, D, E, F, G, H, I, J, K, L
=fields A - L
The keyword VAL returns the current contents of the VAL field (which can be
written to by a CA put, so it might I<not> be the result from the last time
@@ -497,7 +497,7 @@ corresponding fields. For instance, if LA does not equal the value A,
monitors for A are triggered. The MLST and ALST fields are used in the same
manner for the VAL field.
=fields LALM, ALST, MLST, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL
=fields LALM, ALST, MLST, LA - LL
=cut

View File

@@ -68,7 +68,7 @@ example, whether or not the specified PV was found and a link to it
established. See L<Operator Display Parameters> for an explanation of these
fields.
=fields INPA, INPB, INPC, INPD, INPE, INPF, INPG, INPH, INPI, INPJ, INPK, INPL
=fields INPA - INPL
=head3 Expression
@@ -146,7 +146,7 @@ the values obtained from the INPB link is stored in the field B. The names
can be included in the expression will operate on their respective values,
as in A+B.
=fields A, B, C, D, E, F, G, H, I, J, K, L
=fields A - L
The keyword VAL returns the current contents of the expression's result
field, i.e. the VAL field for the CALC expression and the OVAL field for
@@ -579,7 +579,7 @@ The DLYA field is set to one during the delay specified in ODLY.
See L<Fields Common to All Record Types|dbCommonRecord/Operator Display
Parameters> for more on the record name (NAME) and description (DESC) fields.
=fields EGU, PREC, HOPR, LOPR, INAV, INBV, INCV, INDV, INEV, INFV, INGV, INHV, INIV, INJV, INKV, INLV, OUTV, CLCV, OCLV, DLYA, NAME, DESC
=fields EGU, PREC, HOPR, LOPR, INAV - INLV, OUTV, CLCV, OCLV, DLYA, NAME, DESC
=head3 Alarm Parameters
@@ -628,7 +628,7 @@ corresponding fields. For instance, if LA does not equal the value for A,
monitors for A are triggered. The MLST and ALST fields are used in the same
manner for the VAL field.
=fields LALM, ALST, MLST, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL
=fields LALM, ALST, MLST, LA - LL
=cut

View File

@@ -88,7 +88,7 @@ If SELM is C<Mask>, then SELN will be treated as a bit mask. If bit zero
OUTB will be written to, and so on. Thus when SELN==5, both OUTC and OUTA
will be written to.
=fields SELL, SELM, SELN, OUTA, OUTB, OUTC, OUTD, OUTE, OUTF, OUTG, OUTH
=fields SELL, SELM, SELN, OUTA - OUTH
=head3 Operator Display Parameters

View File

@@ -99,7 +99,7 @@ via dbPuts.
The Fanout record also has the standard scanning fields common to all records.
These fields are listed in L<Scan Fields|dbCommonRecord/Scan Fields>.
=fields SELM, SELN, SELL, OFFS, SHFT, LNK0, LNK1, LNK2, LNK3, LNK4, LNK5, LNK6, LNK7, LNK8, LNK9, LNKA, LNKB, LNKC, LNKD, LNKE, LNKF
=fields SELM, SELN, SELL, OFFS, SHFT, LNK0 - LNK9, LNKA - LNKF
=cut

View File

@@ -68,7 +68,7 @@ determine VAL as follows:
Each of the fields, B0-BF and B10-B1F, represents one bit of the word.
=fields VAL, INP, RVAL, SHFT, B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, BA, BB, BC, BD, BE, BF, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B1A, B1B, B1C, B1D, B1E, B1F
=fields VAL, INP, RVAL, SHFT, B0 - B9, BA - BF, B10 - B1F
=head3 Operator Display Parameters

View File

@@ -81,7 +81,7 @@ initialization if the record is still undefined (UDF) after DOL has been read
and the device support initialized but at least one of the B0-B1F fields is
non-zero, the VAL field will be set from those fields and UDF will be cleared.
=fields B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, BA, BB, BC, BD, BE, BF, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B1A, B1B, B1C, B1D, B1E, B1F
=fields B0 - B9, BA - BF, B10 - B1F
=head3 Convert and Write Parameters

View File

@@ -54,7 +54,7 @@ NaN to another value in order to define the link and its field. Note that all
undefined links must be recognized as such if the selection algorithm is to work
as expected.
=fields INPA, INPB, INPC, INPD, INPE, INPF, INPG, INPH, INPI, INPJ, INPK, INPL, A, B, C, D, E, F, G, H, I, J, K, L
=fields INPA - INPL, A - L
=head3 Select Parameters
@@ -156,7 +156,7 @@ The LA-LL fields are used to implement the monitors for each of the value
fields, A-L. They represent previous input values. For example, unless LA is not
equal to A, no monitor is invoked for A.
=fields VAL, LALM, ALST, MLST, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL
=fields VAL, LALM, ALST, MLST, LA - LL
=head2 Record Support

View File

@@ -58,11 +58,11 @@ constant value, and may subsequently be changed via dbPuts.
=head4 Desired Output Link Fields
=fields DOL0, DOL1, DOL2, DOL3, DOL4, DOL5, DOL6, DOL7, DOL8, DOL9, DOLA, DOLB, DOLC, DOLD, DOLE, DOLF
=fields DOL0 - DOL9, DOLA - DOLF
=head4 Desired Output Value Fields
=fields DO0, DO1, DO2, DO3, DO4, DO5, DO6, DO7, DO8, DO9, DOA, DOB, DOC, DOD, DOE, DOF
=fields DO0 - DO9, DOA - DOF
=head3 Output Parameters
@@ -72,7 +72,7 @@ output link (LNK0-LNKF). These output links can be database links or channel
access links; they cannot be device addresses. There are sixteen output links, one
for each desired output link. Only those that are defined are used.
=fields LNK0, LNK1, LNK2, LNK3, LNK4, LNK5, LNK6, LNK7, LNK8, LNK9, LNKA, LNKB, LNKC, LNKD, LNKE, LNKF
=fields LNK0 - LNK9, LNKA - LNKF
=head3 Selection Algorithm Parameters
@@ -178,7 +178,7 @@ DOL1, DOV1, and LNK1 fields for three seconds. That is, the desired output value
will not be fetched and written to the output link until three seconds have
lapsed.
=fields DLY0, DLY1, DLY2, DLY3, DLY4, DLY5, DLY6, DLY7, DLY8, DLY9, DLYA, DLYB, DLYC, DLYD, DLYE, DLYF
=fields DLY0 - DLY9, DLYA - DLYF
=head3 Operator Display Parameters

View File

@@ -40,7 +40,7 @@ the constant value and the field's value can be changed at run-time via dbPuts.
Otherwise, the values for (A-F) are fetched from the input links when the record
is processed.
=fields INPA, INPB, INPC, INPD, INPE, INPF, INPG, INPH, INPI, INPJ, INPK, INPL, A, B, C, D, E, F, G, H, I, J, K, L
=fields INPA - INPL, A - L
=head3 Subroutine Connection
@@ -119,7 +119,7 @@ The rest of these fields--LALM, ALST, MLST, and the LA-LL fields--are used to
implement the monitors. For example, when LA is not equal to A, the value-change
monitors are called for that field.
=fields VAL, SADR, LALM, ALST, MLST, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL
=fields VAL, SADR, LALM, ALST, MLST, LA - LL
=head2 Record Support

View File

@@ -222,11 +222,11 @@ sub rtypeToPod {
my ($rtyp, $dbd) = @_;
return map {
# Handle a 'fields' Pod directive
if (m/^ =fields \s+ (\w+ (?:\s* , \s* \w+ )* )/x) {
my @names = split /\s*,\s*/, $1;
if (m/^ =fields \s+ (\w+ (?:\s* [,-] \s* \w+ )* )/x) {
my @names = split /\s*,\s*|\s*(?=-)|(?<=-)\s*/, $1;
# Look up the named fields
my @fields = map {
my $field = $rtyp->field($_);
my $field = $_ eq '-' ? $_ : $rtyp->field($_);
die "Unknown field name '$_' in $infile POD\n"
unless $field;
$field;
@@ -256,6 +256,9 @@ sub rtypeToPod {
sub fieldTableRow {
my ($fld, $dbd) = @_;
if ($fld eq '-') {
return '<tr><td class="cell" colspan=8>&vellip;</td></tr>'."\n";
}
my $html = '<tr><td class="cell">';
$html .= $fld->name;
$html .= '</td><td class="cell">';

View File

@@ -164,11 +164,11 @@ sub rtypeToMD {
my ($rtyp, $dbd) = @_;
return map {
# Handle a 'fields' Pod directive
if (m/^ =fields \s+ (\w+ (?:\s* , \s* \w+ )* )/x) {
my @names = split /\s*,\s*/, $1;
if (m/^ =fields \s+ (\w+ (?:\s* [,-] \s* \w+ )* )/x) {
my @names = split /\s*,\s*|\s*(?=-)|(?<=-)\s*/, $1;
# Look up the named fields
my @fields = map {
my $field = $rtyp->field($_);
my $field = $_ eq '-' ? $_ : $rtyp->field($_);
die "Unknown field name '$_' in $infile POD\n"
unless $field;
$field;
@@ -195,6 +195,9 @@ sub rtypeToMD {
sub fieldTableRow {
my ($fld, $dbd) = @_;
if ($fld eq '-') {
return "| \x{22EE}".(" " x 83)."||||||||";
}
my @md;
push @md, sprintf("%-5s", $fld->name), sprintf("%-26s", $fld->attribute('prompt'));