dialrules.4f
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:9k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. ." $Id: dialrules.4f,v 1.1.1.1 2005/11/11 21:32:03 faxguy Exp $
  2. ."
  3. ." HylaFAX Facsimile Software
  4. ."
  5. ." Copyright (c) 1993-1996 Sam Leffler
  6. ." Copyright (c) 1993-1996 Silicon Graphics, Inc.
  7. ." HylaFAX is a trademark of Silicon Graphics
  8. ." 
  9. ." Permission to use, copy, modify, distribute, and sell this software and 
  10. ." its documentation for any purpose is hereby granted without fee, provided
  11. ." that (i) the above copyright notices and this permission notice appear in
  12. ." all copies of the software and related documentation, and (ii) the names of
  13. ." Sam Leffler and Silicon Graphics may not be used in any advertising or
  14. ." publicity relating to the software without the specific, prior written
  15. ." permission of Sam Leffler and Silicon Graphics.
  16. ." 
  17. ." THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  18. ." EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  19. ." WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  20. ." 
  21. ." IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  22. ." ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  23. ." OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  24. ." WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  25. ." LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  26. ." OF THIS SOFTWARE.
  27. ."
  28. .if n .po 0
  29. .ds Fx fIHylas-1FAXs+1fP
  30. .ds Ps Ps-2OSTs+2Ss-2CRIPTs+2
  31. .TH DIALRULES ${MANNUM4_5} "May 8, 1996"
  32. .SH NAME
  33. dialrules - *(Fx dial string processing rules
  34. .SH DESCRIPTION
  35. A dial string specifies how to dial the telephone in order to
  36. reach a destination facsimile machine, or similar device.
  37. This string is supplied by a user with each outgoing facsimile job.
  38. User-supplied dial strings need to be processed in two ways by the
  39. *(Fx server processes:
  40. to craft a canonical phone number for use in locating the
  41. receiver's capabilities, and
  42. to process into a form suitable for sending to a modem.
  43. In addition client applications may need to process a dial string
  44. to formulate an external form that does not include private information
  45. such as a credit card access code.
  46. Phone number canonicalization and dial string preparation
  47. are done according to 
  48. .I "dial string processing rules"
  49. that are located in a file specified in the server configuration
  50. file; see the
  51. .B DialStringRules
  52. parameter in
  53. .IR hylafax-config (${MANNUM4_5}).
  54. The generation of an externalized form for a dial string is done by
  55. rules that optionally appear in
  56. .I ${LIBDATA}/dialrules
  57. on client machines.
  58. .PP
  59. A dial string rules file is an
  60. .SM ASCII
  61. file containing one or more 
  62. .IR "rule sets" .
  63. A rule set defines a set of
  64. .I "transformation rules"
  65. that are sequentially applied to a dial string.
  66. Each rule set is associated with an identifier, with certain well-known
  67. identifiers being used by the facsimile server or client application.
  68. Each transformation rule is a regular expression and a replacement string;
  69. the regular expression is repeatedly applied to a dial string and any
  70. matching substring is replaced by the replacement string.
  71. .PP
  72. The syntax of a dial string rules file is as follows.
  73. Comments are introduced with the ``!'' character and continue to the
  74. end of the current line.
  75. Identifiers are formed from a leading alphabetic and any number of
  76. subsequent alpha-numeric characters.
  77. A rule set is of the form:
  78. .sp .5
  79. .nf
  80. .RS
  81. fIIdentifierfP fB:= [fP
  82.     fIrule1fP
  83.     fIrule2fP
  84.     ...
  85. fB]fP
  86. .RE
  87. .fi
  88. .sp .5
  89. where 
  90. .IR rule1 ,
  91. .IR rule2 ,
  92. and so on are transformation rules.
  93. Line breaks are significant.
  94. The initial rule set definition line and the trailing ``]'' must be
  95. on separate lines; and each transformation rule must also be on a
  96. single line.
  97. Transformation rules are of the form:
  98. .sp .5
  99. .nf
  100. .ti +.5i
  101. fIregular-expressionfP fB=fP fIreplacementfP
  102. .fi
  103. .sp .5
  104. where
  105. .I regular-expression
  106. is a
  107. .SM POSIX
  108. 1003.2 extended regular expression and
  109. .I replacement
  110. is a string that is substituted in place of any portion of the dial
  111. string that is matched by the
  112. .IR regular-expression .
  113. White space is significant in parsing transformation rules.
  114. If a regular expression or replacement string has embedded white space
  115. in it, then the white space needs to be escaped with a ``e'' character
  116. or the entire string should be enclosed in quote (``"'') marks.
  117. Replacement strings may reference the entire string matched by the
  118. regular expression with the ``&'' character.
  119. Substrings matched with the ``(...)'' constructs may be referenced
  120. by using ``efInfP'' where
  121. .I n
  122. is a single numeric digit between 1 and 9 that refers to the
  123. .IR n -th
  124. matched substring; c.f.
  125. .IR re_format (7),
  126. .IR sed (1),
  127. etc.
  128. .PP
  129. To simplify and parameterize the construction of rule sets, dial string
  130. rules files may also include simple text-oriented variable definitions.
  131. A line of the form:
  132. .sp .5
  133. .nf
  134. .ti +.5i
  135. fIfoofPfB=fPfIstringfP
  136. .fi
  137. .sp .5
  138. defines a variable named
  139. .I foo
  140. that has the value
  141. .IR string .
  142. String values with embedded whitespace must use the ``e'' character
  143. or be enclosed in quote marks.
  144. Variables are interpolated into transformation rules by referencing them
  145. as:
  146. .sp .5
  147. .nf
  148. .ti +.5i
  149. fB${fPfIvarfPfB}fP
  150. .fi
  151. .sp .5
  152. Note that variable interpolation is done only once, at the time a
  153. transformation rule is defined.
  154. This means that forward references are not supported and that
  155. circular definitions will not cause loops.
  156. The facsimile server automatically defines four variables to have
  157. the values defined in its configuration file:
  158. .BR AreaCode ,
  159. .BR CountryCode ,
  160. .BR LongDistancePrefix ,
  161. and
  162. .BR InternationalPrefix 
  163. These variables are initialized before parsing a dial string rules
  164. file; thus if they are defined in the rules file then they will
  165. override any definition by the server.
  166. .PP
  167. There are three well known rule set names:
  168. .I CanonicalNumber
  169. to convert a dial string to a canonical format,
  170. .I DialString
  171. to prepare a dial string before using it to dial the telephone, and
  172. .I DisplayNumber
  173. to convert a dial string to an external ``displayable'' form
  174. that does not include the
  175. private information that might appear in the raw dial string.
  176. .SH EXAMPLES
  177. This is the default set of rules for transforming a dial string into
  178. a canonical phone number:
  179. .sp .5
  180. .nf
  181. .RS
  182. .ta w'LDPrefix=${LongDistancePrefix}    'u
  183. Area=${AreaCode} ! local area code
  184. Country=${CountryCode} ! local country code
  185. IDPrefix=${InternationalPrefix} ! prefix for placing an international call
  186. LDPrefix=${LongDistancePrefix} ! prefix for placing a long distance call
  187. !
  188. ! Convert a phone number to a canonical format:
  189. !
  190. !    +<country><areacode><rest>
  191. !
  192. ! by (possibly) stripping off leading dialing prefixes for
  193. ! long distance and/or international dialing.
  194. !
  195. CanonicalNumber := [
  196. .ta w'^${LDPrefix}      'u +w'= 'u +w'+${Country}${Area}&      'u
  197. %.* = ! strip calling card stuff
  198. [abcABC] = 2 ! these convert alpha to numbers
  199. [defDEF] = 3
  200. [ghiGHI] = 4
  201. [jklJKL] = 5
  202. [mnoMNO] = 6
  203. [prsPRS] = 7
  204. [tuvTUV] = 8
  205. [wxyWXY] = 9
  206. [^+0-9]+ = ! strip white space etc.
  207. ^${IDPrefix} = + ! replace int. dialing code
  208. ^${LDPrefix} = +${Country} ! replace l.d. dialing code
  209. ^[^+] = +${Country}${Area}& ! otherwise, insert canon form
  210. ]
  211. .RE
  212. .fi
  213. .sp .5
  214. The first rule simply strips anything following a ``%''; this
  215. will remove any calling card-related information.
  216. The next eight rules convert upper and lower case alphabetics to the
  217. equivalent key numbers (this is convenient for users that use
  218. mnemonic phone numbers).
  219. The tenth rule removes everything but numbers and plus signs.
  220. The eleventh rule translates any explicit international dialing prefix
  221. into the ``+'' symbol used to identify country codes.
  222. The twelfth rule replaces a leading long distance dialing prefix
  223. with the local country code string.
  224. The last rule matches local phone numbers and inserts the local
  225. country code and area code.
  226. .PP
  227. As an example, assume that
  228. .sp .5
  229. .nf
  230. .RS
  231. AreaCode=415
  232. CountryCode=1
  233. InternationalPrefix=011
  234. LongDistancePrefix=1
  235. .RE
  236. .fi
  237. .sp .5
  238. then if the above set of rules is applied
  239. to ``01123965-Tube%2345'', the transformations would be:
  240. .sp .5
  241. .nf
  242. .ta w'01123965-Tube#2345    'u +w'01123965-7824    'u
  243. .RS
  244. 01123965-Tube%2345 01123965-Tube ! strip calling card stuff
  245. 01123965-Tube 01123965-8823 ! convert alphabetics
  246. 01123965-8823 011239658823 ! strip white space etc.
  247. 011239658823 +239658823 ! replace int. dialing code
  248. +239658823 +239658823 ! replace l.d. dialing code
  249. +239658823 +239658823 ! otherwise, insert canon form
  250. .RE
  251. .fi
  252. .sp .5
  253. for a final result of ``+239658823''.
  254. .SH "SEE ALSO"
  255. .IR sendfax (1),
  256. .IR dialtest (${MANNUM1_8}),
  257. .IR faxq (${MANNUM1_8}),
  258. .IR faxsend (${MANNUM1_8}),
  259. .IR faxgetty (${MANNUM1_8}),
  260. .IR hylafax-config (${MANNUM4_5})