# # # patch "automate.ml" # from [62bea2673c7abf9ab1f7662999be0de90004f46e] # to [43627088a95d11a8001f4ae39c73727538f78f15] # # patch "dot_lexer.mll" # from [3a71fb27288b4d3e0c3162a24153e34d89358d4f] # to [a466db6a992849b3408646516d0d8936ce334a43] # # patch "glib/giochannel.ml" # from [d2f7241bdc6af475022c162be25a383f61e9624c] # to [43e1aac62aaa993eb3864f62c709539276740411] # # patch "glib/giochannel.mli" # from [0fd137687560f6951e5377ac213371df7135e53f] # to [a2531dbc99c8c1b2f808dff1a5a6dec3d4080b8d] # # patch "glib/ocaml-giochannel.c" # from [fb46e36577eb1803ec00649f0770c179b5ab71f4] # to [6c3489c6443d057d2f3fce77a2d3465466c2ff93] # # patch "glib/ocaml-gspawn.c" # from [0f9699de08507b50e004ccefdd8f513ce6c1f07d] # to [484e8d176eaa3a47ce4a2cfa869144e11662b610] # # patch "gnomecanvas_hack.c" # from [ed8e248d636d567cacfe4727a9370ee4283097af] # to [0e28de5cf7f0ea5df027fee49bcb63056b2c27c5] # # patch "main.ml" # from [8e7daec7e3710febd6995d823f60ddc3159d53a9] # to [c97fd3746cf8966dfbf158a2a49b6812a1d35feb] # # patch "subprocess.ml" # from [e1f23ae41fa3d03977419f2f102646e0ad32d546] # to [29e5d934ca5778dde131c1604d8f6a7f5070d7f1] # ============================================================ --- automate.ml 62bea2673c7abf9ab1f7662999be0de90004f46e +++ automate.ml 43627088a95d11a8001f4ae39c73727538f78f15 @@ -212,8 +212,8 @@ let setup_channel ~nonblock fd = w.exn_cb <- cb w let setup_channel ~nonblock fd = - let chan = Giochannel.unix_new (some fd) in - if nonblock then Giochannel.set_flags chan [`NONBLOCK] ; + let chan = Giochannel.new_fd (some fd) in + if nonblock then Giochannel.set_flags_noerr chan [`NONBLOCK] ; Giochannel.set_encoding chan None ; Giochannel.set_buffered chan false ; chan ============================================================ --- dot_lexer.mll 3a71fb27288b4d3e0c3162a24153e34d89358d4f +++ dot_lexer.mll a466db6a992849b3408646516d0d8936ce334a43 @@ -14,13 +14,14 @@ "subgraph", SUBGRAPH; ] } +let ws = [' ' '\t' '\n' '\r'] let alpha = ['A'-'Z' 'a'-'z'] let digit = ['0'-'9'] let ident = (alpha | '_') (alpha | '_' | digit)* let number = digit+ rule lex = parse - | [ ' ' '\n' '\t']+ { lex lexbuf } + | ws+ { lex lexbuf } | '#' [^ '\n']* '\n' { lex lexbuf } | "//" [^ '\n']* '\n' { lex lexbuf } | "/*" { comment lexbuf ; lex lexbuf } @@ -48,7 +49,8 @@ and string b = parse and string b = parse | '"' { () } - | "\\\n" { string b lexbuf } + | '\\' '\r'? '\n' + { string b lexbuf } | "\\\"" { Buffer.add_char b '"' ; string b lexbuf } | _ { Buffer.add_char b (Lexing.lexeme_char lexbuf 0) ; string b lexbuf } ============================================================ --- glib/giochannel.ml d2f7241bdc6af475022c162be25a383f61e9624c +++ glib/giochannel.ml 43e1aac62aaa993eb3864f62c709539276740411 @@ -19,6 +19,7 @@ external unix_get_fd : t -> int = "ml_g_ external unix_new : int -> t = "_ml_g_io_channel_unix_new" external unix_get_fd : t -> int = "ml_g_io_channel_unix_get_fd" +external new_fd : int -> t = "ml_g_io_channel_new_fd" external new_file : string -> string -> t = "ml_g_io_channel_new_file" external read_chars : t -> ?off:int -> ?len:int -> string -> @@ -49,6 +50,9 @@ external set_flags : t -> rw_flags list type ro_flags = [ `IS_READABLE | `IS_SEEKABLE | `IS_WRITEABLE ] external get_flags : t -> [ro_flags | rw_flags] list = "ml_g_io_channel_get_flags" external set_flags : t -> rw_flags list -> unit = "ml_g_io_channel_set_flags" +let set_flags_noerr c fl = + try set_flags c fl + with Error _ -> () external get_line_term : t -> string option = "ml_g_io_channel_get_line_term" external set_line_term : t -> string option -> unit = "ml_g_io_channel_set_line_term" ============================================================ --- glib/giochannel.mli 0fd137687560f6951e5377ac213371df7135e53f +++ glib/giochannel.mli a2531dbc99c8c1b2f808dff1a5a6dec3d4080b8d @@ -15,6 +15,7 @@ external unix_get_fd : t -> int = "ml_g_ external unix_new : int -> t = "_ml_g_io_channel_unix_new" external unix_get_fd : t -> int = "ml_g_io_channel_unix_get_fd" +external new_fd : int -> t = "ml_g_io_channel_new_fd" external new_file : string -> string -> t = "ml_g_io_channel_new_file" external read_chars : t -> ?off:int -> ?len:int -> string -> @@ -58,6 +59,7 @@ external set_flags : t -> rw_flags list type ro_flags = [ `IS_READABLE | `IS_SEEKABLE | `IS_WRITEABLE ] external get_flags : t -> [ro_flags | rw_flags] list = "ml_g_io_channel_get_flags" external set_flags : t -> rw_flags list -> unit = "ml_g_io_channel_set_flags" +val set_flags_noerr : t -> rw_flags list -> unit external get_line_term : t -> string option = "ml_g_io_channel_get_line_term" external set_line_term : t -> string option -> unit ============================================================ --- glib/ocaml-giochannel.c fb46e36577eb1803ec00649f0770c179b5ab71f4 +++ glib/ocaml-giochannel.c 6c3489c6443d057d2f3fce77a2d3465466c2ff93 @@ -55,6 +55,17 @@ ML_1(g_io_channel_unix_get_fd, GIOChanne /* ML_1(g_io_channel_unix_new, Int_val, Val_GIOChannel) */ ML_1(g_io_channel_unix_get_fd, GIOChannel_val, Val_int) +CAMLprim value ml_g_io_channel_new_fd (value fd) +{ + GIOChannel *c; +#ifdef G_OS_WIN32 + c = g_io_channel_win32_new_fd (Int_val (fd)); +#else + c = g_io_channel_unix_new (Int_val (fd)); +#endif + return Val_GIOChannel (c); +} + CAMLprim value ml_g_io_channel_new_file (value v_fname, value v_mode) { ============================================================ --- glib/ocaml-gspawn.c 0f9699de08507b50e004ccefdd8f513ce6c1f07d +++ glib/ocaml-gspawn.c 484e8d176eaa3a47ce4a2cfa869144e11662b610 @@ -137,11 +137,12 @@ ML_bc6 (ml_g_spawn_async_with_pipes) ML_bc6 (ml_g_spawn_async_with_pipes) -#include static value convert_exit_status (int status) { value r; +#ifdef G_OS_UNIX +# include if (WIFEXITED(status)) { r = alloc_small (1, 0); @@ -159,6 +160,10 @@ convert_exit_status (int status) } else invalid_argument ("Gspawn.sync: don't know how to convert the exit status"); +#else + r = alloc_small (1, 0); + Field (r, 0) = Val_long (status); +#endif return r; } ============================================================ --- gnomecanvas_hack.c ed8e248d636d567cacfe4727a9370ee4283097af +++ gnomecanvas_hack.c 0e28de5cf7f0ea5df027fee49bcb63056b2c27c5 @@ -1,5 +1,10 @@ #include +#include + + +#ifdef G_OS_UNIX + #include #include @@ -82,3 +87,13 @@ ml_fix_libgnomecanvas_pango (value text_ return Val_unit; } + +#else + +CAMLprim value +ml_fix_libgnomecanvas_pango (value text_obj) +{ + return Val_unit; +} + +#endif ============================================================ --- main.ml 8e7daec7e3710febd6995d823f60ddc3159d53a9 +++ main.ml c97fd3746cf8966dfbf158a2a49b6812a1d35feb @@ -7,14 +7,13 @@ let find_MTN_dir base = | MTNopt_full of string * string * string let find_MTN_dir base = - let rec up = function - | "/" -> raise Not_found - | p -> - let d = Filename.dirname p in - let m = Filename.concat d base in - if Sys.file_exists m - then m - else up d in + let rec up p = + let d = Filename.dirname p in + if d = p then raise Not_found ; + let m = Filename.concat d base in + if Sys.file_exists m + then m + else up d in if Sys.file_exists base then base else up (Sys.getcwd ()) @@ -105,7 +104,7 @@ let print_version () = let print_version () = Printf.printf "monotone-viz %s (base revision: %s)\n" Version.version Version.revision ; - Printf.printf "Copyright (C) 2004-2005 Olivier Andrieu \n" ; + Printf.printf "Copyright (C) 2004-2006 Olivier Andrieu \n" ; exit 0 let parse_cli () = ============================================================ --- subprocess.ml e1f23ae41fa3d03977419f2f102646e0ad32d546 +++ subprocess.ml 29e5d934ca5778dde131c1604d8f6a7f5070d7f1 @@ -14,8 +14,8 @@ let setup_channel ~nonblock encoding fd let setup_channel ~nonblock encoding fd = - let chan = Giochannel.unix_new (some fd) in - if nonblock then Giochannel.set_flags chan [`NONBLOCK] ; + let chan = Giochannel.new_fd (some fd) in + if nonblock then Giochannel.set_flags_noerr chan [`NONBLOCK] ; begin match encoding with | `NONE ->