:- module io.
:- use_module array, benchmarking, bool, builtin, char, deconstruct, dir, exception, int, list, map, ops, parser, private_builtin, require, rtti_implementation, std_util, string, table_builtin, term, term_io, time, varset.
:- type (io:stream_putback) == (tree234:tree234(int, (list:list(character)))).
:- type (io:stream_names) == (tree234:tree234(int, string)).
:- type (io:stream_id) == int.
:- type (io:stream) == (builtin:c_pointer).
:- type (io:state)
	--->	state((builtin:c_pointer))
	.
:- type (io:output_stream) == (builtin:c_pointer).
:- type (io:input_stream) == (builtin:c_pointer).
:- type (io:error)
	--->	io_error(string)
	.
:- type (io:buffer)
	--->	buffer((builtin:c_pointer))
	.
:- type (io:binary_stream) == (builtin:c_pointer).
:- pragma foreign_import_module("C", io).
:- func io:get_stream_id((builtin:c_pointer)) = int.
:- mode io:get_stream_id((builtin:in)) = (builtin:out) is det.
:- pred io:read_char_code((builtin:c_pointer), int, (io:state), (io:state)).
:- mode io:read_char_code((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:read_byte_val((builtin:c_pointer), int, (io:state), (io:state)).
:- mode io:read_byte_val((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:read_file_2((builtin:c_pointer), (list:list(character)), (io:maybe_partial_res((list:list(character)))), (io:state), (io:state)).
:- mode io:read_file_2((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:make_err_msg(string, string, (io:state), (io:state)).
:- mode io:make_err_msg((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:read_binary_file_2((builtin:c_pointer), (list:list(int)), (io:result((list:list(int)))), (io:state), (io:state)).
:- mode io:read_binary_file_2((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:read_from_string((bool:bool), string, string, int, (io:read_result(T_1)), (io:posn), (io:posn)).
:- mode io:read_from_string((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)) is det.
:- pred io:process_read_term((bool:bool), (term_io:read_term((term:generic))), int, (io:read_result(T_1))).
:- mode io:process_read_term((builtin:in), (builtin:in), (builtin:in), (builtin:out)) is det.
:- pred io:do_print((deconstruct:noncanon_handling), T_1, (io:state), (io:state)).
:- mode io:do_print(builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_print(builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_print(builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- mode io:do_print((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- pred io:do_write((deconstruct:noncanon_handling), T_1, (io:state), (io:state)).
:- mode io:do_write(builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_write(builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_write(builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- mode io:do_write((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- pred io:do_write_univ((deconstruct:noncanon_handling), (std_util:univ), (io:state), (io:state)).
:- mode io:do_write_univ(builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_write_univ(builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- mode io:do_write_univ(builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- mode io:do_write_univ((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is cc_multi.
:- pred io:convert_read_result((io:read_result(T_1)), (io:result(T_1))).
:- mode io:convert_read_result((builtin:in), (builtin:out)) is det.
:- pred io:stream_name((builtin:c_pointer), string, (io:state), (io:state)).
:- mode io:stream_name((builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:get_stream_names((tree234:tree234(int, string)), (io:state), (io:state)).
:- mode io:get_stream_names((builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred io:set_stream_names((tree234:tree234(int, string)), (io:state), (io:state)).
:- mode io:set_stream_names((builtin:in), (builtin:di), (builtin:uo)) is det.
:- pred io:delete_stream_name((builtin:c_pointer), (io:state), (io:state)).
:- mode io:delete_stream_name((builtin:in), (builtin:di), (builtin:uo)) is det.
:- pred io:get_stream_id((builtin:c_pointer), int).
:- mode io:get_stream_id((builtin:in), (builtin:out)) is det.
:- pred io:whence_to_int((io:whence), int).
:- mode io:whence_to_int((builtin:in), (builtin:out)) is det.
:- pred io:seek_binary_2((builtin:c_pointer), int, int, (io:state), (io:state)).
:- mode io:seek_binary_2((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- pred io:close_stream((builtin:c_pointer), (io:state), (io:state)).
:- mode io:close_stream((builtin:in), (builtin:di), (builtin:uo)) is det.
:- pragma inline((io:read_char)/3).
io:read_char(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_char(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_word(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_word(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_line(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_line(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_line_as_string(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_line_as_string(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_file(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_file(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_file_as_string(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_file_as_string(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:input_stream_foldl(Pred_6, T0_7, Res_8, DCG_0_10, DCG_2_12) :-
		io:input_stream(Stream_9, DCG_0_10, DCG_1_11),
		io:input_stream_foldl(Stream_9, Pred_6, T0_7, Res_8, DCG_1_11, DCG_2_12).
io:input_stream_foldl_io(Pred_5, Res_6, DCG_0_8, DCG_2_10) :-
		io:input_stream(Stream_7, DCG_0_8, DCG_1_9),
		io:input_stream_foldl_io(Stream_7, Pred_5, Res_6, DCG_1_9, DCG_2_10).
io:input_stream_foldl2_io(Pred_6, T0_7, Res_8, DCG_0_10, DCG_2_12) :-
		io:input_stream(Stream_9, DCG_0_10, DCG_1_11),
		io:input_stream_foldl2_io(Stream_9, Pred_6, T0_7, Res_8, DCG_1_11, DCG_2_12).
io:putback_char(Char_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:putback_char(Stream_5, Char_4, DCG_1_7, DCG_2_8).
:- pragma inline((io:read_char)/4).
io:read_char(Stream_5, Result_6, DCG_0_10, DCG_2_12) :-
		io:read_char_code(Stream_5, Code_7, DCG_0_10, DCG_1_11),
		(if
			Code_7 = -1
		then
			Result_6 = io:eof,
			DCG_2_12 = DCG_1_11
		else
			(if
				char:to_int(Char_8, Code_7)
			then
				Result_6 = io:ok(Char_8),
				DCG_2_12 = DCG_1_11
			else
				V_13 = "read failed: ",
				io:make_err_msg(V_13, Msg_9, DCG_1_11, DCG_2_12),
				Result_6 = io:error(V_14),
				V_14 = io:io_error(Msg_9)
			)
		).
io:read_file(Stream_5, Result_6, DCG_0_7, DCG_1_8) :-
		V_9 = list:[],
		io:read_file_2(Stream_5, V_9, Result_6, DCG_0_7, DCG_1_8).
io:input_stream_foldl(Stream_7, Pred_8, T0_9, Res_10, DCG_0_15, DCG_2_17) :-
		io:read_char(Stream_7, CharResult_11, DCG_0_15, DCG_1_16),
		( % disjunction
			CharResult_11 = io:ok(Char_12),
			call(Pred_8, Char_12, T0_9, T1_13),
			io:input_stream_foldl(Stream_7, Pred_8, T1_13, Res_10, DCG_1_16, DCG_2_17)
		;
			CharResult_11 = io:eof,
			Res_10 = io:ok(T0_9),
			DCG_2_17 = DCG_1_16
		;
			CharResult_11 = io:error(Error_14),
			Res_10 = io:error(T0_9, Error_14),
			DCG_2_17 = DCG_1_16
		).
io:input_stream_foldl_io(Stream_6, Pred_7, Res_8, DCG_0_12, DCG_3_15) :-
		io:read_char(Stream_6, CharResult_9, DCG_0_12, DCG_1_13),
		( % disjunction
			CharResult_9 = io:ok(Char_10),
			call(Pred_7, Char_10, DCG_1_13, DCG_2_14),
			io:input_stream_foldl_io(Stream_6, Pred_7, Res_8, DCG_2_14, DCG_3_15)
		;
			CharResult_9 = io:eof,
			Res_8 = io:ok,
			DCG_3_15 = DCG_1_13
		;
			CharResult_9 = io:error(Error_11),
			Res_8 = io:error(Error_11),
			DCG_3_15 = DCG_1_13
		).
io:input_stream_foldl2_io(Stream_7, Pred_8, T0_9, Res_10, DCG_0_15, DCG_3_18) :-
		io:read_char(Stream_7, CharResult_11, DCG_0_15, DCG_1_16),
		( % disjunction
			CharResult_11 = io:ok(Char_12),
			call(Pred_8, Char_12, T0_9, T1_13, DCG_1_16, DCG_2_17),
			io:input_stream_foldl2_io(Stream_7, Pred_8, T1_13, Res_10, DCG_2_17, DCG_3_18)
		;
			CharResult_11 = io:eof,
			Res_10 = io:ok(T0_9),
			DCG_3_18 = DCG_1_16
		;
			CharResult_11 = io:error(Error_14),
			Res_10 = io:error(T0_9, Error_14),
			DCG_3_18 = DCG_1_16
		).
:- pragma foreign_proc("C", io:putback_char(File :: (builtin:in), Character :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile* mf = (MercuryFile *) File;
	if (Character == \'\\n\') {
		MR_line_number(*mf)--;
	}
	/* XXX should work even if ungetc() fails */
	if (MR_UNGETCH(*mf, Character) == EOF) {
		mercury_io_error(mf, \"io__putback_char: ungetc failed\");
	}
	MR_update_io(IO0, IO);
}").
io:read(Result_4, DCG_0_8, DCG_2_10) :-
		term_io:read_term(ReadResult_5, DCG_0_8, DCG_1_9),
		io:get_line_number(LineNumber_6, DCG_1_9, DCG_2_10),
		IsAditiTuple_7 = bool:no,
		io:process_read_term(IsAditiTuple_7, ReadResult_5, LineNumber_6, Result_4).
io:read(Stream_5, Result_6, DCG_0_9, DCG_3_12) :-
		io:set_input_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		io:read(Result_6, DCG_1_10, DCG_2_11),
		io:set_input_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
io:read_from_string(FileName_7, String_8, Len_9, Result_10, Posn0_11, Posn_12) :-
		IsAditiTuple_13 = bool:no,
		io:read_from_string(IsAditiTuple_13, FileName_7, String_8, Len_9, Result_10, Posn0_11, Posn_12).
io:ignore_whitespace(Result_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:ignore_whitespace(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:print(Term_4, DCG_0_5, DCG_1_6) :-
		V_7 = deconstruct:canonicalize,
		io:do_print(V_7, Term_4, DCG_0_5, DCG_1_6).
io:print(Stream_5, Term_6, DCG_0_9, DCG_3_12) :-
		io:set_output_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		V_13 = deconstruct:canonicalize,
		io:do_print(V_13, Term_6, DCG_1_10, DCG_2_11),
		io:set_output_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
io:print(Stream_6, NonCanon_7, Term_8, DCG_0_11, DCG_3_14) :-
		io:set_output_stream(Stream_6, OrigStream_9, DCG_0_11, DCG_1_12),
		io:do_print(NonCanon_7, Term_8, DCG_1_12, DCG_2_13),
		io:set_output_stream(OrigStream_9, _Stream_10, DCG_2_13, DCG_3_14).
io:print_cc(Term_4, DCG_0_5, DCG_1_6) :-
		V_7 = deconstruct:include_details_cc,
		io:do_print(V_7, Term_4, DCG_0_5, DCG_1_6).
io:write(X_4, DCG_0_5, DCG_1_6) :-
		V_7 = deconstruct:canonicalize,
		io:do_write(V_7, X_4, DCG_0_5, DCG_1_6).
io:write(Stream_5, X_6, DCG_0_9, DCG_3_12) :-
		io:set_output_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		V_13 = deconstruct:canonicalize,
		io:do_write(V_13, X_6, DCG_1_10, DCG_2_11),
		io:set_output_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
io:write(Stream_6, NonCanon_7, X_8, DCG_0_11, DCG_3_14) :-
		io:set_output_stream(Stream_6, OrigStream_9, DCG_0_11, DCG_1_12),
		io:do_write(NonCanon_7, X_8, DCG_1_12, DCG_2_13),
		io:set_output_stream(OrigStream_9, _Stream_10, DCG_2_13, DCG_3_14).
io:write_cc(X_4, DCG_0_5, DCG_1_6) :-
		V_7 = deconstruct:include_details_cc,
		io:do_write(V_7, X_4, DCG_0_5, DCG_1_6).
io:nl(DCG_0_3, DCG_1_4) :-
		V_5 = '\n',
		io:write_char(V_5, DCG_0_3, DCG_1_4).
io:nl(Stream_4, DCG_0_5, DCG_1_6) :-
		V_7 = '\n',
		io:write_char(Stream_4, V_7, DCG_0_5, DCG_1_6).
:- pragma foreign_proc("C", io:write_string(Message :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	mercury_print_string(mercury_current_text_output, Message);
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:write_string(Stream :: (builtin:in), Message :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	mercury_print_string(stream, Message);
	MR_update_io(IO0, IO);
}").
io:write_strings(Strings_4, DCG_0_6, DCG_2_8) :-
		io:output_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:write_strings(Stream_5, Strings_4, DCG_1_7, DCG_2_8).
:- pragma foreign_proc("C", io:write_char(Character :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (MR_PUTCH(*mercury_current_text_output, Character) < 0) {
		mercury_output_error(mercury_current_text_output);
	}
	if (Character == \'\\n\') {
		MR_line_number(*mercury_current_text_output)++;
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:write_char(Stream :: (builtin:in), Character :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	if (MR_PUTCH(*stream, Character) < 0) {
		mercury_output_error(stream);
	}
	if (Character == \'\\n\') {
		MR_line_number(*stream)++;
	}
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:write_int(Val :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (ML_fprintf(mercury_current_text_output, \"%ld\", (long) Val) < 0) {
		mercury_output_error(mercury_current_text_output);
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:write_int(Stream :: (builtin:in), Val :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	if (ML_fprintf(stream, \"%ld\", (long) Val) < 0) {
		mercury_output_error(stream);
	}
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:write_float(Val :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (ML_fprintf(mercury_current_text_output, \"%#.15g\", Val) < 0) {
		mercury_output_error(mercury_current_text_output);
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:write_float(Stream :: (builtin:in), Val :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	if (ML_fprintf(stream, \"%#.15g\", Val) < 0) {
		mercury_output_error(stream);
	}
	MR_update_io(IO0, IO);
}").
io:format(FormatString_5, Arguments_6, DCG_0_8, DCG_2_10) :-
		io:output_stream(Stream_7, DCG_0_8, DCG_1_9),
		io:format(Stream_7, FormatString_5, Arguments_6, DCG_1_9, DCG_2_10).
io:format(Stream_6, FormatString_7, Arguments_8, DCG_0_10, DCG_1_11) :-
		string:format(FormatString_7, Arguments_8, String_9),
		io:write_string(Stream_6, String_9, DCG_0_10, DCG_1_11).
io:write_many(Poly_list_4, DCG_0_6, DCG_2_8) :-
		io:output_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:write_many(Stream_5, Poly_list_4, DCG_1_7, DCG_2_8).
io:write_list((list:[]), _Separator_6, _OutputPred_7, DCG_0_8, DCG_1_9) :-
		DCG_0_8 = DCG_1_9.
io:write_list((list:[E_10 | Es_11]), Separator_12, OutputPred_13, DCG_0_16, DCG_3_19) :-
		call(OutputPred_13, E_10, DCG_0_16, DCG_1_17),
		( % disjunction
			Es_11 = list:[],
			DCG_2_18 = DCG_1_17
		;
			Es_11 = list:[V_14 | V_15],
			io:write_string(Separator_12, DCG_1_17, DCG_2_18)
		),
		io:write_list(Es_11, Separator_12, OutputPred_13, DCG_2_18, DCG_3_19).
io:write_list(Stream_7, List_8, Separator_9, OutputPred_10, DCG_0_13, DCG_3_16) :-
		io:set_output_stream(Stream_7, OrigStream_11, DCG_0_13, DCG_1_14),
		io:write_list(List_8, Separator_9, OutputPred_10, DCG_1_14, DCG_2_15),
		io:set_output_stream(OrigStream_11, _Stream_12, DCG_2_15, DCG_3_16).
:- pragma foreign_proc("C", io:flush_output(IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (MR_FLUSH(*mercury_current_text_output) < 0) {
		mercury_output_error(mercury_current_text_output);
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:flush_output(Stream :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	if (MR_FLUSH(*stream) < 0) {
		mercury_output_error(stream);
	}
	MR_update_io(IO0, IO);
}").
io:seen(DCG_0_5, DCG_3_8) :-
		io:stdin_stream(Stdin_3, DCG_0_5, DCG_1_6),
		io:set_input_stream(Stdin_3, OldStream_4, DCG_1_6, DCG_2_7),
		io:close_input(OldStream_4, DCG_2_7, DCG_3_8).
io:close_input(Stream_4, DCG_0_5, DCG_2_7) :-
		io:delete_stream_name(Stream_4, DCG_0_5, DCG_1_6),
		io:close_stream(Stream_4, DCG_1_6, DCG_2_7).
:- pragma foreign_proc("C", io:input_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) mercury_current_text_input;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_input_stream(NewStream :: (builtin:in), OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_text_input;
	mercury_current_text_input = (MercuryFile *) NewStream;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:stdin_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) &mercury_stdin;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:current_input_stream(OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_text_input;
	MR_update_io(IO0, IO);
").
io:input_stream_name(Name_4, DCG_0_6, DCG_2_8) :-
		io:input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:stream_name(Stream_5, Name_4, DCG_1_7, DCG_2_8).
io:input_stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8) :-
		io:stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8).
:- pragma foreign_proc("C", io:get_line_number(LineNum :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	LineNum = MR_line_number(*mercury_current_text_input);
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:get_line_number(Stream :: (builtin:in), LineNum :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	LineNum = MR_line_number(*stream);
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:set_line_number(LineNum :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	MR_line_number(*mercury_current_text_input) = LineNum;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_line_number(Stream :: (builtin:in), LineNum :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	MR_line_number(*stream) = LineNum;
	MR_update_io(IO0, IO);
}").
io:told(DCG_0_5, DCG_3_8) :-
		io:stdout_stream(Stdout_3, DCG_0_5, DCG_1_6),
		io:set_output_stream(Stdout_3, OldStream_4, DCG_1_6, DCG_2_7),
		io:close_output(OldStream_4, DCG_2_7, DCG_3_8).
io:close_output(Stream_4, DCG_0_5, DCG_2_7) :-
		io:delete_stream_name(Stream_4, DCG_0_5, DCG_1_6),
		io:close_stream(Stream_4, DCG_1_6, DCG_2_7).
:- pragma foreign_proc("C", io:output_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) mercury_current_text_output;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_output_stream(NewStream :: (builtin:in), OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_text_output;
	mercury_current_text_output = (MercuryFile *) NewStream;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:stdout_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) &mercury_stdout;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:stderr_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) &mercury_stderr;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:current_output_stream(OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_text_output;
	MR_update_io(IO0, IO);
").
io:output_stream_name(Name_4, DCG_0_6, DCG_2_8) :-
		io:output_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:stream_name(Stream_5, Name_4, DCG_1_7, DCG_2_8).
io:output_stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8) :-
		io:stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8).
:- pragma foreign_proc("C", io:get_output_line_number(LineNum :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	LineNum = MR_line_number(*mercury_current_text_output);
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:get_output_line_number(Stream :: (builtin:in), LineNum :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	LineNum = MR_line_number(*stream);
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:set_output_line_number(LineNum :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	MR_line_number(*mercury_current_text_output) = LineNum;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_output_line_number(Stream :: (builtin:in), LineNum :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	MR_line_number(*stream) = LineNum;
	MR_update_io(IO0, IO);
}").
io:read_binary(Result_4, DCG_0_7, DCG_2_9) :-
		io:binary_input_stream(Stream_5, DCG_0_7, DCG_1_8),
		io:read(Stream_5, ReadResult_6, DCG_1_8, DCG_2_9),
		io:convert_read_result(ReadResult_6, Result_4).
io:read_binary(Stream_5, Result_6, DCG_0_9, DCG_3_12) :-
		io:set_binary_input_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		io:read_binary(Result_6, DCG_1_10, DCG_2_11),
		io:set_binary_input_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
:- pragma inline((io:read_byte)/3).
io:read_byte(Result_4, DCG_0_6, DCG_2_8) :-
		io:binary_input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_byte(Stream_5, Result_4, DCG_1_7, DCG_2_8).
:- pragma inline((io:read_byte)/4).
io:read_byte(Stream_5, Result_6, DCG_0_9, DCG_2_11) :-
		io:read_byte_val(Stream_5, Code_7, DCG_0_9, DCG_1_10),
		(if
			V_12 = 0,
			int:(Code_7 >= V_12)
		then
			Result_6 = io:ok(Code_7),
			DCG_2_11 = DCG_1_10
		else
			(if
				Code_7 = -1
			then
				Result_6 = io:eof,
				DCG_2_11 = DCG_1_10
			else
				V_13 = "read failed: ",
				io:make_err_msg(V_13, Msg_8, DCG_1_10, DCG_2_11),
				Result_6 = io:error(V_14),
				V_14 = io:io_error(Msg_8)
			)
		).
io:read_binary_file(Result_4, DCG_0_6, DCG_2_8) :-
		io:binary_input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:read_binary_file(Stream_5, Result_4, DCG_1_7, DCG_2_8).
io:read_binary_file(Stream_5, Result_6, DCG_0_7, DCG_1_8) :-
		V_9 = list:[],
		io:read_binary_file_2(Stream_5, V_9, Result_6, DCG_0_7, DCG_1_8).
io:binary_input_stream_foldl(Pred_6, T0_7, Res_8, DCG_0_10, DCG_2_12) :-
		io:binary_input_stream(Stream_9, DCG_0_10, DCG_1_11),
		io:binary_input_stream_foldl(Stream_9, Pred_6, T0_7, Res_8, DCG_1_11, DCG_2_12).
io:binary_input_stream_foldl_io(Pred_5, Res_6, DCG_0_8, DCG_2_10) :-
		io:binary_input_stream(Stream_7, DCG_0_8, DCG_1_9),
		io:binary_input_stream_foldl_io(Stream_7, Pred_5, Res_6, DCG_1_9, DCG_2_10).
io:binary_input_stream_foldl2_io(Pred_6, T0_7, Res_8, DCG_0_10, DCG_2_12) :-
		io:binary_input_stream(Stream_9, DCG_0_10, DCG_1_11),
		io:binary_input_stream_foldl2_io(Stream_9, Pred_6, T0_7, Res_8, DCG_1_11, DCG_2_12).
io:binary_input_stream_foldl(Stream_7, Pred_8, T0_9, Res_10, DCG_0_15, DCG_2_17) :-
		io:read_byte(Stream_7, ByteResult_11, DCG_0_15, DCG_1_16),
		( % disjunction
			ByteResult_11 = io:ok(Byte_12),
			call(Pred_8, Byte_12, T0_9, T1_13),
			io:binary_input_stream_foldl(Stream_7, Pred_8, T1_13, Res_10, DCG_1_16, DCG_2_17)
		;
			ByteResult_11 = io:eof,
			Res_10 = io:ok(T0_9),
			DCG_2_17 = DCG_1_16
		;
			ByteResult_11 = io:error(Error_14),
			Res_10 = io:error(T0_9, Error_14),
			DCG_2_17 = DCG_1_16
		).
io:binary_input_stream_foldl_io(Stream_6, Pred_7, Res_8, DCG_0_12, DCG_3_15) :-
		io:read_byte(Stream_6, ByteResult_9, DCG_0_12, DCG_1_13),
		( % disjunction
			ByteResult_9 = io:ok(Byte_10),
			call(Pred_7, Byte_10, DCG_1_13, DCG_2_14),
			io:binary_input_stream_foldl_io(Stream_6, Pred_7, Res_8, DCG_2_14, DCG_3_15)
		;
			ByteResult_9 = io:eof,
			Res_8 = io:ok,
			DCG_3_15 = DCG_1_13
		;
			ByteResult_9 = io:error(Error_11),
			Res_8 = io:error(Error_11),
			DCG_3_15 = DCG_1_13
		).
io:binary_input_stream_foldl2_io(Stream_7, Pred_8, T0_9, Res_10, DCG_0_15, DCG_3_18) :-
		io:read_byte(Stream_7, ByteResult_11, DCG_0_15, DCG_1_16),
		( % disjunction
			ByteResult_11 = io:ok(Byte_12),
			call(Pred_8, Byte_12, T0_9, T1_13, DCG_1_16, DCG_2_17),
			io:binary_input_stream_foldl2_io(Stream_7, Pred_8, T1_13, Res_10, DCG_2_17, DCG_3_18)
		;
			ByteResult_11 = io:eof,
			Res_10 = io:ok(T0_9),
			DCG_3_18 = DCG_1_16
		;
			ByteResult_11 = io:error(Error_14),
			Res_10 = io:error(T0_9, Error_14),
			DCG_3_18 = DCG_1_16
		).
io:putback_byte(Char_4, DCG_0_6, DCG_2_8) :-
		io:binary_input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:putback_byte(Stream_5, Char_4, DCG_1_7, DCG_2_8).
:- pragma foreign_proc("C", io:putback_byte(File :: (builtin:in), Character :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile* mf = (MercuryFile *) File;
	/* XXX should work even if ungetc() fails */
	if (MR_UNGETCH(*mf, Character) == EOF) {
		mercury_io_error(mf, \"io__putback_byte: ungetc failed\");
	}
	MR_update_io(IO0, IO);
}").
io:write_binary(Term_4, DCG_0_6, DCG_3_9) :-
		io:binary_output_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:write(Stream_5, Term_4, DCG_1_7, DCG_2_8),
		V_10 = ".\n",
		io:write_string(Stream_5, V_10, DCG_2_8, DCG_3_9).
io:write_binary(Stream_5, Term_6, DCG_0_9, DCG_3_12) :-
		io:set_binary_output_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		io:write_binary(Term_6, DCG_1_10, DCG_2_11),
		io:set_binary_output_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
:- pragma foreign_proc("C", io:write_byte(Byte :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	/* call putc with a strictly non-negative byte-sized integer */
	if (MR_PUTCH(*mercury_current_binary_output,
			(int) ((unsigned char) Byte)) < 0)
	{
		mercury_output_error(mercury_current_text_output);
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:write_byte(Stream :: (builtin:in), Byte :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	/* call putc with a strictly non-negative byte-sized integer */
	if (MR_PUTCH(*stream, (int) ((unsigned char) Byte)) < 0) {
		mercury_output_error(stream);
	}
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:write_bytes(Message :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	mercury_print_binary_string(mercury_current_binary_output, Message);
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:write_bytes(Stream :: (builtin:in), Message :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	mercury_print_binary_string(stream, Message);
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:flush_binary_output(IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (MR_FLUSH(*mercury_current_binary_output) < 0) {
		mercury_output_error(mercury_current_binary_output);
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:flush_binary_output(Stream :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	if (MR_FLUSH(*stream) < 0) {
		mercury_output_error(stream);
	}
	MR_update_io(IO0, IO);
}").
io:seek_binary(Stream_6, Whence_7, Offset_8, IO0_9, IO_10) :-
		io:whence_to_int(Whence_7, Flag_11),
		io:seek_binary_2(Stream_6, Flag_11, Offset_8, IO0_9, IO_10).
:- pragma foreign_proc("C", io:binary_stream_offset(Stream :: (builtin:in), Offset :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	MercuryFile *stream = (MercuryFile *) Stream;
	/* XXX should check for failure */
	/* XXX should check if the stream is tellable */
	if (MR_IS_FILE_STREAM(*stream)) {
		Offset = ftell(MR_file(*stream));
	} else {
		mercury_io_error(stream,
			\"io__binary_stream_offset: untellable stream\");
	}
	MR_update_io(IO0, IO);
}").
io:seen_binary(DCG_0_5, DCG_3_8) :-
		io:stdin_binary_stream(Stdin_3, DCG_0_5, DCG_1_6),
		io:set_binary_input_stream(Stdin_3, OldStream_4, DCG_1_6, DCG_2_7),
		io:close_binary_input(OldStream_4, DCG_2_7, DCG_3_8).
io:close_binary_input(Stream_4, DCG_0_5, DCG_2_7) :-
		io:delete_stream_name(Stream_4, DCG_0_5, DCG_1_6),
		io:close_stream(Stream_4, DCG_1_6, DCG_2_7).
:- pragma foreign_proc("C", io:binary_input_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) mercury_current_binary_input;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_binary_input_stream(NewStream :: (builtin:in), OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_binary_input;
	mercury_current_binary_input = (MercuryFile *) NewStream;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:stdin_binary_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) &mercury_stdin_binary;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:current_binary_input_stream(OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_binary_input;
	MR_update_io(IO0, IO);
").
io:binary_input_stream_name(Name_4, DCG_0_6, DCG_2_8) :-
		io:binary_input_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:stream_name(Stream_5, Name_4, DCG_1_7, DCG_2_8).
io:binary_input_stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8) :-
		io:stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8).
io:told_binary(DCG_0_5, DCG_3_8) :-
		io:stdout_binary_stream(Stdout_3, DCG_0_5, DCG_1_6),
		io:set_binary_output_stream(Stdout_3, OldStream_4, DCG_1_6, DCG_2_7),
		io:close_binary_output(OldStream_4, DCG_2_7, DCG_3_8).
io:close_binary_output(Stream_4, DCG_0_5, DCG_2_7) :-
		io:delete_stream_name(Stream_4, DCG_0_5, DCG_1_6),
		io:close_stream(Stream_4, DCG_1_6, DCG_2_7).
:- pragma foreign_proc("C", io:binary_output_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) mercury_current_binary_output;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:stdout_binary_stream(Stream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	Stream = (MR_Word) &mercury_stdout_binary;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_binary_output_stream(NewStream :: (builtin:in), OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_binary_output;
	mercury_current_binary_output = (MercuryFile *) NewStream;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:current_binary_output_stream(OutStream :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	OutStream = (MR_Word) mercury_current_binary_output;
	MR_update_io(IO0, IO);
").
io:binary_output_stream_name(Name_4, DCG_0_6, DCG_2_8) :-
		io:binary_output_stream(Stream_5, DCG_0_6, DCG_1_7),
		io:stream_name(Stream_5, Name_4, DCG_1_7, DCG_2_8).
io:binary_output_stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8) :-
		io:stream_name(Stream_5, Name_6, DCG_0_7, DCG_1_8).
:- pragma foreign_proc("C", io:progname(DefaultProgname :: (builtin:in), PrognameOut :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	if (MR_progname) {
		/*
		** The silly casting below is needed to avoid
		** a gcc warning about casting away const.
		** PrognameOut is of type `MR_String\' (char *);
		** it should be of type `MR_ConstString\' (const char *),
		** but fixing that requires a fair bit of work
		** on the compiler.
		*/
		MR_make_aligned_string(
			MR_LVALUE_CAST(MR_ConstString, PrognameOut),
			MR_progname);
	} else {
		PrognameOut = DefaultProgname;
	}
	MR_update_io(IO0, IO);
").
io:progname_base(DefaultName_5, PrognameBase_6, DCG_0_8, DCG_1_9) :-
		io:progname(DefaultName_5, Progname_7, DCG_0_8, DCG_1_9),
		dir:basename(Progname_7, PrognameBase_6).
:- pragma foreign_proc("C", io:command_line_arguments(Args :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	/* convert mercury_argv from a vector to a list */
	{ int i = mercury_argc;
	  Args = MR_list_empty_msg(MR_PROC_LABEL);
	  while (--i >= 0) {
		Args = MR_list_cons_msg((MR_Word) mercury_argv[i], Args,
			MR_PROC_LABEL);
	  }
	}
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:get_exit_status(ExitStatus :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	ExitStatus = mercury_exit_status;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_exit_status(ExitStatus :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	mercury_exit_status = ExitStatus;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:get_globals(Globals :: (builtin:uo), IOState0 :: (builtin:di), IOState :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	Globals = ML_io_user_globals;
	MR_update_io(IOState0, IOState);
").
:- pragma foreign_proc("C", io:set_globals(Globals :: (builtin:di), IOState0 :: (builtin:di), IOState :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	/* XXX need to globalize the memory */
	ML_io_user_globals = Globals;
	MR_update_io(IOState0, IOState);
").
io:tmpnam(Name_4, DCG_0_6, DCG_2_8) :-
		io:make_temp(Name_4, DCG_0_6, DCG_1_7),
		io:remove_file(Name_4, _Result_5, DCG_1_7, DCG_2_8).
io:tmpnam(Dir_6, Prefix_7, Name_8, DCG_0_10, DCG_2_12) :-
		io:make_temp(Dir_6, Prefix_7, Name_8, DCG_0_10, DCG_1_11),
		io:remove_file(Name_8, _Result_9, DCG_1_11, DCG_2_12).
io:report_stats(DCG_0_3, DCG_1_4) :-
		V_5 = "standard",
		io:report_stats(V_5, DCG_0_3, DCG_1_4).
io:report_full_memory_stats(DCG_0_3, DCG_1_4) :-
		V_5 = "full_memory_stats",
		io:report_stats(V_5, DCG_0_3, DCG_1_4).
io:make_io_error(Error_3) = (io:io_error(Error_3)).
io:error_message(Error_3) = Msg_4 :-
		io:error_message(Error_3, Msg_4).
io:error_message((io:io_error(Error_3)), Error_3).
io:get_op_table(HeadVar__1_1, DCG_0_4, DCG_1_5) :-
		HeadVar__1_1 = ops:init_mercury_op_table,
		DCG_0_4 = DCG_1_5.
io:set_op_table(_OpTable_4, DCG_0_5, DCG_1_6) :-
		DCG_0_5 = DCG_1_6.
io:write_univ(Univ_4, DCG_0_5, DCG_1_6) :-
		V_7 = deconstruct:canonicalize,
		io:do_write_univ(V_7, Univ_4, DCG_0_5, DCG_1_6).
io:write_univ(Stream_5, Univ_6, DCG_0_9, DCG_3_12) :-
		io:set_output_stream(Stream_5, OrigStream_7, DCG_0_9, DCG_1_10),
		V_13 = deconstruct:canonicalize,
		io:do_write_univ(V_13, Univ_6, DCG_1_10, DCG_2_11),
		io:set_output_stream(OrigStream_7, _Stream_8, DCG_2_11, DCG_3_12).
io:write_univ(Stream_6, NonCanon_7, Univ_8, DCG_0_11, DCG_3_14) :-
		io:set_output_stream(Stream_6, OrigStream_9, DCG_0_11, DCG_1_12),
		io:do_write_univ(NonCanon_7, Univ_8, DCG_1_12, DCG_2_13),
		io:set_output_stream(OrigStream_9, _Stream_10, DCG_2_13, DCG_3_14).
io:read_from_string_with_int_instead_of_char(FileName_7, String_8, Len_9, Result_10, Posn0_11, Posn_12) :-
		IsAditiTuple_13 = bool:yes,
		io:read_from_string(IsAditiTuple_13, FileName_7, String_8, Len_9, Result_10, Posn0_11, Posn_12).
io:get_stream_id(Stream_3) = Id_4 :-
		io:get_stream_id(Stream_3, Id_4).
:- pragma foreign_proc("C", io:read_char_code(File :: (builtin:in), CharCode :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	CharCode = mercury_getc((MercuryFile *) File);
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:read_byte_val(File :: (builtin:in), ByteVal :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	ByteVal = mercury_getc((MercuryFile *) File);
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:make_err_msg(Msg0 :: (builtin:in), Msg :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "{
	ML_maybe_make_err_msg(MR_TRUE, Msg0, MR_PROC_LABEL, Msg);
	MR_update_io(IO0, IO);
}").
io:read_from_string(IsAditiTuple_8, FileName_9, String_10, Len_11, Result_12, Posn0_13, Posn_14) :-
		parser:read_term_from_string(FileName_9, String_10, Len_11, Posn0_13, Posn_14, ReadResult_15),
		Posn_14 = io:posn(LineNumber_16, V_17, V_18),
		io:process_read_term(IsAditiTuple_8, ReadResult_15, LineNumber_16, Result_12).
io:do_write(NonCanon_5, Term_6, DCG_0_8, DCG_1_9) :-
		std_util:type_to_univ(Term_6, Univ_7),
		io:do_write_univ(NonCanon_5, Univ_7, DCG_0_8, DCG_1_9).
:- pragma foreign_proc("C", io:get_stream_names(StreamNames :: (builtin:out), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	StreamNames = ML_io_stream_names;
	MR_update_io(IO0, IO);
").
:- pragma foreign_proc("C", io:set_stream_names(StreamNames :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, not_thread_safe, tabled_for_io, promise_pure], "
	ML_io_stream_names = StreamNames;
	MR_update_io(IO0, IO);
").
io:delete_stream_name(Stream_4, DCG_0_7, DCG_2_9) :-
		io:get_stream_names(StreamNames0_5, DCG_0_7, DCG_1_8),
		V_10 = io:get_stream_id(Stream_4),
		map:delete(StreamNames0_5, V_10, StreamNames_6),
		io:set_stream_names(StreamNames_6, DCG_1_8, DCG_2_9).
:- pragma foreign_proc("C", io:get_stream_id(Stream :: (builtin:in), Id :: (builtin:out)), [will_not_call_mercury, not_thread_safe, not_tabled_for_io, promise_pure], "

#ifndef MR_NATIVE_GC
	/* 
	** Most of the time, we can just use the pointer to the stream
	** as a unique identifier.
	*/
	Id = (MR_Word) Stream;
#else
	/* 
	** for accurate GC we embed an ID in the MercuryFile
	** and retrieve it here.
	*/
	Id = ((MercuryFile *) Stream)->id;
#endif
").
:- pragma foreign_proc("C", io:seek_binary_2(Stream :: (builtin:in), Flag :: (builtin:in), Off :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [will_not_call_mercury, thread_safe, tabled_for_io, promise_pure], "{
	static const int seek_flags[] = { SEEK_SET, SEEK_CUR, SEEK_END };
	MercuryFile *stream = (MercuryFile *) Stream;
	/* XXX should check for failure */
	/* XXX should also check if the stream is seekable */
	if (MR_IS_FILE_STREAM(*stream)) {
		fseek(MR_file(*stream), Off, seek_flags[Flag]);
	} else {
		mercury_io_error(stream,
				\"io__seek_binary_2: unseekable stream\");
	}
	MR_update_io(IO0, IO);
}").
:- pragma foreign_proc("C", io:close_stream(Stream :: (builtin:in), IO0 :: (builtin:di), IO :: (builtin:uo)), [may_call_mercury, thread_safe, tabled_for_io, promise_pure], "
	mercury_close((MercuryFile *) Stream);
	MR_update_io(IO0, IO);
").
:- pragma termination_info(io:read_char((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_word((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_line((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_line_as_string((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_file((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_file_as_string((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl((pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl_io((pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl_io((pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl2_io((pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl2_io((pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:putback_char((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_char((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_word((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_line((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_line_as_string((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_file((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_file_as_string((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl_io((builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl_io((builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl2_io((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_foldl2_io((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:putback_char((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_from_string((builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(io:ignore_whitespace((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:ignore_whitespace((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:print_cc((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_cc((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:nl((builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:nl((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_string((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_string((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_strings((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_strings((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_char((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_char((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_int((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_int((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_float((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_float((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:format((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:format((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_many((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_many((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_list((builtin:in), (builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_list((builtin:in), (builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_list((builtin:in), (builtin:in), (builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_list((builtin:in), (builtin:in), (builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:flush_output((builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:flush_output((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:see((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:seen((builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_input((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:close_input((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_input_stream((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:stdin_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:current_input_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:input_stream_name((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:input_stream_name((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:get_line_number((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:get_line_number((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_line_number((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_line_number((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:tell((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:told((builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_output((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_append((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:close_output((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:output_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_output_stream((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:stdout_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:stderr_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:current_output_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:output_stream_name((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:output_stream_name((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:get_output_line_number((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:get_output_line_number((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_output_line_number((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_output_line_number((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_binary((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_binary((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_byte((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_byte((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:read_binary_file((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_binary_file((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl((pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl((pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl_io((pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl_io((pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl2_io((pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl2_io((pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl_io((builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is det), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl_io((builtin:in), (pred((builtin:in), (builtin:di), (builtin:uo)) is cc_multi), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl2_io((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is det), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_foldl2_io((builtin:in), (pred((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)) is cc_multi), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:putback_byte((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:putback_byte((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_binary((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_binary((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_byte((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_byte((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_bytes((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:write_bytes((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:flush_binary_output((builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:flush_binary_output((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:seek_binary((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:binary_stream_offset((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:see_binary((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:seen_binary((builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_binary_input((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:close_binary_input((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_binary_input_stream((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:stdin_binary_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:current_binary_input_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:binary_input_stream_name((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_input_stream_name((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:tell_binary((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:told_binary((builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_binary_output((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:open_binary_append((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:close_binary_output((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_output_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:stdout_binary_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_binary_output_stream((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:current_binary_output_stream((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:binary_output_stream_name((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:binary_output_stream_name((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:progname((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:progname_base((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:command_line_arguments((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:get_exit_status((builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_exit_status((builtin:in), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:get_globals((builtin:uo), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_globals((builtin:di), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:get_environment_var((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:set_environment_var((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), finite(0, [no, no, yes, no]), can_loop).
:- pragma termination_info(io:tmpnam((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:tmpnam((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:make_temp((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:make_temp((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:remove_file((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:rename_file((builtin:in), (builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:file_modification_time((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:report_stats((builtin:di), (builtin:uo)), finite(0, [yes, no]), can_loop).
:- pragma termination_info(io:report_full_memory_stats((builtin:di), (builtin:uo)), finite(0, [yes, no]), can_loop).
:- pragma termination_info(io:report_stats((builtin:in), (builtin:di), (builtin:uo)), finite(0, [no, yes, no]), can_loop).
:- pragma termination_info(io:call_system((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:call_system_return_signal((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, cannot_loop).
:- pragma termination_info(io:make_io_error((builtin:in)) = (builtin:out), finite(1, [yes, no]), cannot_loop).
:- pragma termination_info(io:error_message((builtin:in)) = (builtin:out), finite(-1, [yes, no]), cannot_loop).
:- pragma termination_info(io:error_message((builtin:in), (builtin:out)), finite(-1, [yes, no]), cannot_loop).
:- pragma termination_info(io:get_op_table((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:set_op_table((builtin:di), (builtin:di), (builtin:uo)), finite(0, [no, yes, no]), cannot_loop).
:- pragma termination_info(io:write_univ((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_univ((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_univ((builtin:in), builtin:in((deconstruct:do_not_allow)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_univ((builtin:in), builtin:in((deconstruct:canonicalize)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_univ((builtin:in), builtin:in((deconstruct:include_details_cc)), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:write_univ((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(io:read_from_string_with_int_instead_of_char((builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:in), (builtin:out)), infinite, can_loop).
:- pragma termination_info(io:handle_system_command_exit_status((builtin:in)) = (builtin:out), infinite, cannot_loop).
:- pragma termination_info(io:init_state((builtin:di), (builtin:uo)), infinite, can_loop).
