Difference-list version to read an input line to a list of character 
codes. Reading stops at the newline or end-of-file character, but unlike read_line_to_codes/2, 
the newline is retained in the output. This predicate is especially 
useful for reading a block of lines up to some delimiter. The following 
example reads an HTTP header ended by a blank line:
read_header_data(Stream, Header) :-
    read_line_to_codes(Stream, Header, Tail),
    read_header_data(Header, Stream, Tail).
read_header_data("\r\n", _, _) :- !.
read_header_data("\n", _, _) :- !.
read_header_data("", _, _) :- !.
read_header_data(_, Stream, Tail) :-
    read_line_to_codes(Stream, Tail, NewTail),
    read_header_data(Tail, Stream, NewTail).