1 (* Network address handling module.
3 This file is part of Liece.
5 Author: Daiki Ueno <daiki@kake.info.waseda.ac.jp>
8 Keywords: IRC, liece, DCC
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GNU Emacs; see the file COPYING. If not, write to the
22 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. *)
31 (regexp "\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)") str 0 in
32 let (a1, a2, a3, a4) =
34 int_of_string (matched_group 1 str),
35 int_of_string (matched_group 2 str),
36 int_of_string (matched_group 3 str),
37 int_of_string (matched_group 4 str)
40 Printf.eprintf "Invalid address\n"; flush Pervasives.stdout; exit 1;
42 let (s1, s2, s3, s4) =
49 ((Int a1) */ s1) +/ ((Int a2) */ s2) +/ ((Int a3) */ s3) +/ (Int a4)
59 Printf.eprintf "Invalid address\n"; flush Pervasives.stdout; exit 1;
61 let (s1, s2, s3, s4) =
67 let (a1, a2, a3, a4) =
69 floor_num ((mod_num ul s1) // s2),
70 floor_num ((mod_num (mod_num ul s1) s2) // s3),
71 (mod_num (mod_num (mod_num ul s1) s2) s3)
73 Printf.sprintf "%s.%s.%s.%s"