(U+9B32): Use `->denotational' and `->subsumptive'.
[chise/xemacs-chise.git.1] / lisp / multicast.el
1 ;;; multicast.el --- lisp frontend for multicast connections in XEmacs
2
3 ;; Copyright (C) 1997-2000 Didier Verna.
4
5 ;; Author:          Didier Verna <didier@xemacs.org>
6 ;; Maintainer:      Didier Verna <didier@xemacs.org>
7 ;; Created:         Thu Dec  4 16:37:39 1997
8 ;; Last Revision:   Mon Jan 19 19:10:50 1998
9 ;; Current Version: 0.4
10 ;; Keywords:        dumped comm processes
11
12 ;; This file is part of XEmacs.
13
14 ;; XEmacs is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation; either version 2 of the License, or
17 ;; (at your option) any later version.
18
19 ;; XEmacs is distributed in the hope that it will be useful,
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 ;; GNU General Public License for more details.
23
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with this program; if not, write to the Free Software
26 ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27
28
29 ;;; Commentary:
30
31 ;; This file just contains a lisp frontend to the internal function
32 ;; open-multicast-group-internal written in C and belonging to process.c
33 ;; Well, nothing much to say about it ... read the doc string.
34
35
36 ;;; Change Log:
37
38 ;; Rev. of Mon Jan 19 19:04:44 1998 : packaging cleanup
39 ;; Rev. of Thu Dec 11 13:54:26 1997 : updated the docstring
40 ;; Rev. of Mon Dec  8 15:28:47 1997 : Improved the doc string
41 ;; Rev. of Thu Dec  4 16:38:09 1997 : Initial Version.
42
43
44 ;;; Code:
45
46 (defun open-multicast-group (name buffer address)
47   "Open a multicast connection on the specified address.
48 Returns a process object to represent the connection.
49 Input and output work as for subprocesses; `delete-process' closes it.
50 Args are NAME BUFFER ADDRESS.
51 NAME is a name for the process. It is modified if necessary to make it unique.
52 BUFFER is the buffer (or buffer-name) to associate with the process.
53  Process output goes at the end of that buffer, unless you specify an output
54  stream or filter function to handle the output.
55  BUFFER may be also nil, meaning that this process is not associated with any
56  buffer
57 ADDRESS specifies a standard multicast address \"dest/port/ttl\":
58  dest is an internet address between 224.0.0.0 and 239.255.255.255
59  port is a communication port like in traditional unicast
60  ttl is the time-to-live (15 for site, 63 for region and 127 for world).
61
62 WARNING: it is *strongly* recommended to avoid using groups beginning with
63          224 or 239. Such groups are considered 'admin' groups, and may
64          behave in a surprising way ..."
65   (let (dest port ttl)
66     ;; We check only the general form of the multicast address.
67     ;; The rest will be handled by the internal function.
68     (string-match "^\\([0-9\\.]+\\)/\\([0-9]+\\)/\\([0-9]+\\)$" address)
69     (and (not (and (= (match-beginning 0) 0)
70                    (= (match-end 0) (length address))))
71          (error "malformed multicast address: %s" address))
72     (and (not (setq dest (match-string 1 address)))
73          (error "invalid destination specification."))
74     (and (= 0 (setq port (string-to-int (match-string 2 address))))
75          (error "invalid port specification."))
76     (and (= 0 (setq ttl (string-to-int (match-string 3 address))))
77          (error "invalid ttl specification."))
78     (open-multicast-group-internal name buffer dest port ttl)
79     ))
80
81 ;;; multicast.el ends here