let main () =
try
let _ = print_string "Linking...\n"; flush stdout; in
let n_files =
if Array.length Sys.argv >= 5 then 2 else 1
in
let filename_list =
if n_files = 2 then
[Sys.argv.(1); Sys.argv.(3)]
else
[Sys.argv.(1)]
in
let outfile_names =
if n_files = 2 then
[Sys.argv.(2); Sys.argv.(4)]
else
[Sys.argv.(2)]
in
let file_list = List.map open_in filename_list in
let lexing_list = List.map Lexing.from_channel file_list in
let linkst_list = List.map (Bmdlinkparse.link Bmdlinklex.bmd_link) lexing_list in
let code_list = List.map extract_code linkst_list in
let defs = List.flatten (vm_defs::linkst_list) in
let _ = check_consistent defs in
let outfile_list = List.map open_out outfile_names in
let _ = List.map2 output_string outfile_list code_list in
let _ = print_string "Done.\n"; flush stdout; in
()
with
Parsing.Parse_error ->
begin
print_string "Syntax error on line ";
print_string (string_of_int !Bmdlinklex.line_count);
print_string ".\n";
flush stdout;
end
| Sys_error s ->
begin
print_string "Could not open input file ";
print_string s;
print_string "\n";
flush stdout;
end
| Linker_error s ->
begin
print_string s;
print_string "\n";
flush stdout;
end
| _ ->
begin
print_string "Linking failed.\n";
end