library std; use std.textio.all; entity test is end entity test; architecture rtl of test is type t_line_vector is array (natural range <>) of line; type t_line_vector_ptr is access t_line_vector; procedure read_file(filename : in string; line_vector_ptr : out t_line_vector_ptr) is file file_pointer : text; variable open_status : file_open_status; variable current_line : line; variable line_number : natural; variable res : t_line_vector_ptr; variable tmp : t_line_vector_ptr; begin file_open(open_status, file_pointer, filename, READ_MODE); assert (open_status = OPEN_OK) report "read_configuration: can't open file '" & filename & "' in read mode (" & file_open_status'image(open_status) & ")" severity failure; line_number := 0; res := new t_line_vector(1 to line_number); while not(endfile(file_pointer)) loop readline(file_pointer, current_line); line_number := (line_number + 1); tmp := new t_line_vector(1 to line_number); tmp.all(res.all'range) := res.all; tmp.all(line_number) := current_line; deallocate(res); res := tmp; end loop; file_close(file_pointer); line_vector_ptr := res; end procedure read_file; procedure write_file(line_vector_ptr : inout t_line_vector_ptr; filename : in string) is file file_pointer : text; variable open_status : file_open_status; begin file_open(open_status, file_pointer, filename, WRITE_MODE); assert (open_status = OPEN_OK) report "read_configuration: can't open file '" & filename & "' in read mode (" & file_open_status'image(open_status) & ")" severity failure; for LINE_INDEX in line_vector_ptr.all'range loop writeline(file_pointer, line_vector_ptr.all(LINE_INDEX)); end loop; file_close(file_pointer); end procedure write_file; begin process variable line_vector_ptr : t_line_vector_ptr; begin read_file("aaa", line_vector_ptr); write_file(line_vector_ptr, "bbb"); wait; end process; end architecture rtl;