From ca0797c27260cba75aaa27398df9619f470dec07 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Tue, 29 Mar 2016 11:31:15 -0400 Subject: [PATCH] 2016-03-29 Fred Gleason * Translated 'docs/rml.sxw' to XML5-DocBook in 'docs/docbook/rml.xml'. --- ChangeLog | 2 + docs/Makefile.am | 1 - docs/docbook/Makefile.am | 6 +- docs/docbook/rml.xml | 2214 ++++++++++++++++++++++++++++++++++++++ docs/rml.sxw | Bin 26168 -> 0 bytes rivendell.spec.in | 2 +- 6 files changed, 2222 insertions(+), 3 deletions(-) create mode 100644 docs/docbook/rml.xml delete mode 100644 docs/rml.sxw diff --git a/ChangeLog b/ChangeLog index b7d2dbec..9c47989e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15042,3 +15042,5 @@ 2016-03-28 Fred Gleason * Added revert methods for schemas 251-253 in 'utils/rdrevert/rdrevert.cpp'. +2016-03-29 Fred Gleason + * Translated 'docs/rml.sxw' to XML5-DocBook in 'docs/docbook/rml.xml'. diff --git a/docs/Makefile.am b/docs/Makefile.am index 78956eae..26fe1235 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -48,7 +48,6 @@ EXTRA_DIST = ALSA.txt\ reports.txt\ ripc.txt\ RIVENDELL_FILTER.txt\ - rml.sxw\ SAGE_ENDEC.txt\ scheduler_formats.ods\ SWITCHERS.txt\ diff --git a/docs/docbook/Makefile.am b/docs/docbook/Makefile.am index ec4cea63..0f64ec23 100644 --- a/docs/docbook/Makefile.am +++ b/docs/docbook/Makefile.am @@ -34,7 +34,8 @@ all-local: cae.html\ cae.pdf\ rdrevert.8\ - rdrevert.xml\ + rml.html\ + rml.pdf\ web_api.html\ web_api.pdf @@ -45,6 +46,9 @@ EXTRA_DIST = cae.html\ cae.xml\ rdrevert.8\ rdrevert.xml\ + rml.html\ + rml.pdf\ + rml.xml\ web_api.html\ web_api.pdf\ web_api.xml diff --git a/docs/docbook/rml.xml b/docs/docbook/rml.xml new file mode 100644 index 00000000..ef62003c --- /dev/null +++ b/docs/docbook/rml.xml @@ -0,0 +1,2214 @@ + +
+ + Rivendell Macro Language + 1.0.0 + + + Fred + Gleason + fredg@paravelsystems.com + + + + + + Scope + + Rivendell Macro Language (RML) is a system of commands formulated to + specify actions to be taken by and within the Rivendell Radio Automation + system. + + + + + Protocol + + The Normal form of a command takes the following syntax: + + + cmd [arg] [...]! + + + + + cmd + + + + A command mneumonic consisting of two alpha-numeric characters + indicating the action to be performed. + + + + + + arg + + + + Zero or more arguments, delimited by spaces or, if the last + argument, by ! (see below) + + + + + + ! + + + + The ASCII character 33, indicating the end of the command sequence. + + + + + + + + + Command Delivery + + + To be executed by a Rivendell system, an appropriate command should be + delivered to UDP ports 5858 or 5859 on said system, using the SOCK_DGRAM + connectionless protocol. Commands delivered to port 5858 may receive a + reply back to the originating IP address at UDP socket 5860 to indicated + command success/failure, while commanders delivered to 5859 will be + processed, but no reply made. + + + + + Command Reply + + If delivered to UDP port 5858, each command may receive a reply, + formulated as follows: + + + rpy +|- + + + + + rpy + + + + The full command string (including arguments) originally received + + + + + + + + + + + ACK response, indicates success of the command. + + + + + + - + + + + NAK response, indicates failure of the command. + + + + + + + + + Specifying Color + + + In places where a color can be specified as a macro argument, the + following predefined values are valid: + + + white + red + green + blue + cyan + magenta + yellow + gray + lightGray + black + darkRed + darkGreen + darkBlue + darkCyan + darkMagenta + darkYellow + darkGray + + + + + + Binary Data + + + Certain commands (e.g. SO and UO) + have the ability to transmit arbitrary binary data in addition to textual + characters. Such arbitrary binary data can be specified by means of + escape codes as follows: + + + %hexcode + + + + + + hexcode + + + Two digit numeric value of the byte to send in hexidecimal. + + + + + + For example, the sequence 'TEST' followed by a carriage return/newline + could be specified as: + + + TEST%0D%0A + + + + + Commands + + <command>Load Slot</command> + + + + Module + rdcartslots1 + + + Mnemonic + DL + + + + + Load an RDCartSlots slot. + + + This command has two syntaxes, depending upon the mode of the slot. + + + Cart Deck Mode syntax: + + + DL + slot + cart! + + + Load the cart cart into the + slot slot. Passing a '0' for + cart will cause the slot to be unloaded. + This command will be ignored if the slot is currently playing. + + + Breakaway Mode syntax: + + + DL + slot + svcname! + + + Set the slot slot to use service + svcname. Omitting the + svcname argument will cause the slot to be + unloaded. This command will be ignored if the slot is currently + executing a breakaway. + + + + + <command>Play Slot</command> + + + + Module + rdcartslots1 + + + Mnemonic + DP + + + + + Play an RDCartSlots slot. + + + DP + slot! + + + Play the cart currently loaded in the slot + slot. The slot must be in Cart Deck mode. This command will be + ignored if the slot is unloaded or already playing. + + + + + <command>Stop Slot</command> + + + + Module + rdcartslots1 + + + Mnemonic + DS + + + + + Stop an RDCartSlots slot. + + + DS + slot! + + + Stop the cart currently loaded in the slot + slot. The slot must be in Cart Deck mode. This command will be + ignored if the slot is unloaded or already playing. + + + + + <command>Execute Breakaway</command> + + + + Module + rdcartslots1 + + + Mnemonic + DX + + + + + Execute a breakaway. + + + DX + slotlen! + + + Execute a breakaway of length len (in mS) + using the autofill carts configured for the service currently loaded + in the slot slot. The slot must be in + Breakaway mode. If a breakaway is currently executing, it will + immediately be aborted and a new one started. Passing a '0' for + len will cause any currently executing + breakaway immediately to be aborted and input audio restored. + + + + + <command>Execute Cart</command> + + + + Module + rdcatchd8 + + + Mnemonic + EX + + + + + Execute a macro cart. + + + EX + cartnum! + + + Execute macro cart cartnum on the local host. + + + + + <command>Binary Serial Out</command> + + + + Module + ripcd8 + + + Mnemonic + BO + + + + + Output a string of binary codes. + + + BO + portnum + hexcode + ..! + + + Output a string of binary codes represented by + hexcode .. on + serial port portnum! + + + + + <command>Command Send</command> + + + + Module + ripcd8 + + + Mnemonic + CC + + + + + Send RML to a remote host. + + + CC + dest + [:udpport] + rml! + + + Send the RML command rml to + dest.dest may be + either a Rivendell host name or an IP address. A UDP port value may be + optionally specified as udpport (default + value 5859). + + + + + <command>Console Label</command> + + + + Module + ripcd8 + + + Mnemonic + CL + + + + + Set the label on a control surface. + + + CL + matrix + surface + chan + label! + + + On matrix matrix, set the input + chan module label of control surface + surface to label. + + + + + <command>Connect Jack Ports</command> + + + + Module + ripcd8 + + + Mnemonic + JC + + + + + Connect a JACK input port to an output port. + + + JC + output + input! + + + Attempt to connect JACK input port input + to output. + + + + + <command>Disconnect Jack Ports</command> + + + + Module + ripcd8 + + + Mnemonic + JD + + + + + Disconnect a JACK input port from an output port. + + + JD + output + input! + + + Attempt to disconnect JACK input port input + from output. + + + + + <command>Message Box</command> + + + + Module + ripcd8 + + + Mnemonic + MB + + + + + Display a popup message box on a host display. + + + MB + display + severity + msg! + + + Display the text msg in a popup window on X + display display, with an icon to indicate + severity. Valid values of + severity are: + + + + 1 + Information + + + 2 + Warning + + + 3 + Critical + + + + + + <command>Set Display</command> + + + + Module + ripcd8 + + + Mnemonic + SD + + + + + Set a console display. + + + SD + matrix + display + line + col + attr + label! + + + On matrix matrix, set the console display + display to label, + starting at position line, + col and using message attributes + attr. + + + The message attributes value is constructed as follows: + + + + Bit 7 + Display mode + + + Bits 6,5 + Video attribute + + + Bit 2,1,0 + Message Text Color + + + + Display Mode: + + + + 0 + Overwrite text + + + 1 + Insert text + + + + Video Attribute: + + + + 00 + Normal + + + 01 + Flash + + + 02 + Reverse + + + + Text Color: + + + + 000 + White + + + 001 + Red + + + 010 + Yellow + + + 011 + Green + + + 100 + Cyan + + + 101 + Magenta + + + + + + <command>Database Backup</command> + + + + Module + ripcd8 + + + Mnemonic + DB + + + + + Backup the Rivendell database. + + + DB + filename! + + + Create a backup copy of the active Rivendell database in + filename. + + + + + <command>Fire Salvo</command> + + + + Module + ripcd8 + + + Mnemonic + FS + + + + + Execute a switcher salvo. + + + FS + matrix + salvo! + + + Fire salvo number salvo on matrix + matrix. + + + + + <command>GPI Enable</command> + + + + Module + ripcd8 + + + Mnemonic + GE + + + + + Enable/disable a GPI line. + + + GE + matrix + type + gpinum + state! + + + Enable or disable the GPI line of type type + indicated by gpinum on matrix + matrix. Possible types are: + + + + + I + Input + + + O + Output + + + + + + + <command>GPI Enable</command> (old format, deprecated) + + + + Module + ripcd8 + + + Mnemonic + GE + + + + + Enable/disable a GPI line. + + + GE + matrix + gpinum + state! + + + Enable or disable the GPI line indicated by + gpinum on matrix + matrix. + + + + + <command>GPI Set</command> + + + + Module + ripcd8 + + + Mnemonic + GI + + + + + Set action in response to a GPIO event. + + + GI + matrix + type + gpinum + state + cart! + + + Execute the macro cart cart upon transition + of the GPIO of type type and line + gpinum on matrix + matrix to state. + Possible types are: + + + + + I + Input + + + O + Output + + + + + + + <command>GPI Set</command> (old format, deprecated) + + + + Module + ripcd8 + + + Mnemonic + GI + + + + + Set action in response to a GPIO event. + + + GI + matrix + gpinum + state + cart! + + + Execute the macro cart cart upon transition + of the GPIO of line gpinum on matrix + matrix to state. + + + + + <command>GPO Set</command> + + + + Module + ripcd8 + + + Mnemonic + GO + + + + + Set the state of a GPIO line. + + + GO + matrix + type + gponum + state + length! + + + Command GPIO line gponum of type + type on matrix + matrix> to state + for length> mS. A length of + 0 indicates to hold the state indefinitely. + Possible types are: + + + + + I + Input + + + O + Output + + + + + Possible states are: + + + + + 0 + OFF + + + 1 + ON + + + -1 + Passthrough hardware input (valid only for Input type) + + + + + + + <command>GPO Set</command> (old format, deprecated) + + + + Module + ripcd8 + + + Mnemonic + GO + + + + + Set the state of a GPIO line. + + + GO + matrix + gponum + state + length! + + + Command GPIO line gponum on matrix + matrix> to state + for length> mS. A length of + 0 indicates to hold the state indefinitely. + + + + + <command>Login</command> + + + + Module + ripcd8 + + + Mnemonic + LO + + + + + Change the active Rivendell user context. + + + LO + user + password! + + + Set the current Rivendell user to user. + If no arguments are supplied, log out the station --i.e. revert to the + default user. + + + + + <command>Run Shell Command</command> + + + + Module + ripcd8 + + + Mnemonic + RN + + + + + Run a shell command. + + + RN + cmd! + + + Run the shell command cmd. + + + + + <command>Serial Out</command> + + + + Module + ripcd8 + + + Mnemonic + SO + + + + + Output a string on a serial port. + + + SO + portnum + data! + + + Output data on serial port + portnum. data can + consist of arbitrary binary data as well as textual characters (see + Binary Data above). + + + + + <command>Insert Serial Trap</command> + + + + Module + ripcd8 + + + Mnemonic + SI + + + + + Insert a serial trap to detect a character sequence. + + + SI + portnum + cart + string! + + + Insert a serial trap to execute the macro cart + cart upon receipt of + string on serial port + port. + + + + + <command>Clear Serial Trap</command> + + + + Module + ripcd8 + + + Mnemonic + SC + + + + + Clear a serial trap. + + + SC + portnum + cart + string! + + + SC + portnum + cart! + + + SC + portnum! + + + Clear a serial trap. The three argument form will clear all traps on + port that reference + cart and string. + The two argument form will clear all traps on + port that reference + cart, while the one argument form will + clear all traps on port. + + + + + <command>Sleep</command> + + + + Module + ripcd8 + + + Mnemonic + SP + + + + + Pause for specified time. + + + SP + msecs! + + + Wait for msecs milliseconds. + + + + + <command>Switch Add</command> + + + + Module + ripcd8 + + + Mnemonic + SA + + + + + Add an input to an output. + + + SA + matrix + input + output! + + + Command switch matrix number matrix to add + input number input to output number + output. Unlike SWITCH TAKE, + this command leaves any other previously assigned inputs unchanged. + + + + + <command>Switch Add With Gain</command> + + + + Module + ripcd8 + + + Mnemonic + SG + + + + + Add an input to an output while specifyng the crosspoint gain. + + + SG + matrix + input + output + gain! + + + Command switch matrix number matrix to add + input number input to output number + output at gain gain. + The gain is specified in 1/10 of a dB, with 0 = unity gain. + Unlike SWITCH TAKE, this command leaves any other + previously assigned inputs unchanged. + + + + + <command>Switch Level</command> + + + + Module + ripcd8 + + + Mnemonic + SL + + + + + Set input gain. + + + SL + matrix + input + level! + + + Command switch matrix number matrix to adjust + the gain of input number input to + level dB. + + + + + <command>Switch Crosspoint Gain</command> + + + + Module + ripcd8 + + + Mnemonic + SX + + + + + Set crosspoint gain. + + + SX + matrix + input + output + level! + + + Command switch matrix number matrix to adjust + the gain of the crosspoint connecting input + input to output + output to level dB. + + + + + <command>Serial Reload</command> + + + + Module + ripcd8 + + + Mnemonic + SY + + + + + Reload the configuration for a serial port. + + + SY + portnum! + + + Reload the configuration for serial port + portnum. Normally, this should only be + issued by RDAdmin following a configuration change. + + + + + <command>Switch Reload</command> + + + + Module + ripcd8 + + + Mnemonic + SZ + + + + + Reload the configuration for a switch matrix. + + + SZ + matrix! + + + Reload the configuration for switch matrix + matrix. Normally, this should only be + issued by RDAdmin following a configuration change. + + + + + <command>Switch Remove</command> + + + + Module + ripcd8 + + + Mnemonic + SR + + + + + Remove an input from an output. + + + SR + matrix + input + output! + + + Command switch matrix number matrix to remove + input number input from output number + output. Unlike SWITCH TAKE, + this command leaves any other previously assigned inputs unchanged. + + + + + <command>Switch Take</command> + + + + Module + ripcd8 + + + Mnemonic + ST + + + + + Exclusively route an input to an output. + + + ST + matrix + input + output! + + + Command switch matrix number matrix to take + input number input to output number + output. "Take" in this context implies + removing any previously assigned inputs from the referenced output. + + + + + <command>Toggle On Air Flag</command> + + + + Module + ripcd8 + + + Mnemonic + TA + + + + + Set the state of the On Air flag. + + + TA 0|1! + + + Set the On-Air flag to ON [1] or OFF + [0]. + + + + + <command>UDP Out</command> + + + + Module + ripcd8 + + + Mnemonic + UO + + + + + Send data to a UDP port. + + + UO + ipaddr + udpport + data! + + + Send data in a UDP packet to port + udpport at ipaddr. + data can consist of arbitrary binary data as + well as textual characters (see Binary Data above). + + + + + <command>Macro Timer</command> + + + + Module + ripcd8 + + + Mnemonic + MT + + + + + Timer for running macro carts. + + + MT + timernum + timeout + cart! + + + Set the macro timer timernum to execute macro + cart cart in + timeout milliseconds. Setting + timeout to 0 disables + the timer. Sixteen macro timers (numbered 1-16) are available on each + Rivendell host. + + + + + <command>Start Record Deck</command> + + + + Module + rdcatchd8 + + + Mnemonic + RS + + + + + Start an RDCatch Recording + + + RS + decknum + cartnum + cutnum + maxlen! + + + Start recording to cut cutnum of cart + cartnum, using RDCatch record deck + decknum for a maximum time of + maxlen mS. The record parameters used + (format, sample rate, channels, etc) will be those configured for the + selected deck in RDAdmin->ManageHosts->RDCatch. The selected cart and + cut must already exist. Any audio previously residing in the selected + cart and cut will be overwritten. + + + + + <command>Stop Record Deck</command> + + + + Module + rdcatchd8 + + + Mnemonic + RR + + + + + Stop an RDCatch Recording + + + RR + decknum! + + + Stop any active recording on RDCatch deck decknum. + + + + + <command>Load Log</command> + + + + Module + rdairplay1 + + + Mnemonic + LL + + + + + Load a log into RDAirPlay. + + + LL + mach + [logname] + [startline]! + + + Load the log logname in log machine + mach. After loading, start the log at line + startline if it is >=0. If + startline is -2, the log will be started at + the first event if that event does not have a 'stop' transition. + Default startline=-1. If no + log> is specified, the machine's current log + is unloaded. + + + + + <command>Refresh Log</command> + + + + Module + rdairplay1 + + + Mnemonic + RL + + + + + Load changes to a currently loaded log in RDAirPlay. + + + RL + mach! + + + Refresh the log currently loaded in log machine + mach. + + + + + <command>Make Next</command> + + + + Module + rdairplay1 + + + Mnemonic + MN + + + + + Load changes to a currently loaded log in RDAirPlay. + + + RL + mach + line! + + + Set the next event for log machine mach to + line line>. + + + + + <command>Start</command> + + + + Module + rdairplay1 + + + Mnemonic + PL + + + + + Start a log at a specified line. + + + PL + mach + line! + + + Start log machine mach at line + line if stopped, otherwise do nothing. + + + + + <command>Start Button</command> + + + + Module + rdairplay1 + + + Mnemonic + PB + + + + + Push an RDAirPlay Start button. + + + PB + button! + + + Push button button. + + + + + <command>Start Next</command> + + + + Module + rdairplay1 + + + Mnemonic + PN + + + + + Start the next event in a log. + + + PN + mach + [mport] + [skip]! + + + Start log machine mach> if stopped, or start + next event if already running. If specified, start the playout on + machine port mport>. If + skip is supplied, equal to '1' and the log + machine is in Manual or Live Assist mode, then any intervening + meta-events in log between the current 'next' event and the next cart + will be skipped over. + + + + + <command>Stop</command> + + + + Module + rdairplay1 + + + Mnemonic + PS + + + + + Stop a log in RDAirPlay. + + + PS + mach|0 + [fade] + [mport]! + + + Stop log machine mach, or + 0 for all log machines. If specified, only stop + carts playing on machine port mport. If + specified, fade out fade msecs. + + + + + <command>Set Duck Level</command> + + + + Module + rdairplay1 + + + Mnemonic + MD + + + + + Set duck level for an RDAirPlay log machine. + + + MD + mach + level + fade + [mport]! + + + Set the duck level of mach, or + 0 for all log machines. If playing, the audio + fades to level (in dbFS) in + fade msecs. If specified, only affect carts + playing on machine port mport. + Loading or clearing a log will set the duck level back to 0. + + + + + <command>Add Next</command> + + + + Module + rdairplay1 + + + Mnemonic + PX + + + + + Insert a cart in a log in the next to play position. + + + PX + mach + cart! + + + Insert cart cart> in the next to play + position on log machine mach. + + + + + <command>Set Mode</command> + + + + Module + rdairplay1 + + + Mnemonic + PM + + + + + Set the mode of an RDAirPlay log machine. + + + PM + mode + [mach]! + + + Set log machine mach to mode + mode. If mode is not given or the Mode + Control Style is set to 'Unified', then all log machines are set to + mode. Valid values for + mode are: + + + 1 + LiveAssist + + + 2 + Auto + + + 3 + Manual + + + + + + + + + + <command>Select Widget</command> + + + + Module + rdairplay1 + + + Mnemonic + PW + + + + + Select right-hand widget in RDAirPlay. + + + PW + mach! + + + Select right-hand widget to log-machine mach + or 0 for sound panel. + + + + + <command>Label Panel</command> + + + + Module + rdairplay1 + + + Mnemonic + PC + + + + + Set the label of a SoundPanel button in RDAirPlay. + + + PC + panel + col + row + label + color! + + + Set the button at col, + row of panel panel + to have a text label of label and a + background color of color. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + + + + + <command>Load Panel</command> + + + + Module + rdairplay1 + + + Mnemonic + PE + + + + + Load a cart into a SoundPanel button in RDAirPlay. + + + PE + panel + col + row + cart! + + + Load cart cart into the button at + col,row of panel + panel. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + + + + + <command>Play Panel</command> + + + + Module + rdairplay1 + + + Mnemonic + PP + + + + + Load a cart into a SoundPanel button in RDAirPlay. + + + PP + panel + col + row + [mport] + [0|1]! + + + Play the button at col, + row of panel panel. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + If col and/or row + is 0: Start the first loaded button that is not + active. If specified, start the playout on panel port + mport. The started panel will stay active when + finished, if the 5th argument is 1. + + + + + <command>Pause Panel</command> + + + + Module + rdairplay1 + + + Mnemonic + PU + + + + + Pause a SoundPanel button in RDAirPlay. + + + PU + panel + col + row + [mport]! + + + Pause the button at col, + row of panel panel. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + If col and/or row + is 0: pause all playing buttons in + col or row. + If specified, start the playout on panel port + mport. + + + + + <command>Stop Panel</command> + + + + Module + rdairplay1 + + + Mnemonic + PT + + + + + Stop a SoundPanel button in RDAirPlay. + + + PT + panel + col + row + [mport] + [0|1] + fade! + + + Stop the button at col, + row of panel panel. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + If col and/or row + is 0: stop all playing buttons in + col or row. + If specified, start the playout on panel port + mport. The stopped panel will stay active when + finished, if the 5th argument is 1. + + + + + <command>Duck Panel Button</command> + + + + Module + rdairplay1 + + + Mnemonic + PD + + + + + Set the duck level of a SoundPanel button in RDAirPlay. + + + PD + panel + col + row + level + fade + [mport]! + + + Set the duck level of button at column, + row> of panel + panel. + Panel: S1...S50 or + U1...U50; + C for panel means + currently selected panel. + If col and/or row + is 0: duck all buttons in + col or row. + If playing, the audio fades to level + (in dbFS) in fade msecs. + If specified, only stop carts playing on panel port + mport. The duck level will be set to 0 after + the playback is finished, or the button is stopped or reset. + + + + + <command>Set Label</command> + + + + Module + rdairplay1 + + + Mnemonic + LB + + + + + Display a message in the label widget on RDAirPlay. + + + LB + string! + + + Display string> in the message widget. + + + + + <command>Set Color Label</command> + + + + Module + rdairplay1 + + + Mnemonic + LC + + + + + Display a color message in the label widget on RDAirPlay. + + + LC + color + string! + + + Display string> in color + color in the message widget. + + + + + <command>Set Default Now & Next Cart</command> + + + + Module + rdairplay1 + + + Mnemonic + SN + + + + + Set the default Now & Next cart. + + + SN + now|next + mach + cart! + + + Set the default Now & Next cart for log + mach to cart. + + + + + +
diff --git a/docs/rml.sxw b/docs/rml.sxw deleted file mode 100644 index 77a8c0b56ec125fd6aa841b7016a468d73f6b70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26168 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­pz@^PDLZn6Mbd1j>1Duo69LGJmdBU;GDGw*>y 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 Donf`j diff --git a/rivendell.spec.in b/rivendell.spec.in index 00d80785..5cc49dcb 100644 --- a/rivendell.spec.in +++ b/rivendell.spec.in @@ -307,9 +307,9 @@ rm -rf $RPM_BUILD_ROOT %doc docs/JACK.txt %doc docs/ENCODERS.txt %doc docs/pam_rd.txt -%doc docs/rml.sxw %doc docs/MESSAGE_BOX.txt %doc docs/docbook/cae.pdf +%doc docs/docbook/rml.pdf %doc docs/docbook/web_api.pdf %doc docs/tables/audio_perms.txt %doc docs/tables/audio_ports.txt