| 1 | % (c) 2009-2024 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, | |
| 2 | % Heinrich Heine Universitaet Duesseldorf | |
| 3 | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) | |
| 4 | ||
| 5 | :- module(tools_files, | |
| 6 | [write_lines_to_file/2, | |
| 7 | write_to_file/2, | |
| 8 | write_to_utf8_file/2, write_to_utf8_file_or_user_output/2, | |
| 9 | put_codes/2, | |
| 10 | read_file_codes/2]). | |
| 11 | ||
| 12 | ||
| 13 | :- use_module(module_information). | |
| 14 | ||
| 15 | :- module_info(group,infrastructure). | |
| 16 | :- module_info(description,'A few utilities on files seperated out from tools.pl to avoid cyclic module dependencies.'). | |
| 17 | ||
| 18 | write_lines_to_file(FILE,Lines) :- | |
| 19 | lines_to_code_list(Lines,CodeList), | |
| 20 | write_to_file(FILE,CodeList). | |
| 21 | ||
| 22 | lines_to_code_list([],[]). | |
| 23 | lines_to_code_list([Line|Lines],CodeList) :- | |
| 24 | (number(Line) -> number_codes(Line,L); atom_codes(Line,L)), | |
| 25 | append(L,[10],L1), | |
| 26 | append(L1,RL,CodeList), | |
| 27 | lines_to_code_list(Lines,RL). | |
| 28 | ||
| 29 | write_to_utf8_file(FILE,CodesList) :- | |
| 30 | open(FILE,write,S,[encoding(utf8)]), | |
| 31 | put_codes(CodesList,S), | |
| 32 | close(S). | |
| 33 | ||
| 34 | write_to_utf8_file_or_user_output(user_output,CodesList) :- !, | |
| 35 | put_codes(CodesList,user_output). | |
| 36 | write_to_utf8_file_or_user_output(FILE,CodesList) :- write_to_utf8_file(FILE,CodesList). | |
| 37 | ||
| 38 | write_to_file(FILE,CodesList) :- | |
| 39 | open(FILE,write,S), | |
| 40 | put_codes(CodesList,S), | |
| 41 | close(S). | |
| 42 | ||
| 43 | put_codes([],_). | |
| 44 | put_codes([H|T],Stream) :- put_code(Stream,H), put_codes(T,Stream). | |
| 45 | ||
| 46 | ||
| 47 | ||
| 48 | read_file_codes(Filename,Codes) :- | |
| 49 | open(Filename,read,S,[encoding(utf8)]), | |
| 50 | call_cleanup(read_codes(S,Codes), | |
| 51 | close(S)). | |
| 52 | read_codes(S,Codes) :- | |
| 53 | get_code(S,Code), | |
| 54 | ( Code < 0 -> | |
| 55 | Codes = [] | |
| 56 | ; | |
| 57 | Codes = [Code|Rest], | |
| 58 | read_codes(S,Rest)). |